《汇编语言(第三版)》cmp指令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《汇编语言(第三版)》cmp指令相关的知识,希望对你有一定的参考价值。

# cmp指令

本质

cmp是比较指令,cmp的功能相当于减法。

格式

cmp 操作对象1,操作对象2

功能

计算操作对象1-操作对象2,但并不保存结果,可以根据flag标志寄存器来判断结果。

正向判断

如果(ax) = (bx) 则(ax)-(bx) = 0,所以:zf=1。
如果(ax) != (bx) 则(ax)-(bx) != 0,所以:zf=0。
如果(ax) < (bx) 则(ax)-(bx)将产生借位,所以:cf=1。
如果(ax) >=(bx) 则(ax)-(bx)不产生借位,所以:cf=0。
如果(ax) > (bx) 则(ax)-(bx) != 0,也不产生借位,所以:zf=cf=0。
如果(ax) <=(bx) 则(ax)-(bx)可能为0,也可能产生借位,所以:zf=1或zf=1。(1、3起码满足一个)

反向判断

指令cmp ax,bx 的逻辑含义是比较ax和bx的值,如果执行后:
1.  zf=1 ===> (ax)=(bx)
2.  zf=0 ===> (ax)!=(bx)
3.  cf=1 ===> (ax)<(bx)
4.  cf=0 ===> (ax)>=(bx)
5.  cf=zf=0 ===> (ax)>(bx)
6.  cf=1或zf=1 ===> (ax)<=(bx)

如何记忆?

1.  zf是0标志寄存器,zf=1时,ax=bx;zf=0时,ax != bx。
2.  cf是进位借位标志寄存器,cf=1时,ax<bx;cf=0时,ax>=bx。
3.  根据1、2组合可以推出另外两个。

CMP指令如何起作用?

cmp指令的比较结果需要通过条件转移指令来检测。
|指令 |解释 |含义 |检测的相关标志位|
|-------|-------|-------|----------------|
|je|e:equal|等于则转移|zf=1|
|jne|ne:not equal|不等于则转移|zf=0|
|jb|b:below|低于则转移|cf=1|
|jnb|nb:not below| 不低于则转移| cf=0|
|ja |a:above| 高于则转移| cf=0且zf=0|
|jna| na:not above| 不高于则转移| cf=1或zf=1|

以上是关于《汇编语言(第三版)》cmp指令的主要内容,如果未能解决你的问题,请参考以下文章

王爽《汇编语言》第三版 第九章 转移指令的原理

王爽《汇编语言》第三版 第五章 [BX]和loop指令

只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方《汇编语言(第三版习题笔记)》

《汇编语言(第三版)》标志寄存器

《汇编语言(第三版)》pushf 和 popf 指令,以及标志寄存器在 Debug 中的表示

写出每条汇编指令执行后相关寄存器中的值。《汇编语言(第三版习题笔记)》