因為cmp指令可以同時進行兩種比較,無符號數比較和有符號數比較,所以根據cmp指令的比較結果進行轉移的指令也分為兩種,即根據無符號數的比較結果進行轉移的條件轉移指令(它們檢測zf、cf的值)和根據有符號數的比較結果進行轉移的條件轉移指令(它們檢測sf、of和zf的值)。
下面是常用的根據無符號數的比較結果進行轉移的條件轉移指令。
指令 含義 檢測的相關標誌位
je 等於則轉移 zf=1
jne 不等於則轉移 zf=0
jb 低於則轉移 cf=1
jnb 不低於則轉移 cf=0
ja 高於則轉移 cf=0且zf=0
jna 不高於則轉移 cf=1或zf=1
舉例。
data段中的8個字節如下:
data segment
db 8,11,8,1,8,5,63,38
data ends
1)編程,統計data段中數值為8的字節的個數,用ax保存統計結果。
mov ax, data
mov dx, ax
mov bx, 0
mov ax, 0
mov cx, 8
s:
cmp byte ptr [bx],8
jne next
inc ax
next:
inc bx
loop s
2)編程,統計data段中數值大於8的字節的個數,用ax保存統計結果。
mov ax,data
mov ds,ax
mov ax,0
mov bx,0
mov cx, 8
s:
cmp byte ptr [bx],8
jna next
inc ax
next:
inc bx
loop s
3)編程,統計data段中數值小於8的字節的個數,用ax保存統計結果。
mov ax,data
mov ds,ax
mov ax,0
mov bx,0
mov cx,8
s:
cmp byte ptr [bx], 8
jnb next
inc ax
next:
inc bx
loop s
上面講解的是根據無符號數的比較結果進行轉移的條件轉移指令。根據有符號數的比較結果進行轉移的條件轉移指令的工作原理和無符號的相同,只是檢測了不同的標誌位。