关于IA32组装中的jg,jle等

时间:2015-04-11 04:33:03

标签: assembly x86 att

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

cmp %eax, %ebx
jg < something >

会跳到&lt;的东西&gt;如果eax大于ebx。但我有另一段似乎与此相矛盾的代码:

cmp $0x2, %eax
jg  < something>

当它跳到&lt;的东西&gt;当eax的值为3时。

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

2 个答案:

答案 0 :(得分:4)

当我们读到像

这样的内容时
cmp $0x2, %eax
jg  < something >

我们知道使用的汇编程序是反转指令操作数位置的汇编程序。这是因为英特尔的语法规定目标操作数在源操作数之前,显然像$ 0x2这样的直接值无法成为目的地!

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

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

和第二个代码段

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

这是否也适用于其他跳转语句?

确实如此。

答案 1 :(得分:0)

查看 THIS ANSWER 是否对您有所帮助。如果没有,请要求澄清。

向下滚动浏览其他人的源代码,并在该答案中搜索此字符串...

这个商业,cmpl%eax,%edx指令,是“比较”指令的形式之一

我写了一篇关于CMP的“意义”和各种条件跳跃的解释。看看它是否在这里回答了你的问题。

如果您仍然感到困惑,请在此处发布备注,其他人可能会给您更好的答案。

希望它有所帮助。