gpt4 book ai didi

assembly - 为什么汇编指令可以在 "lea"指令中包含乘法?

转载 作者:行者123 更新时间:2023-12-04 01:35:22 27 4
gpt4 key购买 nike

我正在处理性能至关重要的应用程序的一个非常低级别的部分。

在调查生成的程序集时,我注意到以下说明:

lea eax,[edx*8+8]

在使用内存引用(例如 [edx+4])时,我习惯于看到加法,但这是我第一次看到乘法。
  • 这是否意味着 x86 处理器可以在 lea 指令中执行简单的乘法运算?
  • 这种乘法对执行指令所需的周期数有影响吗?
  • 乘法是否仅限于 2 的幂(我认为是这种情况)?

  • 提前致谢。

    最佳答案

    扩展我的评论并回答问题的其余部分......

    是的,它仅限于二的幂。 (特别是 2、4 和 8)所以不需要乘数,因为它只是一个转变。它的重点是从索引变量和指针快速生成地址 - 其中数据类型是简单的 2、4 或 8 字节字。 (虽然它也经常被滥用于其他用途。)

    至于需要的循环次数:根据Agner Fog's tables它看起来像 lea指令在某些机器上是恒定的,而在其他机器上是可变的。

    在 Sandy Bridge 上,如果它是“复杂的或相对撕裂的”,则会受到 2 个周期的惩罚。但它并没有说明“复杂”是什么意思......所以我们只能猜测,除非你做一个基准测试。

    关于assembly - 为什么汇编指令可以在 "lea"指令中包含乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512109/

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