[ レジスタ ] ウィンドウは、[ オプション] ダイアログ ボックスの [デバッグ ] ノードで アドレスレベルのデバッグが有効になっている場合にのみ使用できます。
レジスタは、プロセッサ (CPU) 内の特別な場所であり、プロセッサがアクティブに動作している小さなデータを格納するために使用されます。 ソース コードをコンパイルまたは解釈すると、メモリからレジスタにデータを移動し、必要に応じて再び戻す命令が生成されます。 レジスタ内のデータへのアクセスは、メモリ内のデータにアクセスする場合と比べて非常に高速であるため、プロセッサがレジスタ内のデータを保持して繰り返しアクセスできるようにするコードは、プロセッサがレジスタを常に読み込んでアンロードする必要があるコードよりも高速に実行される傾向があります。 コンパイラがレジスタ内のデータを保持し、その他の最適化を実行しやすくするには、グローバル変数の使用を避け、可能な限りローカル変数に依存する必要があります。 この方法で記述されたコードは、参照のローカリティが良好であると言われます。 C/C++ などの一部の言語では、プログラマはレジスタ変数を宣言できます。この変数は、常にレジスタに変数を保持するために最善を尽くすようにコンパイラに指示します。 詳細については、「キーワードの 登録」を参照してください。
レジスタは、汎用と特別な目的の 2 種類に分けることができます。 汎用レジスタは、2 つの数値を加算したり、配列内の要素を参照したりするなどの一般的な操作のデータを保持します。 特殊用途レジスタには、特定の目的と特殊な意味があります。 良い例は、プログラムの呼び出し履歴を追跡するためにプロセッサが使用するスタック ポインター レジスタです。 プログラマは、おそらくスタック ポインターを直接操作しません。 ただし、スタック ポインターがないと、プロセッサは関数呼び出しの最後に戻る場所を知らないので、プログラムを適切に機能させるために不可欠です。
ほとんどの汎用レジスタは、1 つのデータ要素のみを保持します。 たとえば、1 つの整数、浮動小数点数、配列の要素などです。 一部の新しいプロセッサには、小さなデータ配列を保持できるベクター レジスタと呼ばれる、より大きなレジスタがあります。 ベクター レジスタは非常に多くのデータを保持するため、配列を含む操作を非常に迅速に実行できます。 ベクトルレジスタは、高価で高性能なスーパーコンピュータで最初に使用されていましたが、現在はマイクロプロセッサで使用されるようになり、集中的なグラフィック操作で大きな利点が得られます。
通常、プロセッサには汎用レジスタの 2 つのセットがあり、1 つは浮動小数点演算用に最適化され、もう 1 つは整数演算用に最適化されています。 当然のことながら、これらは浮動小数点レジスタと整数レジスタと呼ばれます。
マネージド コードは、実行時に、マイクロプロセッサの物理レジスタにアクセスするネイティブ コードにコンパイルされます。 [ レジスタ] ウィンドウには、共通言語ランタイムまたはネイティブ コード用のこれらの物理レジスタが表示されます。 スクリプトと SQL はレジスタの概念をサポートしていない言語であるため、[ レジスタ ] ウィンドウにはスクリプトまたは SQL アプリケーションのレジスタ情報が表示されません。
[レジスタ] ウィンドウの表示の詳細については、「 レジスタウィンドウの使用」を参照してください。
[レジスタ] ウィンドウを見ると、EAX = 003110D8などのエントリが表示されます。
=記号の左側にある記号は、EAXレジスタ名です。
=記号の右側にある番号は、レジスタの内容を表します。
[ Registers ]\(レジスタ\) ウィンドウでは、レジスタの内容を表示するだけではありません。 ネイティブ コードでブレーク モードになっている場合は、レジスタの内容をクリックして値を編集できます。 これは、ランダムに行う必要があるものではありません。 編集しているレジスタとそのデータを理解していない限り、不注意な編集の結果は、プログラムのクラッシュやその他の望ましくない結果になる可能性があります。 残念ながら、さまざまな Intel および Intel 互換プロセッサのレジスタ セットの詳細な説明は、この簡単な紹介の範囲をはるかに超えています。
グループを登録する
[ レジスタ ] ウィンドウでは、煩雑さを軽減するために、レジスタがグループに編成されます。 [レジスタ] ウィンドウを右クリックすると、グループの一覧を含むショートカット メニューが表示され、必要に応じて表示または非表示にすることができます。
フラグの登録
Intel x86 プロセッサの場合、[ レジスタ ] ウィンドウに次のフラグが表示される場合があります。 デバッグ セッション中に、これらのフラグを編集することもできます。
| Flag | 値の設定 |
|---|---|
| Overflow | OV = 1 |
| 通信方向 | UP = 1 |
| 割り込む | EI = 1 |
| Sign | PL = 1 |
| ゼロ | ZR = 1 |
| 補助キャリー | AC = 1 |
| Parity | PE = 1 |
| 携帯する | CY = 1 |