私はコンパイラによって行われるx64
アセンブリの最適化を理解しようとしています。"nop dword ptr [rax + rax]" x64アセンブリ命令は何をしますか?
Release
という小さなC++プロジェクトを、Windowsの場合はVisual Studio 2008 SP1
IDEでビルドしました。
そしてラインの一つには、以下のアセンブリコードを含んでいた:私の知る限りは、それ自体でnop
がdo nothing
ですけど、私は」として
:
B8 31 00 00 00 mov eax,31h
0F 1F 44 00 00 nop dword ptr [rax+rax]
そして、ここではスクリーンショットですそのようなオペランドでそれを見たことはありません。
誰かが何をしているのか説明できますか?
マルチバイトNOPです。 Set Setのリファレンスでこれについて説明しています。http://www.felixcloutier.com/x86/NOP.html –
@MichaelPetch:ありがとうございます。興味深いことに、その命令を 'Release'ビルドに追加する目的は何ですか? – c00000fd
通常、整列のため。多くの場合、16または32バイトの境界に合わせるためにループの前に表示されます(通常は16がデフォルトです)。これにより、ループのパフォーマンスが向上します。 –