我在理解这一点时遇到了问题。它采用英特尔语法
cmp eax, 0x19
ja greater
eax 包含值 -40。 http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow 告诉我 ja 是来自前一个 cmp 的无符号比较。
据我所知,如果 arg1 (0x19) 高于 arg2 (0xffffffd8),这应该会跳转
0x19 对我来说看起来比 0xffffffd8 小。正在执行跳转。任何帮助理解我有缺陷的逻辑非常感谢!
最佳答案
这有点难以回答,因为不同的汇编程序会颠倒操作数的顺序。从表面上看,您似乎正在使用英特尔语法汇编,在这种情况下,您所拥有的大致相当于 if (unsigned)eax > 0x19 goto greater
。既然如此,采取跳跃是合理的。
关于assembly - cmp 和 ja 问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5540067/