所以每个在线资源都告诉我这样的事情:
cmp %eax, %ebx
jg < something >
Run Code Online (Sandbox Code Playgroud)
如果 eax 大于 ebx,将跳转到 < something >。但我有另一段似乎与此矛盾的代码:
cmp $0x2, %eax
jg < something>
Run Code Online (Sandbox Code Playgroud)
当 eax 的值为 3 时,它会跳转到 < something >。
我是否遗漏了什么,或者如果 b > a 而不是 a>b,cmp a, b - jg 是否执行?这是否也适用于其他跳转语句?
当我们阅读类似
cmp $0x2, %eax
jg < something >
Run Code Online (Sandbox Code Playgroud)
我们知道所使用的汇编器是一种反转指令操作数位置的汇编器。那是因为 Intel 的语法规定目标操作数在源操作数之前,显然像 $0x2 这样的直接值永远不能作为目标!
了解事物的顺序后,我们现在将您的第一个代码片段解释为
cmp ebx, eax
jg < something > ;jump if EBX > EAX
Run Code Online (Sandbox Code Playgroud)
和第二个代码片段为
cmp eax, 2
jg < something > ;jump if EAX > 2
Run Code Online (Sandbox Code Playgroud)
这是否也适用于其他跳转语句?
确实如此。