x86汇编:比较(GAS语法)

时间:2013-08-08 10:00:55

标签: assembly x86 att

我认为在x86中实现跳转的标准方法是与以下内容进行比较:

cmpl %ebx, %eax

将结果存储在eflags寄存器中,然后以下跳转命令使用该eflags寄存器:

je some_label

但是如果我想保存比较结果以便稍后跳转怎么办?我想做类似的事情:

    cmpl %eax, %ebx
    je storetrue
storefalse:
    pushl $0
    jmp done
storetrue:
    pushl $1
done:
    ...

我是否需要这样做,或者是否有更直接的方式不需要额外的跳跃?

1 个答案:

答案 0 :(得分:4)

我想到了一些方法。

  1. 正如问题评论中已经提到的那样,您可以使用条件移动指令。
  2. 您可以使用SETxx指令将其中一个8位寄存器设置为0或1.
  3. 您可以使用PUSHF指令将EFLAGS寄存器的副本保存到堆栈中。它可以使用POPF指令恢复。
  4. 您可以制作代码,以便下次希望使用该比较结果时不会使用修改EFLAGS寄存器的指令。
  5. 根据您的使用案例,您可能能够制作一个简单的算术表达式,该表达式将导致0或1或其他所需的值(我个人更喜欢0或-1的组合,因为它变得微不足道使用AND后跟ADD的任何X或Y对。
  6. 希望这有帮助。