【问题标题】:Why does x86 have the redundant JNGE instruction?为什么 x86 有多余的 JNGE 指令?
【发布时间】:2023-03-14 04:31:01
【问题描述】:

Intel instruction set reference 的第 3-431 页提到了两条不同的指令:

7C cb  JL rel8   Jump short if less (SF ≠ OF).
7C cb  JNGE rel8 Jump short if not greater or equal (SF ≠ OF).

同一指令有两个名称的原因是什么?在任何情况下,我使用JL 还是JNGE 都很重要?

【问题讨论】:

  • 我怀疑这很重要,因为汇编程序将为两者生成相同的机器代码,因此在逻辑上完全相同的效果。不过有趣的怪癖
  • @geedubb 好吧,myyour 汇编器产生相同的结果,但也许有些汇编器没有?
  • @HansPassant JLJNGE 相同,都已签名。您可能会想到JBJNAE,它们是未签名的对应对象。
  • @phihag 那将是一个损坏的汇编程序!

标签: assembly x86 history


【解决方案1】:

这只是为了让代码更具可读性,以防其中一个更符合您的意图。正如您所引用的,机器代码是相同的,最终这就是处理器将执行的。因此,它不会知道您使用的是JL 还是JNGE。所有的关系也都有它们的否定名称。

还有其他副本可以更好地说明可读性点,例如JEJZ。比较后通常使用JE,否则使用JZ。同样,您有 JBJC

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 2023-03-23
    • 2021-04-12
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多