这是如何工作的?我知道lea与使用add / mov指令相比是有效的,因为它不通过ALU或设置任何标志。那么lea如何得到它的地址呢?是什么让它比添加/ mov更好?
答案 0 :(得分:5)
lea
没有通过ALU的想法已经过时,并且已经错误了十多年。它通过其中一个ALU - 其中有几个,这极不可能成为瓶颈。这实际上需要时间。它并不比add
快。
但这并不意味着它没用。与add
不同,它可以有一个与两个输入不同的目标,因此它可以保存mov
,并且它可以采取额外的常量,因此您可以执行两个add
和一个{ {1}}一体化。缩放也很不错,所有这些都可以在mov
中完成a = b * 9 + 5
之类的操作。这种“复杂”形式的lea a, [b + b * 8 + 5]
通常比lea
的简单2操作数形式慢。
答案 1 :(得分:3)
LEA指令使用CPU的有效地址(EA)部分来执行某些算术而不使用ALU。 EA模块可以执行非常特定的算法,用于地址计算,但如果您需要的是其专门提供的内容之一,也可以用于其他事情。
如果不使用ALU进行此EA计算,ALU可能会忙于同时执行其他操作,您可以避免管道停滞。