1. 程式人生 > >檢測比較結果的條件轉移指令

檢測比較結果的條件轉移指令

因為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

上面講解的是根據無符號數的比較結果進行轉移的條件轉移指令。根據有符號數的比較結果進行轉移的條件轉移指令的工作原理和無符號的相同,只是檢測了不同的標誌位。