本記事は教養記事シリーズその34です。その他の教養記事はコチラの目次をご覧ください。
メモリとは?
アドレスとは?
種類は?
特徴は?
アドレス指定方式
アドレス指定方式とは,コンピュータのCPUが命令を実行する際に,対象となるデータのメインメモリ上での所在情報(アドレス、番地)を指定する方法のこと。
[IT用語辞典 e-Wordsより]
このような方々のために,まずはCPUとメモリに関して復習していきたいと思います。CPUというのは人間でいう脳によく例えられます。コンピュータの制御や演算をつかさどる役割を果たします。詳しくはコチラの記事でも解説しています。
メモリというのは,よく作業机の広さに例えられます。よく誤解しやすいのが,メモリにデータを保管するのではないかという考えです。データを保管するのは机(メモリ)の上ではなく,引き出し(ストレージ)です。メモリに関してもコチラの記事でお伝えしています。
そして,所在情報というのは作業机上の位置を指しています。つまり,アドレス指定方式というのは「コンピュータをつかさどるシステムから作業机上の位置を指定する」方法のことを言っているのです。
種類
アドレス指定方式には,以下の6種類が挙げられます。覚え方としては「まずは大きな4分類を理解」→「修飾アドレス方式の小分類を理解」という流れになります。
●即値アドレス指定方式
●直接アドレス指定方式
●間接アドレス指定方式
●修飾アドレス指定方式
・ベースレジスタ
・プログラムカウンタ
・インデックスレジスタ
・(汎用レジスタ)
即値アドレス指定方式
命令部に書き込まれているデータをそのまま取り出す方法です。他の場所を参照しないため読み込み速度が速い一方で,指定できるデータの大きさが限られているという欠点があります。
容量が少ない
直接アドレス指定方式
オペランド部に書き込まれている数値がメモリ上の番地を表しています。そして,該当するメモリ上の番地に書き込まれている値をデータとして取得します。こちらも容量に限界がある点に加えて,メモリの先頭番地に依存して表すデータが変わってしまうという欠点があります。
先頭番地に依存する
間接アドレス指定方式
直接アドレス指定方式では,メモリに書き込まれていた値を直接読み取っていましたが,間接アドレス指定方式ではオペランド部で指定されたメモリ上のデータはインデックスのような役割を果たします。上の例ではメモリの50番地に書き込まれている「100」番地にアクセスして,150というデータを取り出しています。
命令レジスタに比べて,メモリでは大きな値を取れるため大きな容量をもてる一方で,「命令レジスタ→メモリ」「メモリ→メモリ」と2回参照しなくてはならないため,実行速度が遅くなってしまうという欠点があります。
速度が遅い
修飾アドレス指定方式
命令レジスタ以外のレジスタを利用してメモリのアドレスを指定する方式を「修飾アドレス指定方式」と呼びます。使用するレジスタの種類によって主に3種類に分けられます。CPU内のレジスタを参照するため,間接アドレス指定方式よりも処理速度が速くなります。
(間接に比べて)処理速度が速い
ベースレジスタ
ベースレジスタの値を基準にして,命令レジスタのオペランド部の値だけ番地を進めたアドレス(有効アドレス)からデータを取得する方法を「ベースアドレス指定方式」と呼びます。命令(レジスタ)の値を変えずにベースレジスタの値を変えるだけでアクセスしたいメモリからデータを取り出せるという特徴があります。
プログラムカウンタ
ベースレジスタの代わりにプログラムカウンタを利用する方法を「相対アドレス指定方式」と呼びます。ベースレジスタ(や汎用レジスタ)を持たないコンピュータで利用される方式です。
インデックスレジスタ
インデックスレジスタを利用する方法を「インデックスアドレス指定方式」と呼びます。連続的な領域にアクセスしたい場合に利用される方法です。
ひとこと
まずは大分類を意識して理解することで,大まかにアドレス指定方式をとらえることができました。おそらく,6種類の方法を並列に覚えてしまうと混乱してしまうのではないかと思います。試験などで「プログラムカウンタの値を基準とし,その値からの変位で実効アドレスを指定する方式はどれか」というような問題が出題されたときも,「修飾アドレス指定方式」→「相対アドレス指定方式」というような思考を経て解答したいところです。また,実際にプログラムを作る際も用途に応じて指定方式を選んでいくべきだと感じました。