关于AT&T语法汇编中的cmp/jg、jle等

Regarding cmp / jg, jle, etc in AT&T syntax assembly

所以网上的每一个资源都告诉我这样的事情:

cmp %eax, %ebx
jg < something >

如果 eax 大于 ebx,将跳转到 。但是我有另一段代码似乎与此矛盾:

cmp [=11=]x2, %eax
jg  < something>

当 eax 的值为 3 时,它跳转到

我是不是遗漏了什么,或者如果 b > a 而不是 a>b 是否执行 cmp a, b - jg?这是否也适用于其他跳转语句?

看看THIS ANSWER是否对您有帮助。如果不是,要求澄清。

向下滚动到其他人的源代码和答案中的内容以搜索此字符串...

这个biz,cmpl %eax,%edx指令,是"compare"指令

的一种形式

写了CMP的"sense"和各种条件跳转的解释。看看它是否在这里回答了您的问题。

如果您仍然感到困惑,post 在这里留言,其他人可能会给您更好的答案。

希望对您有所帮助。

当我们阅读类似

的内容时
cmp [=10=]x2, %eax
jg  < something >

我们知道所使用的汇编器是一种反转指令操作数位置的汇编器。这是因为 Intel 的语法规定目标操作数在源操作数之前,并且显然像 $0x2 这样的立即值永远不能成为目标!

了解事物的顺序后,我们现在将您的第一个代码片段解释为

cmp ebx, eax
jg < something >  ;jump if EBX > EAX

第二个代码片段为

cmp eax, 2
jg < something >  ;jump if EAX > 2

And does this apply to other jump statements as well?

确实如此。