Visual Studio の [レジスタ] ウィンドウの概要 (C#、C++、Visual Basic、F#)
[レジスタ] ウィンドウは、[オプション] ダイアログ ボックス、[デバッグ] ノードで、アドレスレベルのデバッグが有効になっている場合にのみ、使用できます。
レジスタとは、プロセッサ (CPU) 内部の特殊な場所で、プロセッサが処理している小さなデータを格納するために使用します。 ソース コードをコンパイルまたは解釈すると、必要に応じて、メモリのデータをレジスタに移動して再びメモリに戻す命令が生成されます。 メモリのデータにアクセスするよりもレジスタのデータにアクセスする方が速いため、データをレジスタに保管しておいて繰り返しアクセスできるようにプロセッサに対して許可するコードは、レジスタの読み込みとアンロードを繰り返す必要のあるコードよりも高速です。 コンパイラがレジスタにデータを保管してほかの最適化を実行するのを簡単にするには、グローバル変数を使用せずに、できる限りローカル変数を使用します。 この方法で書かれたコードは、データ参照の局所性が高いコードと呼ばれます。 C や C++ などの一部の言語では、可能な限り常時レジスタに変数を保管するようにコンパイラに指示するレジスタ変数をプログラマが宣言できます。 詳細については、「register キーワード」を参照してください。
レジスタは、汎用レジスタと機能が限定されているレジスタの 2 種類に分類できます。 汎用レジスタは、2 つの数値の加算や配列内の要素の参照など、一般的な操作のデータを保持します。 機能が限定されているレジスタは、特定の用途と特殊な意味を持ちます。 一般的な例として、プログラムの呼び出し履歴を追跡するためにプロセッサで使用されるスタック ポインター レジスタがあります。 通常、プログラマがスタック ポインターを直接操作することはほとんどありません。 ただし、スタック ポインターがないと関数呼び出しの終了時に戻り先がわからないため、プログラムの正常な機能にとって不可欠な要素です。
ほとんどの汎用レジスタは、単一のデータ要素のみを保持します。 たとえば、単一の整数、浮動小数点数、配列の要素などです。 一部の新しいプロセッサでは、ベクター レジスタと呼ばれる大容量のレジスタを備えており、小さなデータ配列を保持できます。 ベクター レジスタは大量のデータを保持できるため、配列に関係する操作の実行がきわめて高速です。 初期のベクター レジスタは、高価でパフォーマンスの高いスーパーコンピューターで使われていましたが、現在ではマイクロプロセッサで使用できるようになり、グラフィック操作を頻繁に使用するシステムで優れた効果を発揮します。
通常、プロセッサには 2 セットの汎用レジスタがあります。一方は浮動小数点演算、もう一方は整数演算に対して最適化されています。 各レジスタは、それぞれの役割どおりに、浮動小数点レジスタおよび整数レジスタと呼ばれます。
マネージド コードは、マイクロプロセッサの物理レジスタにアクセスするネイティブ コードに対して、実行時にコンパイルされます。 [レジスタ] ウィンドウには、共通言語ランタイムまたはネイティブ コードに対するこれらの物理レジスタが表示されます。 スクリプトおよび SQL はレジスタの概念をサポートしない言語であるため、[レジスタ] ウィンドウにスクリプトや SQL アプリケーションのレジスタ情報は表示されません。
[レジスタ] ウィンドウの表示の詳細については、「方法: [レジスタ] ウィンドウを使用する」を参照してください。
[レジスタ] ウィンドウには、EAX = 003110D8
などのエントリが表示されます。
等号 (=
) の左側のシンボルがレジスタ名です (この例では EAX
)。 等号 (=
) の右側の数字は、レジスタの内容を表します。
[レジスタ] ウィンドウでは、レジスタの内容を表示するだけでなく、他の操作も実行できます。 ネイティブ コードで中断モードのときは、レジスタの内容をクリックして値を編集できます。 ただし、むやみに値を編集しないでください。 編集するレジスタと格納するデータについて理解していないと、不正確な編集によってプログラムがクラッシュしたり、その他の予想外の結果が生じたりする可能性があります。 さまざまな Intel プロセッサと Intel 互換プロセッサのレジスタ セットの詳細は、ここでの簡単な概要説明で扱える内容ではありません。
レジスタ グループ
[レジスタ] ウィンドウでは、見やすいようにレジスタがグループ別に表示されます。 [レジスタ] ウィンドウを右クリックすると、ショートカット メニューがグループの一覧と共に表示され、必要に応じて表示と非表示を切り替えることができます。
レジスタ フラグ
Intel x86 プロセッサの場合、[レジスタ] ウィンドウに次のフラグが表示されることがあります。 デバッグ セッション中に、これらのフラグを編集することもできます。
フラグ | 値の設定 |
---|---|
オーバーフロー | OV = 1 |
方向 | UP = 1 |
割り込み | EI = 1 |
符号 | PL = 1 |
0 | ZR = 1 |
補助ファイル | AC = 1 |
パリティ | PE = 1 |
Carry | CY = 1 |