3

这究竟是如何工作的?我知道 lea 与使用 add/mov 指令相比效率更高,因为它不通过 ALU 或设置任何标志。那么 lea 如何获取它的地址呢?是什么让它比 add/mov 更好?

4

2 回答 2

5

lea不通过 ALU的想法已经过时,并且十多年来一直是错误的。它通过其中一个 ALU - 其中会有几个,这极不可能成为瓶颈。这实际上需要时间。它并不比add.

但这并不意味着它没有用。与 不同add,它可以有一个不同于两个输入的目的地,因此它可以保存 a mov,并且它可以采用一个额外的常量,因此您可以将两个adds 和 amov合二为一。缩放也很好,所有结合起来你都可以做一些像a = b * 9 + 5all in one一样的事情lea a, [b + b * 8 + 5]。这种“复杂”的形式lea通常比简单的 2 操作数形式要慢lea

于 2012-12-09T14:15:00.533 回答
3

LEA 指令使用 CPU 的有效地址 (EA) 部分来执行某些类型的算术而不使用 ALU。EA 模块可以执行用于地址计算的非常特定类型的算术,但如果您需要的是它专门提供的东西之一,也可以用于其他事情。

通过不使用 ALU 进行 EA 计算,ALU 可以同时忙于做其他事情,您可以避免流水线停顿。

于 2012-12-09T00:48:17.987 回答