gpt4 book ai didi

assembly - x86 程序集 : Comparisons (GAS syntax)

转载 作者:行者123 更新时间:2023-12-04 02:49:19 24 4
gpt4 key购买 nike

我相信在 x86 中实现跳转的标准方法是与类似的东西进行比较:

cmpl %ebx, %eax

其中将结果存储在eflags寄存器中,然后下面的跳转命令使用那个eflags寄存器:

je some_label

但是如果我想保存比较的结果以备以后跳转呢?我考虑过做类似的事情:

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

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

最佳答案

我想到了一些方法。

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

希望这对您有所帮助。

关于assembly - x86 程序集 : Comparisons (GAS syntax),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18123112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com