关于 AT&T 语法汇编中的 cmp/jg、jle 等
Posted
技术标签:
【中文标题】关于 AT&T 语法汇编中的 cmp/jg、jle 等【英文标题】:Regarding cmp / jg, jle, etc in AT&T syntax assembly 【发布时间】:2015-04-11 04:33:03 【问题描述】:所以网上的每一个资源都告诉我这样的事情:
cmp %eax, %ebx
jg < something >
如果 eax 大于 ebx, 将跳转到
cmp $0x2, %eax
jg < something>
当 eax 的值为 3 时,它会跳转到
我是否遗漏了什么,或者如果 b > a 而不是 a>b,cmp a, b - jg 是否会执行?这是否也适用于其他跳转语句?
【问题讨论】:
看起来像 AT&T 语法,它将操作数的顺序错误。 【参考方案1】:当我们读到类似
cmp $0x2, %eax
jg < something >
我们知道使用的汇编程序是一种反转指令操作数位置的汇编程序。这是因为 Intel 的语法规定目标操作数在源操作数之前,并且像 $0x2 这样的立即值显然不能成为目标!
知道了我们现在将您的第一个代码 sn-p 解释为
cmp ebx, eax
jg < something > ;jump if EBX > EAX
和第二个代码sn-p as
cmp eax, 2
jg < something > ;jump if EAX > 2
这是否也适用于其他跳转语句?
确实如此。
【讨论】:
顺便说一下,寄存器名称前面的 % 符号也是一个赠品,我从未见过“英特尔约定”(目标、源)汇编程序使用这些。【参考方案2】:看看 THIS ANSWER 是否对您有帮助。如果不是,请要求澄清。
向下滚动查看其他人的源代码和该答案中的内容以搜索此字符串...
这个 biz,cmpl %eax,%edx 指令,是“比较”指令的一种形式
我写了CMP
的“意义”和各种条件跳转的解释。看看它是否在这里回答了你的问题。
如果您仍然感到困惑,请在此处发布注释,其他人可能会给您更好的答案。
希望对你有帮助。
【讨论】:
以上是关于关于 AT&T 语法汇编中的 cmp/jg、jle 等的主要内容,如果未能解决你的问题,请参考以下文章
Linux下的AT&T语法(即GNU as 汇编语法)入门