cmp和ja问题

时间:2011-04-04 14:37:11

标签: assembly gdb disassembly instructions

我在理解这个问题时遇到了问题。它是英特尔语法

cmp eax, 0x19
ja greater

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

据我所知,这应该跳转IF arg1(0x19)是ABOVE arg2(0xffffffd8)

0x19看起来小于0xffffffd8对我来说。跳跃正在进行中。任何有助于理解我的错误逻辑的人都非常感激!

2 个答案:

答案 0 :(得分:7)

这有点难以回答,因为不同的汇编程序会颠倒操作数的顺序。从外观上看,您似乎使用的是英特尔语法汇编,在这种情况下,您拥有的内容大致相当于if (unsigned)eax > 0x19 goto greater。在这种情况下,跳跃是合理的。

答案 1 :(得分:0)

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

相关问题