所以在线的每一个资源都告诉我这样的事情:
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?这是否也适用于其他跳转语句?
答案 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
的“意义”和各种条件跳跃的解释。看看它是否在这里回答了你的问题。
如果您仍然感到困惑,请在此处发布备注,其他人可能会给您更好的答案。
希望它有所帮助。