【问题标题】:cmp and ja questioncmp 和 ja 问题
【发布时间】:2011-04-04 14:37:10
【问题描述】:

我无法理解这一点。它是 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 小。正在执行跳跃。非常感谢任何理解我有缺陷的逻辑的帮助!

【问题讨论】:

    标签: assembly gdb disassembly instructions


    【解决方案1】:

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

    【讨论】:

    • 非常感谢。网页上的信息令人困惑。它显示 intel 语法为 cmp arg2, arg1 如果“第一个操作”高于第二个,则稍后在所述 ja 跳转。它没有指定语法
    • @kisplit:如果你认为cmp a,b 等同于sub a, b 可能会更容易,除了它只更改标志,其中sub 更改标志 将差异放在a
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 2014-04-06
      相关资源
      最近更新 更多