【问题标题】:Newbie on x86 asm - equivalence of mov a,[b+2] and add b,2|mov a,[b]x86 asm 上的新手 - mov a,[b+2] 和 add b,2|mov a,[b] 的等价物
【发布时间】:2014-04-09 11:27:08
【问题描述】:

我想知道以下是否

mov eax, [ebx+4]

等价于

add ebx, 4
mov eax, [ebx]

除了可读性和代码样式问题之外,是否有性能改进或为什么应该首选第一个而不是后者的原因?

【问题讨论】:

    标签: assembly compiler-construction x86 x86-64


    【解决方案1】:

    尽管“等效”,但存在如下所述的差异,并且有几个原因更喜欢mov eax,[ebx+4] 而不是add, mov

    1. 地址计算ebx+4由CPU中的地址计算逻辑“免费”执行
    2. 它只有一条指令,而不是两条
    3. 它不会导致 ALU 操作的结果和内存负载之间的依赖关系停顿(取决于 CPU 实现)
    4. 它保留了 FLAGS 寄存器(条件代码),MOV 不会改变 EFLAGS 而 ADD 会改变
    5. 内存中的字节数更少
    6. 它不会修改 EBX,尽管根据上下文可能不是一件好事,也许您希望更新 EBX?
    7. 它释放了微架构资源,以便其他指令可以与 MOV 并行执行。现代 CPU 将在可以执行其自己的地址计算的 LOAD/STORE 执行单元中执行 MOV(从内存中加载),并在 FIXED-POINT 执行单元中执行 ADD ......如果您在 MOV 指令中进行地址计算这释放了一个 FIXED-POINT 执行单元来并行执行其他操作。

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 2021-09-10
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多