ベースレジスタは、CPU内部のレジスタの中でも「アドレス計算」に直結する重要な役割を持つ用語です。
情報処理試験のアドレス指定方式の問題で登場し、インデックスレジスタやプログラムカウンタとの使い分けが問われます。
対象試験と出題頻度
ベースレジスタは、基本情報技術者・応用情報技術者で出題されるテーマです。
アドレス指定方式の比較問題として定番化しており、「インデックスレジスタ」「プログラムカウンタ」との違いを正確に区別できるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクC(応用)余裕があれば覚える
用語の定義
情報処理試験を勉強していると、「ベースレジスタって何を入れるレジスタ?インデックスレジスタと何が違うの?」と混乱しがちです。
ベースレジスタ(Base Register)とは、一言で言うと
「プログラムやデータ領域の先頭アドレス(基準点)を保持するCPU内部のレジスタ」
のことです。
イメージとしては、「ホテルのフロアの起点となる部屋番号」です。
たとえばホテルの501号室がフロアの先頭(基準)だとします。「先頭から3つ目の部屋」と指定すれば、501 + 3 = 504号室だと分かります。
フロアが変わっても(=プログラムが別のメモリ番地に配置されても)、先頭番号を更新するだけで全ての部屋を正しく特定できます。
📊 ベースレジスタの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Base Register |
| 別名 | 基底レジスタ |
| 分類 | CPU内部のレジスタ(特殊用途レジスタ) |
| 使われる場面 | 基底(ベース)アドレス指定方式での実効アドレス計算 |
| 関連する性質 | 再配置可能(リロケータブル)プログラムの実現 |
解説
OSはプログラムを主記憶上の空いている領域にロードします。ロード先のアドレスは毎回異なる可能性があるため、プログラム内部で「主記憶の○○番地」と固定してしまうと、配置場所が変わった瞬間に正しく動作しません。
この問題を解決するために、プログラムの先頭アドレスを専用のレジスタに格納し、命令のアドレス部に記述された値(先頭からの差分)と足し合わせて実効アドレスを求める仕組みが導入されました。
この「先頭アドレスを保持する専用レジスタ」がベースレジスタです。
実効アドレスの計算方法
基底アドレス指定方式では、次の式で実効アドレスを算出します。
実効アドレス = ベースレジスタの値 + 命令のアドレス部の値
具体例で確認します。ベースレジスタに「100」が格納されていて、命令のアドレス部が「200」なら、実効アドレスは 100 + 200 = 300 になります。CPUは主記憶の300番地からデータを読み出します。
図解:基底アドレス指定方式の実効アドレス計算
命令語
ベースレジスタ
実効アドレス
▲ アドレス部の値(200)にベースレジスタの値(100)を加算して実効アドレス(300)を得る
なぜ再配置可能になるのか
プログラムが主記憶の100番地にロードされた場合、ベースレジスタに100をセットします。次にプログラムが500番地にロードされれば、ベースレジスタを500に書き換えるだけで、命令のアドレス部はそのまま使えます。つまり、プログラム自体を書き換える必要がありません。
この特性を「再配置可能(リロケータブル)」と呼びます。マルチタスクOSでは複数のプログラムを同時に主記憶上に配置するため、この仕組みが不可欠です。
他のアドレス指定方式との比較
基底アドレス指定方式は、アドレス指定方式の1つです。混同しやすい方式との違いを表で整理します。
| 方式 | 加算するレジスタ | 主な用途 |
|---|---|---|
| 基底アドレス指定 | ベースレジスタ | プログラムの再配置(リロケータブル) |
| 指標アドレス指定 | インデックスレジスタ | 配列の要素への順次アクセス |
| 相対アドレス指定 | プログラムカウンタ | 分岐命令でのジャンプ先指定 |
| 直接アドレス指定 | なし(アドレス部の値をそのまま使用) | 固定アドレスへのアクセス |
| 間接アドレス指定 | なし(主記憶上の値を経由) | ポインタによる間接参照 |
| 即値アドレス指定 | なし(アドレス部の値をデータとして使用) | 定数の即座の使用 |
ここだけは確実に押さえてください。
「ベースレジスタ → 再配置」「インデックスレジスタ → 配列アクセス」「プログラムカウンタ → 分岐命令」という対応関係が区別できれば、選択肢で迷うことはありません。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 ベースレジスタの核心を3行で
・プログラムの先頭アドレス(基準点)を保持するCPU内部のレジスタ
・基底アドレス指定方式で「アドレス部の値 + ベースレジスタの値 = 実効アドレス」として使われる
・プログラムの再配置(リロケータブル)を実現する仕組みの要
試験ではこう出る!
ベースレジスタは、FE・APの午前問題でアドレス指定方式の比較問題として出題されています。単独で問われるというより、6種類のアドレス指定方式を正しく区別する問題の中で登場するパターンが中心です。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H23特別 午前 問10 |
LOAD命令でベースレジスタの値を使って有効アドレスを計算し、データをロードする問題。 | ・アドレス部200 + ベースレジスタ値100 = 300番地 ・300番地の格納値「1300」が正解 |
| FE H27春 午前 問9 |
図を見てアドレス指定方式を選ばせる問題。解説で基底アドレス指定の定義が提示される。 | ・6種類のアドレス指定方式の区別 ・間接・基底・指標・相対の見分け |
| AP H26春 午前 問10 |
絶対アドレス方式を選ばせる問題。選択肢に基底アドレス指定の説明が含まれる。 | ・直接(絶対)アドレス指定とその他の違い ・基底アドレス指定の説明が選択肢ウに出現 |
| AP H28秋 午前 問9 |
間接アドレス指定方式のアドレス部が指定するものを選ぶ問題。 | ・「基準点との差分」は基底アドレス指定 ・間接アドレス指定との混同がひっかけ |
📝 IPA試験での出題パターン
パターン1:「アドレス指定方式を選べ」
6種類のアドレス指定方式の説明文や図が並び、正しい方式名を選ぶ形式。「アドレス部の値にベースレジスタの値を加えたもの」という文言が基底アドレス指定の決定的なキーワード。インデックスレジスタ・プログラムカウンタとの入れ替えがひっかけになる。
パターン2:「有効アドレスを計算せよ」
FE H23特別のように、ベースレジスタの値と命令のアドレス部の値が具体的な数値で与えられ、加算結果を問う形式。計算自体は単純な足し算なので、「どの値を足すか」を正確に把握していれば得点できる。
試験ではここまででOKです。ベースレジスタの内部ビット幅やハードウェア実装の詳細は問われないので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. 命令のアドレス部の値に、特定のレジスタの値を加算して実効アドレスを求める「基底アドレス指定方式」で使用されるレジスタはどれでしょうか?
- A. インデックスレジスタ:配列の各要素を順番に参照するとき、アドレス部の値に加算する値を保持するレジスタ。
- B. ベースレジスタ:プログラムの先頭アドレスを保持し、アドレス部の値に加算して実効アドレスを求めるためのレジスタ。
- C. プログラムカウンタ:次に実行する命令の主記憶上のアドレスを保持するレジスタ。
正解と解説を見る
正解:B
解説:
基底アドレス指定方式は、命令のアドレス部の値にベースレジスタの値を加算して実効アドレスを算出する方式です。プログラムの先頭アドレスをベースレジスタに格納することで、プログラムを主記憶上のどこに配置しても正しく動作させることができます。
選択肢Aのインデックスレジスタは「指標アドレス指定方式」で使用されるレジスタであり、配列要素へのアクセスに適しています。基底アドレス指定方式で使うレジスタではありません。選択肢Cのプログラムカウンタは「相対アドレス指定方式」で使用され、分岐命令のジャンプ先を計算する場面で用いられます。こちらも基底アドレス指定方式の構成要素ではありません。
よくある質問(FAQ)
Q. ベースレジスタとアキュムレータは何が違いますか?
アキュムレータは演算結果を一時的に蓄積する専用レジスタであり、アドレス計算には関与しません。一方、ベースレジスタはアドレス計算専用で、演算処理には使われません。役割がまったく異なるため、問題文に「演算結果を格納」とあればアキュムレータ、「アドレス部の値に加算」とあれば基底アドレス指定方式のベースレジスタだと判断できます。
Q. ベースレジスタの値は誰がセットするのですか?
通常はOSのローダ(プログラムを主記憶にロードする機能)がセットします。プログラムが主記憶上に配置される際、ロード先の先頭アドレスをOSがベースレジスタに書き込みます。アプリケーション側が明示的に設定することは基本的にありません。IPA試験ではこの仕組みまで深掘りされないため、「OSが自動設定する」とだけ覚えておけば十分です。
Q. 現代のCPUでもベースレジスタは使われていますか?
使われています。x86系CPUにはCS(コードセグメント)やDS(データセグメント)といったセグメントレジスタがあり、これらはベースレジスタの発展形です。ただし現代のOSでは仮想記憶とページングが主流であるため、セグメントレジスタの役割は限定的になっています。試験範囲では深掘りされないので、「概念は現代でも生きている」程度の認識で問題ありません。
Q. 「ベースレジスタ方式」と「ベースアドレス方式」は同じものですか?
同じ概念を指しています。IPA公式シラバスでは「ベースアドレス方式」、過去問の解説では「基底(ベース)アドレス指定方式」と表記されることが多く、どちらも「アドレス部の値にベースレジスタの値を加算する」方式です。名称が揺れているだけなので、どの表記が出ても同一のものと判断してください。