これは正確にどのように機能しますか?leaは、ALUを通過したりフラグを設定したりしないため、add/mov命令を使用する場合に比べて効率的であることを私は知っています。では、leaはどのようにしてアドレスを取得しているのでしょうか。追加/移動よりも優れている点は何ですか?
2 に答える
lea
ALU を通過しないという考えは時代遅れであり、10 年以上間違っています。ALU の 1 つを通過しますが、その中にはいくつかあり、それがボトルネックになる可能性はほとんどありません。実際には時間がかかります。より速くはありませんadd
。
しかし、それは役に立たないという意味ではありません。とは異なりadd
、両方の入力とは異なる宛先を持つことができるため、 を保存mov
でき、追加の定数を使用できるため、2 つadd
の とmov
を 1 つにまとめることができます。スケーリングも素晴らしく、すべてを組み合わせると、オールインワンのようなことができa = b * 9 + 5
ますlea a, [b + b * 8 + 5]
。このような「複雑な」形式のlea
は、単純な 2 オペランド形式の よりも遅いことがよくありますlea
。
LEA命令は、CPUの実効アドレス(EA)部分を使用して、ALUを使用せずに特定の種類の演算を実行します。EAモジュールは、アドレス計算に使用される非常に特殊な種類の演算を実行できますが、必要なものが具体的に提供されるものの1つである場合は、他の用途にも使用できます。
このEA計算にALUを使用しないことにより、ALUは同時に他のことを行うのに忙しくなり、パイプラインストールを回避できます。