測試標誌位指令

2021-05-14 13:15:38 字數 1482 閱讀 9727

測試某些示志位的情況來設定位元組的指令 

這是一大類指令,格式為:setxx reg8/mem8

它的功能是:若條件xx成立,則位元組暫存器reg8或節儲存器單元被設定為1,否則被設定為0.條件xx 見下表:

setz/sete zf=1 等於零/相等

setnz/setne zf=0 不等於零/不相等

sets sf=1 符號為負

setns sf=0 符號為正

setp/setpe pf=1 1的個數為偶

setnp/setpo pf=0 1的個數為奇

seto of=1 溢位

setno of=0 無溢位

setc/setb/setnae cf=1 進製/低於/不高於等於

setnc/setnb/setae cf=0 無進製/不低於/高於等於

setbe/setna cf=1或zf=1 低於等於/不高於

setnbe/seta cf=0且zf=0 不低於等於/高於

setl/setnge sf不等於nf 小於/不大於等於

setnl/setge sf=of 不小於/大於等於

setle/setng zf不等於of或zf=1 小於等於/不大於

setnle/setg sf=of且zf=0 不小於等於/大於

例1 如下程式段測試暫存器eax中的8位16進製制數是否有一位為0.bh=0表示沒有一位為0.

mov bh,0

mov cx,0

next:test al,0fh

setz bl

ror eax,4

loop next

例2 如下程式段統計ds:si所指向的位元組資料緩衝區中正數和負數的個數,假定緩衝區以0結尾.

xor dx,dx

next:lodsb

cmp al,0

jz short over

setg bl

setl bh

add dl,bl

add dh,bh

jmp next

over:...

CMP指令和標誌位

彙編中的cmp指令是一條比較指令,對比兩個運算元的大小,但是計算機並不理解大小,它只是對兩個運算元進行了一次減法操作,然後對一些標誌位進行了一些邏輯運算來判斷哪個數大,涉及的標誌位有如下一些 cf 是否有進製或者借位 zf 0標誌位,就是結果是否為0 of 溢位標誌位,是否計算機結果溢位了 sf 符...

8086標誌位作用及其相關指令

先插入386的32位標誌暫存器一張 8086只看低16位即可 1 進製標誌cf carry flag 進製標誌cf主要用來反映運算是否產生進製或借位。如果運算結果的最高位產生了乙個進製或借位,那麼,其值為1,否則其值為0。使用該標誌位的情況有 多字 位元組 數的加減運算,無符號數的大小比較運算,移位...

彙編指令對標誌位的影響

mov lea xchg push pop in out 傳送類指令不影響標誌位 add adc sub sbb cmp 加減法指令影響全部標誌位 inc dec 增一減一指令不影響cf neg 求補指令影響除cf外的5個標誌位,對cf位置1 mul imul 乘法指令只影響of位和cf位,對其他位...