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、标志寄存器的相关位和条件转移指令三者配合的使用。