lea指令如何获得操作数的地址?
这个问题在这里已经有了答案:
LEA指令使用CPU的有效地址(EA)部分来执行某些算术运算而不使用ALU。 EA模块可以执行非常特定的算术运算,用于地址计算,但如果您需要的是专门提供的东西之一,也可以用于其他事情。
通过在EA计算中不使用ALU,ALU可以同时忙于做其他事情,并且可以避免管道延迟。
lea
不通过ALU的想法已经过时,并且在过去的十年中一直是错误的。 它通过其中一个ALU--其中会有几个,这极不可能成为瓶颈。 这实际上需要时间。 它不会比add
更快。
但这并不意味着它没有用处。 与add
不同,它可以有一个与两个输入不同的目的地,所以它可以保存一个mov
,并且它可以占用一个额外的常量,因此你可以将两个add
和一个mov
放在一起。 缩放比例也很好,并且所有的组合都可以在lea a, [b + b * 8 + 5]
完成,如a = b * 9 + 5
。 这样的“复合物”形式lea
往往比较简单的2个操作数的形式慢lea
。