首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cmpl和cmp之间的区别

cmpl和cmp之间的区别
EN

Stack Overflow用户
提问于 2014-06-09 18:43:30
回答 3查看 77.2K关注 0票数 13

我正在尝试理解汇编,以便能够解决难题。然而,我遇到了以下说明:

代码语言:javascript
运行
复制
0x0000000000401136 <+44>:    cmpl   $0x7,0x14(%rsp)
0x000000000040113b <+49>:    ja     0x401230 <phase_3+294>

我认为它的作用是:0x14(%rsp)的值是-7380。根据我的理解,cmpl比较无符号。还执行了跳转。

那么它可能是(unsigned)-7380 > 7 -->跳转吗

实际上我不想让它跳起来。但这是不是正确的解释呢?我是在反驳吗?

另外,如果你有任何关于如何操作这个跳跃的建议!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-09 19:00:10

根据我的理解,

cmpl比较无符号。

在某种程度上,它同时做到了这两点。

有符号和无符号的区别在于跳转指令的使用。

对于>,无符号为ja,有符号为jg (如果高于则跳转,如果大于则跳转)。

对于<jb表示未签名,jl表示已签名(如果在下面,则跳转;如果小于,则跳转)。

准确地说,以下是几个跳转命令的含义:

用于无符号比较的

JB/JNAE (CF = 1):低于/不高于或等于JAE/JNB (CF = 0)时跳转:高于或等于/不低于JBE/JNA (CF =1或ZF = 1)时跳转:低于或等于/不高于JA/JNBE (CF =0和ZF =0)时跳转:高于/不低于或等于时跳转

对于带符号的比较:

JL/JNG (SF <> OF):小于/不大于或等于JGE时跳转/JNL (SF = OF):大于或等于/不小于JLE/JNG (ZF =1或SF <> OF)时跳转:小于或等于/不大于JG/JNLE (ZF =0和SF = OF)时跳转:大于/不小于或等于时跳转

票数 21
EN

Stack Overflow用户

发布于 2021-01-21 17:32:14

为了说明这一点,@glglgl给出了一个很好的答案:"cmpl“中的"l”是一个operation suffix,表示正在对一个长数(32位整数或64位浮点数)进行操作。

票数 2
EN

Stack Overflow用户

发布于 2014-06-09 19:13:27

我不认为x86实际上有一个叫做CMPL的指令。这可能是你的汇编器语法的一部分,给出关于操作数的提示或其他东西(比如JZJE是一样的)。

从英特尔手册中了解到它正在做什么:

比较第一个源操作数和第二个源操作数,并根据结果设置EFLAGS寄存器中的状态标志。通过从第一操作数中减去第二操作数,然后以与SUB指令相同的方式设置状态标志来执行比较。当立即值用作操作数时,它被符号扩展到第一个操作数的长度。

符号是隐式给出的,因为两个数字的补码表示法。

如何操作跳跃?如果您确定跳转应该做与它正在做的事情完全相反的事情,那么您只需将JA更改为JBE

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

https://stackoverflow.com/questions/24118562

复制
相关文章

相似问题

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