概要
CPUがメモリからデータを取得する際に、メモリ上のどこにそのデータがあるのかを算出する必要がある。
そのメモリ上のアドレスを表す方式はいくつかあり、それらをまとめて
「アドレス指定方式」という。
ここではそのアドレス指定方式についてまとめている。
アドレス指定方式一覧
「アドレス指定方式」は大きく以下の4つ(細かく言うと6つ)に分類される。
各アドレス指定方式の詳細は後述するため、ここではあまり理解しなくても大丈夫。
- 即値アドレス指定方式…命令の命令部に直接値を入れている方式。メモリへのアクセスは行われないため超高速。
- 直接アドレス指定方式…命令の命令部にメモリ上のアドレスが入っている。デメリットが大きく、実際にはあまり使われない。
- 間接アドレス指定方式…命令の命令部にメモリ上のアドレスが入っており、そこにはまた別のメモリのアドレスが入っている。大容量メモリに対応する。
- 修飾アドレス指定方式…命令の命令部にメモリ上のアドレスが入っており、そのアドレスにレジスタに入っている値を足すことで、メモリ上のアドレスを割り出す。更に3つのアドレス指定方式に分類される。
即値アドレス指定方式
「即値アドレス指定方式」は「命令レジスタ」の「オペランド部」に入った値をそのまま計算に使用する方式。
画像クリックで等倍
以下のような特徴を持つ。
・メモリを介さないので
超高速
・メモリ上のどこにプログラムが読み込まれても問題なし(
再配置可能)
・「命令レジスタ」の限られた領域にデータを入れるため、
サイズの大きなデータは使えない
直接アドレス指定方式
「直接アドレス指定方式」は「命令レジスタ」の「オペランド部」に入った値でメモリを参照する方式。
画像クリックで等倍
以下のような特徴を持つ。
・メモリへのアクセスが1回のみのため
高速
・メモリへの絶対アドレスが入っているため、メモリ上で読み込まれる場所が変わると動かない(
再配置不可)
・「命令レジスタ」の限られた領域にメモリのアドレスを入れるため、
大容量のメモリには使えない
・デメリットが大きいため現実にはあまり使われない
間接アドレス指定方式
「間接アドレス指定方式」は「命令レジスタ」の「オペランド部」に入った値でメモリを参照し、更にその値でメモリの別のアドレスを参照する方式。
画像クリックで等倍
以下のような特徴を持つ。
・メモリへのアクセスが2回以上あるため
遅い
・メモリへの絶対アドレスが入っているため、メモリ上で読み込まれる場所が変わると動かない(
再配置不可)
・メモリ上のアドレスをメモリに直接保存できるため、
大容量のメモリにも対応する
修飾アドレス指定方式
ベース(基底)アドレス指定方式
「ベースアドレス指定方式」は
「ベースレジスタ」に入っている値と、「命令レジスタ」の「オペランド部」に入った値を足し合わせた値でメモリを参照する方式。
「ベースレジスタ」にはそのプログラムの先頭アドレスが入っている。
画像クリックで等倍
以下のような特徴を持つ。
・メモリへのアクセスが1回のみのため
そこそこ高速
・メモリ上のどこにプログラムが読み込まれても、ベースレジスタにそのプログラムの先頭アドレスが入っているため問題なし(
再配置可能)
自己相対アドレス指定方式
「ベースアドレス指定方式」は
「プログラムカウンタ」に入っている値と、「命令レジスタ」の「オペランド部」に入った値を足し合わせた値でメモリを参照する方式。
「プログラムカウンタ」にはその命令が格納されているアドレスが入っている。
画像クリックで等倍
以下のような特徴を持つ。
・メモリへのアクセスが1回のみのため
そこそこ高速
・メモリ上のどこにプログラムが読み込まれても、「プログラムカウンタ」にその命令のアドレスが入っているため問題なし(
再配置可能)
・
ベースレジスタが無いCPUでも利用可能
インデックス(指標)アドレス指定方式
「インデックス指定方式」は
「インデックスレジスタ」に入っている値と、「命令レジスタ」の「オペランド部」に入った値を足し合わせた値でメモリを参照する方式。
画像クリックで等倍
以下のような特徴を持つ。
・メモリへのアクセスが1回のみのため
そこそこ高速
・連続したデータ(配列など)の取り扱いが得意
アドレス指定方式の複合
上述のアドレス指定方式は
複合して利用することもできる。
例えば「インデックス(指標)アドレス指定方式」+「ベースアドレス指定方式」など。
再配置可能(リロケータブル)
プログラムはメモリ上で必ずしも常に同じ位置に読み込まれるとは限らない。
このメモリで読み込まれる位置が変わっても変わらずプログラムが動き続けられる性質を
「再配置可能性」という。