汇编cmp指令和条件转移指令实现高级语言中的IF语句功能

CPU提供了cmp指令,其功能相当于减法指令,相当于比较大小。只是不保存结果,执行后,对应的标志寄存器也将产生影响。je指令是无符号数的比较结果进行转移的条件转移指令(jump equanl:即是结果等于则转移),它进行的操作是零标志位zf=1时则转移。 将cmp指令和je指令配合使用,可以实现根据比较结果进行转移的功能,其功能有点像高级语言中的IF语句。 下面举个例子:统计data段中数值为23的字节的个数,用ax保存统计结果。

汇编代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
data segment
db 10,23,1,3,23,5,12,23,6,9
data ends

code segment
start: mov ax,data
mov ds,ax
mov bx,0 ;bx指向第一个字节
mov ax,0 ;ax存放23数字的个数
mov cx,10 ;循环10次
s: cmp byte ptr \[bx\],23 ;bx中的数字和23对比
je ok ;如果等于23,则执行ok
jmp short next ;如果不相等,就转到next,继续循环
ok: inc ax ;如果相等就将计数值加1
next: inc bx ;指向下一个数字
loop s

mov ax,4c00h
int 21h

code ends
end start

上面的程序根据无符号数的比较结果使用转移指令实现跳转比较,主要是cmp、标志寄存器的相关位和条件转移指令三者配合的使用。

arthinking wechat
欢迎关注itzhai公众号