9
lea    0x0(%esi),%esi

結果はなく、単にスペースを埋めているだけだと思います。これは本当ですか?

4

1 に答える 1

17

そのNOP。%esiと0x0の内容を追加し、結果を%esiに入れます。誰かが不器用なコードジェネレーターを持っているか、Nバイトを埋める必要があります。この命令は適切なサイズです。

LEA命令は非常に高速(通常は1クロック)で実行されるため、これはNnopsよりもはるかに優れています。

x86はそれなりに風変わりで、さまざまな命令があり、事実上何も実行せず、異なるバイト数を埋めます。異なる長さの他の役に立たない命令を見つけるかもしれません。長いが1クロック以下で実行される命令を見つける傾向があります。

AMD x86-64マニュアルには、NOPに何を使用すべきかについていくつかの提案があります。彼らは、プレフィックスオペコードの1つが実際のNOP、IIRCの前に何度も繰り返されることを示唆しています。このようなプレフィックスオペコードは、命令フェッチエンジンによって非常に迅速に消費されます。ほとんどの場合、それらのコストは、命令の実行時間ではなく、命令のプリフェッチに隠されています。

于 2012-05-08T20:07:59.597 に答える