アドレス指定方式

コンピュータのアドレスの指定方法についてまとめようと言ってから、一ヶ月が経ってしまいました。
学校が始まってから時間が経つのが一気に早くなったような気がします。

情報処理技術者試験の対策テキストを読むと、「アドレス指定方式」と言うようですが、一般的には、「アドレッシングモード」と呼ぶことが多いようです。

ここでいう「アドレス」とは、データや命令がどこに格納されているのかを示すメモリ上の番地のことで、この番地を指定する方法が幾つか存在します。
それらを挙げると、

  • 即値アドレス指定
  • 直接アドレス指定
  • 間接アドレス指定
  • 指標アドレス指定
  • 基底アドレス指定
  • 相対アドレス指定

があります。コンピュータに対する命令語は、基本的に、「命令部」と「オペランド(アドレス部)」で構成されています。命令部は、「何をするのか」が書いてあり、アドレス部には、その命令によって参照されるアドレスが書かれています。

即値アドレス指定

イミディエイトアドレス指定ともいいます。
メモリの参照を行わず、オペランドに書いてある値をそのまま使います。

直接アドレス指定

絶対アドレス指定ともいいます。
オペランドに書いてあるアドレスを参照して、そこに書いてある値を使います。

間接アドレス指定

オペランドに書いてあるアドレスを参照し、そこに書いてある値のアドレスを参照し、その値を使います。
直接アドレス指定では、一段階の参照でしたが、間接アドレス指定では、2段階の参照になっています。

指標アドレス指定

インデックスアドレス指定ともいいます。
オペランドに書かれている値とインデックスレジスタに書かれている値を足した値のアドレスの値を使います。
オペランドに書かれている値を基準にして、C言語の配列のような連続したデータにアクセスする時に使われます。
オペランドで先頭のアドレスを指定しておいて、インデックスレジスタの値を増減させれば、簡単に連続したデータにアクセスできます。

基底アドレス指定

ベースレジスタ(基底レジスタ)に格納されている値とオペランドに格納されている値を足した値のアドレスに書いてある値を使います。
こちらは指標アドレス指定と違って、ベースレジスタの値を基準にします。
プログラムが読み込まれるメモリの位置が変わったとしても、基底レジスタの値を変えるだけ動作ができます。これを再配置可能といいます。

相対アドレス指定

プログラムカウンタに書かれている値とオペランドに書かれているアドレスを足した値のアドレスの値を使います。
プログラムが読み込まれるメモリの位置が変わっても、プログラムカウンタが基準になって相対アクセスをするので、基底アドレス指定の場合のように基底レジスタの値を変えることなく動作できます。