x86汇编:比较(GAS语法)

问题描述 投票:3回答:1

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

cmpl %ebx, %eax

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

je some_label

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

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

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

assembly x86 att
1个回答
4
投票

我想到了一些方法。

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

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.