彙編中的cmp指令是一條比較指令,對比兩個運算元的大小,但是計算機並不理解大小,它只是對兩個運算元進行了一次減法操作,然後對一些標誌位進行了一些邏輯運算來判斷哪個數大,涉及的標誌位有如下一些:
cf:是否有進製或者借位
zf:0標誌位,就是結果是否為0
of:溢位標誌位,是否計算機結果溢位了
sf:符號位,0為正,1為負
af:輔助進製標誌位,我也不知道幹嘛的
pf:奇偶標誌位,這個好判斷呀,看最後一位是0是1就行了
cmp指令的格式為 cmp op1 op2 用到的標誌位有cf,zf,of,sf四個,對於兩個無符號數的情況,兩數相減不可能溢位了,看cf和zf標誌位就可以,如果zf為1,說明結果是0,那不用說,兩數相等了(有符號數也是這樣),如果zf為0,則如果cf為1,表示有借位,op1op2。
對於有符號數,就要看符號標誌位sf和溢位標誌位of了,如果是兩個兩個同號的數,兩數相減也是不可能溢位的,of一定為0,此時,如果sf為1,則表示op1op2,如果是兩個異號的數相減,不溢位的情況跟上面的一樣(of==0,sf==1?op1op2)。
如果溢位了,則要分析一下,此時of=1表示溢位,如果sf也為1,表示結果為負數,假設op1為負數,op2正數,相減的結果為負數,沒溢位,假設不成立,op1是整數,op2是負數,所以op1>op2,sf為0的情況可以同樣分析可得op1【end】
測試標誌位指令
測試某些示志位的情況來設定位元組的指令 這是一大類指令,格式為 setxx reg8 mem8 它的功能是 若條件xx成立,則位元組暫存器reg8或節儲存器單元被設定為1,否則被設定為0.條件xx 見下表 setz sete zf 1 等於零 相等 setnz setne zf 0 不等於零 不相等...
關於cmp指令
以 cmp rdi,rsi jge else 為例 1 用來設定條件位的是通過 rsi rdi,若m rsi 2,rdi 1,那麼zf 0 非零 sf 0 不為負 2 同時,jge也將基於 rsi rdi 進行跳轉。此處 rsi greater than rdi,因此將進行跳轉。3 不過需要注意的是...
8086標誌位作用及其相關指令
先插入386的32位標誌暫存器一張 8086只看低16位即可 1 進製標誌cf carry flag 進製標誌cf主要用來反映運算是否產生進製或借位。如果運算結果的最高位產生了乙個進製或借位,那麼,其值為1,否則其值為0。使用該標誌位的情況有 多字 位元組 數的加減運算,無符號數的大小比較運算,移位...