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 |