lea指令如何获取操作数的地址?

时间:2012-12-09 00:46:13

标签: assembly x86

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

2 个答案:

答案 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可能会忙于同时执行其他操作,您可以避免管道停滞。