CPUが高速に処理を行えるのは、内部に「レジスタ」と呼ばれる超高速な記憶素子を持っているからです。
レジスタにはいくつかの種類があり、それぞれが異なる役割を担っています。
この記事では、CPUに搭載されている主なレジスタの種類と、それぞれの役割をわかりやすく解説します。
レジスタとは
レジスタ(register)は、CPU(中央処理装置)の内部に組み込まれた、非常に高速で小容量の記憶素子です。
メインメモリ(RAM)と比べてアクセス速度が圧倒的に速く、CPUが演算や制御を行う際に必要なデータを一時的に保持する役割を果たします。
レジスタはその用途に応じて大きく2種類に分類されます。
- 汎用レジスタ:特定の用途に縛られず、プログラムが自由に使えるレジスタ
- 専用レジスタ:特定の機能に特化した、用途が固定されているレジスタ
以下では、代表的なレジスタをひとつずつ紹介します。
主なレジスタの種類
1. 汎用レジスタ(General-Purpose Register: GPR)
演算処理やデータの一時保存など、多目的に使えるレジスタです。
算術演算・論理演算・データ転送・アドレス計算など、あらゆる場面で活躍します。
プログラマーがアセンブリ言語などで直接アクセスでき、柔軟に利用できる点が特徴です。
アーキテクチャによって本数は異なり、RISCはCISCより多い傾向があります。
x86アーキテクチャでは、32ビット版が8本(EAX・EBX・ECX・EDXなど)、64ビット版が16本(RAX・RBXなど)です(Wikipedia「レジスタ (コンピュータ)」、2023年時点)。
2. プログラムカウンタ(Program Counter: PC)
次に実行する命令のアドレスを保持するレジスタです。
「命令ポインタ(Instruction Pointer: IP)」と呼ばれることもあります(Intel x86アーキテクチャではIPと呼ばれます)。
命令がひとつ実行されるたびに自動的に更新され、CPUが次の命令を正しい順番で取り出せるようにします。
分岐命令が実行された場合は、新しいアドレスがプログラムカウンタに書き込まれ、実行の流れが変わります。
3. 命令レジスタ(Instruction Register: IR)
メインメモリから取り出した(フェッチした)現在実行中の命令を一時的に保持するレジスタです。
CPUはこのレジスタに格納された命令を解読(デコード)し、必要な処理を実行します。
プログラムカウンタが「次の命令の住所」を示すのに対し、命令レジスタは「今まさに処理している命令の内容」を保持するイメージです。
4. アキュムレータ(Accumulator: AC)
演算結果を一時的に保存するためのレジスタです。
古くから使われてきたレジスタで、ALU(算術論理演算ユニット)の出力と直結しています。
たとえば「5 + 3」を計算する場合、処理の結果「8」はいったんアキュムレータに格納され、その後必要に応じてメモリや他のレジスタに転送されます。
現代のプロセッサでは、x86のEAX/RAXレジスタのように汎用レジスタがアキュムレータとしての役割を兼ねるケースも多いです。
5. アドレスレジスタ(Address Register)
メインメモリ上のアドレスを保持するためのレジスタ群です。
用途によってさらに細かく分類されます。
| 種類 | 役割 |
|---|---|
| ベースレジスタ | 配列などのデータの基底(先頭)アドレスを保持 |
| インデックスレジスタ | 配列のインデックス(要素番号)を保持。ベースレジスタと組み合わせて要素にアクセス |
| スタックポインタ(SP) | スタック領域の先頭アドレスを指し示す。関数呼び出しや戻りアドレスの管理に使用 |
| ベースポインタ(BP) | サブルーチン実行中に、スタックフレームの先頭アドレスを保持 |
スタックポインタは特に重要で、関数の呼び出し・終了のたびに値が更新されます。
6. ステータスレジスタ(Status Register)/フラグレジスタ(Flag Register)
演算結果の状態やCPUの動作状態を、複数の1ビットフラグとして保持するレジスタです。
「フラグレジスタ」「コンディションコードレジスタ(CCR)」とも呼ばれます。
主なフラグの例は以下の通りです。
- Zフラグ(ゼロフラグ):演算結果がゼロのときに1になる
- Nフラグ(ネガティブフラグ):演算結果が負の数のときに1になる
- Cフラグ(キャリーフラグ):加算で桁上がりが発生したときに1になる
- Vフラグ(オーバーフローフラグ):演算結果がレジスタの範囲を超えたときに1になる
これらのフラグは、「if文」や「ループ」など条件分岐を実現する命令に活用されます。
7. 浮動小数点レジスタ(Floating-Point Register: FPR)/SIMDレジスタ
小数点を含む数値(浮動小数点数)の演算や、複数のデータを一括処理するSIMD(Single Instruction, Multiple Data)命令に使うレジスタです。
x86アーキテクチャでは、XMM・YMM・ZMMレジスタがこれにあたります。
画像処理・音声処理・機械学習など、大量のデータを並列に扱う処理で重要な役割を担います。
レジスタの種類まとめ一覧
| レジスタ名 | 略称 | 主な役割 |
|---|---|---|
| 汎用レジスタ | GPR | 演算・データ保存など多目的に使用 |
| プログラムカウンタ | PC / IP | 次に実行する命令のアドレスを保持 |
| 命令レジスタ | IR | 現在実行中の命令を保持 |
| アキュムレータ | AC | 演算結果を一時保存 |
| スタックポインタ | SP | スタック領域の先頭アドレスを管理 |
| ステータスレジスタ | SR / CCR | 演算結果の状態をフラグで保持 |
| 浮動小数点レジスタ | FPR | 浮動小数点演算・SIMD処理に使用 |
まとめ
レジスタはCPUの内部にある超高速な記憶素子で、その種類によって役割が異なります。
プログラムカウンタが命令の順番を管理し、アキュムレータが演算結果を保持し、ステータスレジスタが条件分岐の判断材料を提供する——このようにそれぞれのレジスタが連携することで、CPUは高速かつ正確に処理を実行できます。
レジスタの仕組みを理解することは、CPUアーキテクチャやアセンブリ言語を学ぶうえでの重要な基礎知識になります。
参考情報源:


コメント