检测比较结果的条件转移指令

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

上面讲解的是根据无符号数的比较结果进行转移的条件转移指令。根据有符号数的比较结果进行转移的条件转移指令的工作原理和无符号的相同,只是检测了不同的标志位。

猜你喜欢

转载自www.cnblogs.com/gkp307/p/9945664.html