簡介
SCA彙編指令SB:
計算 AL - byte of [ES:EDI] , 設置相應的标志寄存器的值;
修改寄存器EDI的值:如果标志DF為0,則 inc EDI;如果DF為1,則 dec EDI。
SCASB指令常與循環指令REPZ/REPNZ合用。例如,REPNZ SCASB 語句表示當 寄存器ECX>0 且 标志寄存器ZF=0,則再執行一次SCASB指令。
比較寄存器AL的值不相等則重複查找的字
ECX 是比較時的最大次數,每掃描一次,ECX減1,當ECX減小到0時,将停止掃描。
所以停止掃描的條件是兩個,找到了字符或者已經達到最大次數,未找到字符。
示例代碼
mov al,0x8b ;要查找的字符
mov edi,ebx ;字符串首地址
Scanloop_1:
repne scasb
jnz Scan_Done ;标志ZF如果為0,表示字符串中沒有0x8b這個字符。
命令補充引
repnz指令說明:重複執行其後面的指令,CX或ECX存放最多比較次數,DI或EDI存放查找表首地址,AL或AX或EAX存放想查找的内容。當(CX或ECX)= 0 或 ZF=1 退出重複,否則,(CX或ECX)自減一,執行其後的串指令。CX或ECX為0結束是因為已經查表完畢,沒有匹配到;ZF=1說明“比較的結果為0”,也就是查找到一樣的内容,說明匹配到想要查找的内容。
SCASB(字節)
SCASW(字)
SCASD(雙字)(386及其後繼機型可用)
執行的操作:
(AL) - ((destination-index)),(destination-index) ← (destination-index) +或- 1
(AX) - ((destination-index)),(destination-index) ← (destination-index) +或- 2
(EAX) - ((destination-index)),(destination-index) ← (destination-index) +或- 4
指令把AL,AX或EAX的内容與由目的變址寄存器指向的附加段中的一個字節、字或雙字進行比較,并不保存結果,隻根據結果設置标志位。