最終更新日:2026年8月29日
fe fe-technology computer-architecture addressing
まず結論
アドレス指定方式とは、命令に書かれた情報から、実際に使う値や主記憶上の番地をどう求めるかを決める方式です。
基本情報技術者試験では、まず次の3点を確認します。
値そのものを使うのか
アドレスを一度たどるのか
レジスタの値を足すのか
代表的な方式は、次のように切り分けられます。
値そのものを使う → 即値
アドレス部をそのまま番地にする → 直接
アドレス部が示す番地を一度たどる → 間接
アドレス部 + 指標レジスタ → 指標
アドレス部 + ベースレジスタ → 基底
アドレス部 + プログラムカウンタ → 相対
レジスタの値を番地として使う → レジスタ間接
直感的な説明
資料を棚から取り出す場面で考えると分かりやすいです。
- 「命令に書かれた数字を、そのままデータとして使う」
- 「20番の棚を見る」
- 「20番の棚に書かれた25番という案内を見て、25番の棚を見る」
- 「基準となる棚番号に、レジスタの値を足して目的の棚を探す」
この違いが、アドレス指定方式の違いです。
特に間接アドレス指定は、目的のデータへ直接向かわず、別の番地を一度受け取ると考えるのがポイントです。
定義・仕組み
アドレス指定方式を理解するときは、有効アドレスとデータを分けて考えます。
- 有効アドレス:実際に参照する主記憶上の番地
- データ:その番地に格納されている値
即値アドレス指定
命令のアドレス部に書かれた値を、番地ではなくデータとしてそのまま使います。
使うデータ = 命令中の値
アドレス部が 20 なら、主記憶の20番地を探すのではなく、数値20を演算などに使います。
直接アドレス指定
命令のアドレス部を、そのまま有効アドレスとして使います。
有効アドレス = アドレス部
アドレス部が 20 なら、主記憶の20番地を参照します。
間接アドレス指定
アドレス部が示す主記憶を一度見て、そこに格納されている値を有効アドレスとして使います。
有効アドレス = 主記憶[アドレス部]
例えば、次の状態を考えます。
命令のアドレス部 = 20
主記憶[20] = 25
主記憶[25] = データ
この場合は、最初に20番地を参照し、そこに格納された 25 を有効アドレスとして使います。
20番地を見る
↓
25という番地を受け取る
↓
25番地のデータを参照する
指標アドレス指定
アドレス部に、指標レジスタの値を足して有効アドレスを求めます。
有効アドレス = アドレス部 + 指標レジスタ
例えば、アドレス部が100、指標レジスタが5なら、有効アドレスは105です。
基底アドレス指定
アドレス部に、ベースレジスタの値を足して有効アドレスを求めます。
有効アドレス = アドレス部 + ベースレジスタ
ベースレジスタは、プログラムやデータを配置した基準位置を保持します。アドレス部を基準位置からのずれとして扱えるため、配置場所が変わってもベースレジスタの値を変えることで対応できます。
相対アドレス指定
アドレス部に、プログラムカウンタの値を足して有効アドレスを求めます。
有効アドレス = アドレス部 + プログラムカウンタ
現在実行している位置を基準として、前後の命令やデータを指定する方式です。
レジスタ間接アドレス指定
レジスタに格納されている値を、そのまま主記憶の有効アドレスとして使います。
有効アドレス = レジスタの値
指標・基底・相対のようにアドレス部との足し算はしません。
このテーマは、基本情報技術者試験の「コンピュータ構成要素」やCPUの命令実行と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、命令のアドレス部と、主記憶やレジスタに格納された値を図や文章で示し、どのアドレス指定方式かを問う形が中心です。
次の順番で確認すると切り分けやすくなります。
1. アドレス部をデータとして使うか
番地を探さず、命令中の値そのものを演算対象にするなら即値アドレス指定です。
2. 主記憶を一度たどるか
アドレス部をそのまま有効アドレスにする → 直接
その番地に格納された別の番地を使う → 間接
図に矢印が二段階で描かれていたり、最初に参照した番地から別の番地を取り出したりする場合は、間接アドレス指定を疑います。
3. 何を足しているか
| 有効アドレスの求め方 | アドレス指定方式 |
|---|---|
| アドレス部 + 指標レジスタ | 指標アドレス指定 |
| アドレス部 + ベースレジスタ | 基底アドレス指定 |
| アドレス部 + プログラムカウンタ | 相対アドレス指定 |
どれも足し算を使いますが、足すレジスタの種類が判断の決め手です。
どんな場面で使う?
指標アドレス指定は、配列や表のような連続したデータを順番に参照する場面に向いています。
基底アドレス指定は、プログラムやデータの配置場所を変えやすくするときに使われます。
相対アドレス指定は、現在の命令位置を基準にして分岐先などを指定する場面で使われます。
間接アドレス指定やレジスタ間接アドレス指定は、ポインタのように「データが置かれた場所を示す情報」を使って参照先を決める場面に関係します。
よくある誤解・混同
即値と直接
どちらも命令のアドレス部を使いますが、数字の意味が違います。
即値:数字そのものがデータ
直接:数字は主記憶上の番地
直接と間接
直接:アドレス部が示す番地を見る
間接:その番地に書かれた別の番地を見る
間接では、最初に参照した場所に目的のデータではなく、次に参照する番地が格納されています。
指標・基底・相対
3方式とも、アドレス部に何らかの値を足します。
指標:指標レジスタを足す
基底:ベースレジスタを足す
相対:プログラムカウンタを足す
「足し算だから指標」と決めず、何を足しているかまで確認します。
指標とレジスタ間接
指標 :アドレス部 + レジスタの値
レジスタ間接:レジスタの値そのもの
レジスタを使っていても、アドレス部との足し算がなければ指標アドレス指定ではありません。
まとめ(試験直前用)
- 即値は、命令中の値そのものをデータとして使う
- 直接はアドレス部をそのまま有効アドレスにし、間接は主記憶を一度たどる
- 指標・基底・相対は、足すレジスタの種類で切り分ける
- 指標は指標レジスタ、基底はベースレジスタ、相対はプログラムカウンタ
- レジスタ間接は、レジスタの値そのものを有効アドレスとして使う