LEA在内部做什么?

时间:2016-08-28 11:20:32

标签: assembly x86

This question表示LEA指令可用于算术运算。

据我所知,而不是:

inc eax
mov ecx, 5
mul ecx
mov ebx, eax

我可以简单地写

lea ebx, [(eax + 1) * 5]

LEA版本只是一条指令而不是4.但是,我不明白LEA如何在没有incmul的情况下进行算术运算。

LEA版本是否更快,或者LEA是否只是在后台运行原始说明?

编辑:这个问题不是关于LEA的目的,而是关于它如何在内部工作。

1 个答案:

答案 0 :(得分:5)

  

如果没有INC和MUL,我不明白LEA是如何进行算术的。

关键是LEA只能执行某些类型的算术:这种类型在计算内存地址时非常有用,例如数组访问。

将CPU视为具有用于此类地址计算的专用电路,并将LEA视为使用该电路的指令。

您可以在Wikipedia中阅读x86寻址模式。它显示了您可以使用LEA执行的计算类型。

简而言之,它是一个寄存器乘以1/2/4/8,加上一个寄存器加上一个常数。您可以使用LEA计算(eax + 1) * 5的唯一原因是它等同于eax * 4 + eax + 5。例如,如果你试图计算(eax + 1) * 6,LEA将没有任何帮助,而通用的MUL和ADD仍然可以正常工作。