《匯編語言(第三版)》cmp指令


cmp指令


本質

cmp是比較指令,cmp的功能相當於減法。

格式

cmp 操作對象1,操作對象2

功能

計算操作對象1-操作對象2,但並不保存結果,可以根據flag標志寄存器來判斷結果。

正向判斷

如果(ax) = (bx) 則(ax)-(bx) = 0,所以:zf=1。
如果(ax) != (bx) 則(ax)-(bx) != 0,所以:zf=0。
如果(ax) < (bx) 則(ax)-(bx)將產生借位,所以:cf=1。
如果(ax) >=(bx) 則(ax)-(bx)不產生借位,所以:cf=0。
如果(ax) > (bx) 則(ax)-(bx) != 0,也不產生借位,所以:zf=cf=0。
如果(ax) <=(bx) 則(ax)-(bx)可能為0,也可能產生借位,所以:zf=1或zf=1。(1、3起碼滿足一個)

反向判斷

指令cmp ax,bx 的邏輯含義是比較ax和bx的值,如果執行后:
1.	zf=1 ===> (ax)=(bx)
2.	zf=0 ===> (ax)!=(bx)
3.	cf=1 ===> (ax)<(bx)
4.	cf=0 ===> (ax)>=(bx)
5.	cf=zf=0 ===> (ax)>(bx)
6.	cf=1或zf=1 ===> (ax)<=(bx)

如何記憶?

1.	zf是0標志寄存器,zf=1時,ax=bx;zf=0時,ax != bx。
2.	cf是進位借位標志寄存器,cf=1時,ax<bx;cf=0時,ax>=bx。
3.	根據1、2組合可以推出另外兩個。

CMP指令如何起作用?

cmp指令的比較結果需要通過條件轉移指令來檢測。

指令 解釋 含義 檢測的相關標志位
je e:equal 等於則轉移 zf=1
jne ne:not equal 不等於則轉移 zf=0
jb b:below 低於則轉移 cf=1
jnb nb:not below 不低於則轉移 cf=0
ja a:above 高於則轉移 cf=0且zf=0
jna na:not above 不高於則轉移 cf=1或zf=1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM