

問題
聞きなれない言葉であるアドレス指定方式。基本情報技術者試験や応用情報技術者試験では、アドレス指定方式の動きについて問われる問題が出題されています。
本記事では、アドレス指定方式について図解で分かりやすく解説していきます。
本記事で学べること
- アドレス指定方式について理解する
- アドレス指定方式の種類・各方式の動きについて理解する
- 基本情報技術者試験の過去問の解き方を学ぶ
目次
アドレス指定方式
アドレス指定方式とは、CPUが命令を実行する際、対象となるデータの在りかを指定する方法のことです。CPUが実行する命令は次のように「命令部」と「オペランド部(アドレス部)」に分かれています。

- 命令部:コンピュータへの命令が格納される
- オペランド部:対象データの在りかを示す情報が格納される
スポンサーリンク
アドレス指定方式の種類
アドレス指摘方式には次のような種類があります。
アドレス指摘方式の種類 | 説明 |
直接アドレス指定方式 | オペランド部に実効アドレスが格納されている方式 |
間接アドレス指定方式 | オペランド部に対象データの場所を示すメモリのアドレスが格納されている方式 |
即値アドレス指定方式 | オペランド部に対象となるデータそのものが格納されている方式 |
指標アドレス指定方式 | オペランド部にインデックスレジスタが入り、オペランド部の値にインデックスレジスタの値を加算することで、実効アドレスを求める方式 |
基底アドレス指定方式 | オペランド部に値が入り、その値にベースレジスタの値を加算することで実効アドレスを求める方式 |
相対アドレス指定方式 | オペランド部に値が入り、その値にプログラムカウンタの値を加算することで実効アドレスを求める方式 |
直接アドレス指定方式
直接アドレス指定方式とは、オペランド部に実効アドレスが格納されている方式です。オペランド部に参照するアドレスが直接書かれているので、直接アドレス指定方式と呼ばれています。

上記図例では、オペランド部に実効アドレス「1000」が格納されており、メモリのアドレス「1000」を参照することで値を取得できます。
間接アドレス指定方式
間接アドレス指定方式とは、オペランド部に対象データの場所を示すメモリのアドレスが格納されている方式です。オペランド部に参照するアドレスが間接的に書かれているので、間接アドレス指定方式と呼ばれています。

上記図例では、オペランド部にメモリのアドレス「1000」が格納されています。そして、メモリのアドレス「1000」には実効アドレス「1003」が格納されており、「1003」のアドレスを参照することで値を取得できます。
即値アドレス指定方式
即値アドレス指定方式とは、オペランド部に対象となるデータそのものが入っている方式です。
オペランド部に対象データが格納されているため、メモリの参照は行いません。対象データを取得する際に、メモリへのアクセスがないので高速に処理できます。途中で変更できない定数などで利用されている方式です。

指標アドレス指定方式(インデックスアドレス指定方式)
指標アドレス指定方式とは、オペランド部にインデックスレジスタが入り、オペランド部の値にインデックスレジスタの値を加算することで、実効アドレスを求める方式です。

上記図例の流れは次のとおりです。
指標アドレス指定方式の流れ
- オペランド部にインデックスレジスタ「1」と「980」が格納されている
- インデックスレジスタを参照するとアドレス「1」に「22」が格納されている
- オペランド部の「980」にインデックスレジスタの「22」を加算して(980 + 22 = 1002)実効アドレスを求める
- メモリから処理3で求めた実行アドレスの位置「1002」を参照し値を取得する
スポンサーリンク

インデックスレジスタの値を変更して繰り返し同じ命令を実行させます。
基底アドレス指定方式 (ベースアドレス指定方式)
基底アドレス指定方式とは、オペランド部に値が入り、その値にベースレジスタの値を加算することで実効アドレスを求める方式です。

上記図例の流れは次のとおりです。
基底アドレス指定方式の流れ
- ベースレジスタの値「100」をオペランド部の値「900」に加算(100 + 900 = 1000)して実効アドレスを求める
- メモリから処理1で求めた実行アドレスの位置「1000」を参照し値を取得する
基底アドレス指定方式のメリット
基底アドレス指定方式では、プログラムがメモリ上のどの位置にロードされても、命令を変えることなく実行できるというメリットがあります。
以下図のようにプログラムをメモリ上にロードした時「1001」~ アドレスを使用したとします。このとき、ベースレジスタには先頭のアドレスである「1001」が記憶されます。(ベースレジスタには、プログラムをメモリ上にロードした時の先頭のアドレスが記憶される)

例えば、オペランド部に「1」が設定されている場合、上記図の例ではベースレジスタ「1001」 + オペランド部「1」で「1002」のアドレスを参照し値を取得します。

そして、再び同じプログラムをメモリ上にロードした時、今度は「801」~アドレスを使用したとします。このとき、ベースレジスタには先頭のアドレスである「801」が記憶されます。
オペランド部に「1」が設定されている場合、上記図の例ではベースレジスタ「801」 + オペランド部「1」で「802」のアドレスを参照し値を取得します。
上記の2つの例では、前者・後者共にオペランド部には「1」が設定されているので、どちらも プログラムがロードされた位置の先頭から2番目の値を参照しているのがわかります。
このように基底アドレス指定方式では、プログラムがロードされた位置に応じて命令を変える必要がないのです。
(直接アドレス指定方式を使うとオペランド部には、前者は「1002」後者は「802」が入りプログラムがロードされた位置に応じて命令(オペランド部)を変える必要があるが、基底アドレス指定方式だと、前者・後者共に「1」となり、命令(オペランド部)を変える必要がない)
相対アドレス指定方式(自己相対アドレス指定方式)
相対アドレス指定方式とは、オペランド部に値が入り、その値にプログラムカウンタの値を加算することで実効アドレスを求める方式です。

相対アドレス指定方式は、基底アドレス指定方式とほぼ同じであり、違いはベースレジスタの代わりにプログラムカウンタを使用しているところです。
ベースレジスタを持たないが、基底アドレス指定方式と同じように扱いたい場合などに利用する方式です。
基本情報技術者試験 過去問の解説
スポンサーリンク
基本情報技術者平成28年秋期 午前問9
設問の図はアドレス部(オペランド部)に参照するメモリのアドレス「20」が格納されており、メモリのアドレス「20」には実効アドレス「25」が格納されています。
解答のア~エのどれが設問の図の動きと一致しているか確認していきます。
【ア:間接アドレス指定方式】
アドレス部(オペランド部)に参照するアドレスが間接的に書かれている方式。
→ 設問の図と動きが一致するので正解
【イ:指標アドレス指定】
アドレス部(オペランド部)にインデックスレジスタが入りインデックスレジスタの値を加算することで、実効アドレスを求める方式。
→ 設問の図とは動きが異なるので不正解(インデックスレジスタを使用していない)
【ウ:相対アドレス指定】
アドレス部(オペランド部)の値にプログラムカウンタの値を加算することで実効アドレスを求める方式。
→ 設問の図とは動きが異なるので不正解(プログラムカウンタを使用していない)
【エ:直接アドレス指定】
アドレス部(オペランド部)に実効アドレスが格納されている方式。
→ 設問の図とは動きが異なるので不正解(オペランド部に実効アドレスは格納されていない)
基本情報技術者試験おすすめの参考書・問題集
いちばんやさしい 基本情報技術者 | 『基本情報技術者試験』試験に、短期間で一発合格するための試験対策本。ITの知識がまったくない、未経験者やでもスラスラと学習を進められるよう、丁寧に解説。 |
かやのき先生の基本情報技術者教室 | 基本情報技術者をめざす方のためのやさしいオールインワンタイプの参考書&問題集。イラストや豊富な図解・例え話を駆使して理解しやすく・記憶に残りやすいように説明。 |
基本情報技術者 パーフェクトラーニング過去問題集 | 科目A・Bともに万全の対策ができる、定番の過去問題集!科目A・科目Bの両方について万全の対策ができる。 |
キタミ式イラストIT塾 基本情報技術者 | すべての解説をイラストベースで行っているため,とてもわかりやすい解説本。いちばん最初に読む基本情報技術者試験関連の書籍を探している人におすすめ! |
出るとこだけ!基本情報技術者[科目B] | 基本情報技術者【科目B】対策の定番書!前提知識+解き方+試験問題を掲載。効率よく学習できる。 |
基本情報技術者 合格教本 | 出題範囲を体系的にきちんと理解しながら学習したい人におすすめ!基本情報技術者試験の定番テキストの改訂版。 |
基本情報技術者 超効率の教科書+よく出る問題集 | 動画でスムーズに学習スタート、テキストでしっかり理解度を深める!よく出る問題を反復学習することで、合格に直結するチカラが身に付く! |