相対アドレス指定 【relative addressing】 自己相対アドレス指定 / self-relative addressing
概要
相対アドレス指定(relative addressing)とは、CPUが命令を実行する際に処理対象となるデータの所在を指定するアドレス指定方式の一つで、命令のアドレス部の値にプログラムカウンタの値を加えたものをデータの存在するアドレスとする方式。アドレス部の値とレジスタの値を足し合わせる「修飾アドレス指定」の一種。CPUは機械語で記述された命令列をプログラムとして実行するが、命令の中にはメモリ上の特定の位置の内容を読み込んで処理するものがある。その場合、命令のオペランド部(アドレス部)でデータの存在するメモリアドレスを記述するが、その指定方式にはいくつかの種類があり、命令によって対応している方式が異なる。
相対アドレス指定はデータを取得する実際のメモリアドレス(有効アドレス)として、CPU内部の高速な記憶装置(レジスタ)の一種である「プログラムカウンタ」に保存された値と命令のアドレス部の値を足し合わせたものを用いる。
プログラムカウンタには次に実行する命令のアドレスが記録されており、これを用いることで、メモリ上でのその命令の位置からの相対距離でデータの所在を指定することができる。実行時にプログラムがメモリ上のどの位置に配置(ロード)されてもプログラムを改変せずに同じようにデータにアクセスすることができる。
同じくレジスタの一種である「ベースレジスタ」にアドレス部の値を加算してアドレスとする「ベースアドレス指定」を用いるほうが一般的だが、ベースレジスタのないCPUで再配置可能なプログラムを作成したい場合、プログラムカウンタは大抵のCPUに内蔵されているため、代用として相対アドレス指定が用いられることがある。
(2024.4.5更新)