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

发布于 2011-04-18 | 更新于 2020-09-20

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

本文链接: https://www.itzhai.comcmp-assembly-instructions-and-conditional-branch-instructions-to-achieve-high-level-language-functions-in-the-if-statement.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。