3

我在理解这一点时遇到了问题。它是 intel 语法

cmp eax, 0x19
ja greater

eax 包含值 -40。http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow告诉我 ja 是前一个 cmp 的无符号比较。

据我所知,如果 arg1 (0x19) 高于 arg2 (0xffffffd8),这应该会跳转

0x19 在我看来比 0xffffffd8 小。正在执行跳跃。非常感谢任何理解我有缺陷的逻辑的帮助!

4

2 回答 2

8

这有点难以回答,因为不同的汇编器会颠倒操作数的顺序。从外观上看,您似乎正在使用 Intel 语法汇编,在这种情况下,您所拥有的大致相当于if (unsigned)eax > 0x19 goto greater. 既然如此,那么跳跃是合理的。

于 2011-04-04T14:43:42.697 回答
0

也许, 0xffffffd8 是二进制补码 32 位中的负数。0x19 为正。

于 2012-02-15T01:53:24.793 回答