cmp和ja问题

flu*_*mpb 3 assembly gdb instructions disassembly

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

cmp eax, 0x19
ja greater
Run Code Online (Sandbox Code Playgroud)

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

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

对我来说,0x19看起来比0xffffffd8小.跳跃正在进行中.任何帮助理解我的错误逻辑非常感谢!

Jer*_*fin 8

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

  • @kisplit:如果你认为`cmp a,b`相当于`sub a,b`,它会更容易,除了它只改变标志,其中`sub`改变了标志*和*将差异放在`a `. (4认同)