汎用レジスタ(General-Purpose Register, GPR)とは、中央処理装置(CPU)内で使用されるレジスタの一種で、さまざまな目的で使用できるレジスタです。これに対して、特定の機能や用途に特化したレジスタ(たとえば、スタックポインタやプログラムカウンタなど)も存在しますが、汎用レジスタは主にデータの格納や演算の結果を保持するために使われます。
汎用レジスタの特徴
- 多目的使用:
- 汎用レジスタは、演算結果やデータを一時的に保持するために使います。プログラム内のさまざまな操作で、レジスタにデータを格納し、必要に応じて取り出すことができます。
- 高速アクセス:
- CPU内に存在するため、メモリよりもはるかに高速にアクセスでき、データの読み書きが迅速に行えます。
- 数と種類:
- CPUのアーキテクチャによって汎用レジスタの数や仕様が異なります。例えば、x86アーキテクチャでは、一般に8つの32ビット汎用レジスタ(EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP)があり、64ビットモードではこれらのレジスタが64ビットのレジスタ(RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP)として使用されます。
- 役割の柔軟性:
- 汎用レジスタは、データの保持、算術演算、論理演算、メモリアドレスの計算など、さまざまな用途に使用できます。プログラミング時には、特定のレジスタに特定の役割を持たせることが一般的です。
汎用レジスタの利用例
- データの一時保存: 計算結果や中間データをレジスタに保持し、後で再利用する。
- 演算処理: 加算、減算、乗算などの演算結果をレジスタに格納する。
- メモリアドレスの計算: アドレス計算やポインタの操作をレジスタで行う。
- ループや条件分岐: ループカウンタや条件判定のためのデータをレジスタに保存する。
例: x86アーキテクチャの汎用レジスタ
- EAX: アキュムレータレジスタ。演算の結果や関数の戻り値などに使用される。
- EBX: ベースレジスタ。データの基準位置を示すために使用されることが多い。
- ECX: カウンタレジスタ。ループのカウンタやシフト操作に使用される。
- EDX: データレジスタ。演算結果の補助やI/Oポートとのデータ交換に使用される。
- ESI: ソースインデックスレジスタ。文字列操作やメモリのソースアドレスに使用される。
- EDI: デスティネーションインデックスレジスタ。文字列操作やメモリのデスティネーションアドレスに使用される。
- ESP: スタックポインタレジスタ。スタックのトップを指し示す。
- EBP: ベースポインタレジスタ。スタックフレームの基準位置を示す。
汎用レジスタは、プログラムの効率性を高めるための重要な要素であり、CPUの性能を最大限に引き出すための鍵となります。