首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解cmp指令

理解cmp指令
EN

Stack Overflow用户
提问于 2017-08-26 18:22:21
回答 4查看 95.4K关注 0票数 27

我对组装非常陌生,现在我正在努力了解cmp是如何工作的。下面是用https://en.wikibooks.org/wiki/X86_Assembly/Control_Flow#Comparison_Instructions编写的

代码语言:javascript
复制
cmp arg2, arg1

执行arg1和arg2之间的比较操作。比较是通过(签名)从arg2中减去arg1来执行的,其结果可以称为Temp。然后丢弃临时

“然后放弃临时”是什么意思?它存放在哪里?如何访问比较的结果?有人能解释一下吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-08-26 19:14:59

cmp arg2, arg1执行与sub arg2, arg1相同的操作,只是没有修改操作数。差别没有存储在任何地方。

但是,标志寄存器是更新的,可以在条件跳转中使用,比如跳转(JE),通常作为cmp之后的下一个指令。

与其他指令相比,它的优点是您可以比较两个值而不破坏其中的任何一个。如果你做了sub arg2, arg1,它们恰好是相等的,那么它们中的一个就等于零了。有了cmp,他们都还在那里。

票数 40
EN

Stack Overflow用户

发布于 2020-05-03 00:41:28

CMP的结果改变了ZF和CF的值,这是理解CMP指令的一些例子。

示例1: if AX < BX

代码语言:javascript
复制
MOV AX,5
MOV BX,8
CMP AX,BX 

结果: ZF和CF设置为==> "ZF = 0“和"CF = 1”

示例2: if > BX

代码语言:javascript
复制
MOV AX,8
MOV BX,5
CMP AX,BX

结果: ZF和CF设置为==> "ZF = 0“和"CF = 0”

示例3: if = BX

代码语言:javascript
复制
MOV AX,5
MOV BX,AX
CMP AX,BX 

结果: ZF和CF设置为==> "ZF = 1“和"CF = 0”

我希望您了解CMP的结果正在改变ZF和CF的值。

ZF =零旗

CF =带旗

票数 31
EN

Stack Overflow用户

发布于 2018-08-24 15:48:27

当我们关心cmp arg2, arg1和arg 2是否相等时,我们使用arg1。处理器通过从arg2中减去arg1来确定这一点,然后查看结果。如果结果为零(即arg1 = arg2),则处理器设置零标志(“设置标志”,我们的意思是将其设置为1)。相反,如果结果不是零(即arg1 != arg2),则处理器清除零标志(即将其设置为0)。结果本身被丢弃了,因为我们不关心它是什么,只关心它是否是零,这是我们现在根据是否设置了零标志而知道的。然后,我们可以使用像JEJNEJZJNZ这样的指令来检查零标志,并根据它的值跳转(或不跳)。在JE的情况下(如果跳跃(如果相等),如果设置了零标志,就会发生跳转,正如我们前面所了解的那样,如果cmp中的参数相等,就会发生跳转。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45898438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档