注釈付き逆アセンブリは、関数またはオブジェクトモジュールの命令のアセンブリコードリスト、および各命令に関連付けられたパフォーマンスメトリックを提供します。注釈付き逆アセンブリは複数の方法で表示することができ、どの方法で表示されるかは、行番号のマッピングおよびソースファイルが存在するかどうか、また注釈付き逆アセンブリが要求されている関数のオブジェクトモジュールが既知かどうかによって決まります。
オブジェクトモジュールが既知でない場合、パフォーマンスアナライザでは指定された関数の命令だけが逆アセンブルされ、どのソース行も逆アセンブリ内に表示されません。
オブジェクトモジュールが既知の場合、オブジェクトモジュール内のすべての関数が逆アセンブルされます。
ソースファイルが使用可能であり、かつ行番号データが記録されている場合、パフォーマンスアナライザでは表示の設定に応じて、ソースと逆アセンブリコードがインターリーブされます。
コンパイラによってオブジェクトコードに何からの解説が挿入されている場合は、対応する設定が指定されていれば、その解説も逆アセンブリでインターリーブされます。
逆アセンブリコード内の各命令には、次の情報の注釈が付けられます。
コンパイラによって報告されたソース行番号
相対アドレス
命令の 16 進表現 (要求があった場合)
命令のアセンブラの ASCII 表現
呼び出しアドレスの解決が可能な場合、それらのアドレスは関数名などのシンボルに変換されます。メトリックは、命令の行に表示されます。対応する設定が指定されている場合は、インターリーブされた任意のソースコードに表示できます。表示可能なメトリック値は、Table 7–1 に示すソースコードの注釈で説明しているとおりです。
複数の場所に #include されるコードの逆アセンブリリストには、コードが #include されるたびに逆アセンブリ命令が 1 回現れます。ソースコードは初回のみインタリーブされ、逆アセンブリコードの繰り返されるブロックはファイルに表示されます。たとえば、inc_body.h と呼ばれるヘッダーで定義されているコードのブロックが inc_body、inc_entry、inc_middle、および inc_exit という名前の 4 つの関数によって #include されている場合、逆アセンブリ命令のブロックは inc_body.h の逆アセンブリリストに 4 回現れますが、ソースコードは逆アセンブリ命令の 4 つのブロックの先頭でのみインターリーブされます。 「ソース」ビューに切り替えると、逆アセンブリコードの繰り返しにそれぞれ対応するインデックス行が表示されます。
インデックス行が「逆アセンブリ」ビューに表示される場合があります。 「ソース」ビューとは異なり、これらのインデックス行を直接ナビゲーションの目的に使用することはできません。インデックス行の直下にある命令のいずれかにカーソルを置いて「ソース」ビューを選択すると、そのインデックス行で参照されているファイルに移動します。
ほかのファイルのコードを #include するファイルでは、ソースコードのインタリーブなしで、インクルードされたコードが逆アセンブリ命令として表示されます。これらの命令のいずれかにカーソルを置いて「ソース」ビューを選択すると、#include されたコードを含むファイルが開かれます。このファイルが表示された状態で「逆アセンブリ」ビューを選択すると、インターリーブされたソースコードとともに逆アセンブリコードが表示されます。
インライン関数の場合はソースコードと逆アセンブリコードをインタリーブできますが、マクロの場合はできません。
コードが最適化されていない場合、各命令の行番号は逐次順であり、ソース行と逆アセンブリされた命令は予想どおりにインタリーブされます。最適化されている場合は、あとの行の命令が前の行の命令よりも前に表示されることがあります。アナライザのインタリーブアルゴリズムでは、命令が行 N にあると表示される場合は、常に、行 N とその行までのすべてのソース行がその命令の前に挿入されます。最適化を行なった結果、制御転送命令とその遅延スロット命令の間にソースコードが現れます。ソース行の N に関連するコンパイラのコメントは、その行の直前に挿入されます。