ベースレジスタ【base register】基底レジスタ
概要

プログラムはメモリのどこに配置されるかが実行の度に変わりうる。プログラム中の命令がメモリの内容を読み込みあるいは書き込みする際、特定のメモリアドレスを直に指定してしまうと、別の番地に展開されたときに正しく動作しなくなってしまう。
このような場合に、プログラムが置かれた先頭番地を表す「ベースアドレス」に、先頭からの相対位置である「オフセット値」を足し合わせて番地を指定するようにすれば、プログラムが置かれる場所が変わっても相対的な位置指定に基づいて適切な場所を指し示すことができる。このような番地の指定方式を「ベースアドレス指定」という。
ベースレジスタにはプログラムが実際に置かれたベースアドレスが格納され、命令中のオフセット値と足し合わせることで実効アドレスが算出される。例えば、ベースレジスタの値が「3000」、オフセット値が「100」であれば、CPUは3100番地にアクセスする。複数のプログラムを同時に動かす環境では、オペレーティングシステム(OS)が各プログラムに異なるベースアドレスを割り当てることで、互いのメモリ領域に踏み込まないよう管理できる。
ベースレジスタは保護機構としても機能する。割り当て領域の開始番地をベースレジスタに、範囲の大きさを別のレジスタに保持し、アクセスの度に範囲内かどうかを確認することで、許可されていない領域へのメモリ操作を禁止することができる。攻撃者がプログラムを不正に書き換えて領域外のメモリにアクセスしようとしても未然に防ぐ仕組みである。
現代のCPUではページング方式による仮想メモリ管理が主流となり、ベースレジスタが単独で前面に出る場面は減った。しかしx86アーキテクチャのセグメントレジスタのようにその考え方を受け継いだ機構は今も存在し、「ベースアドレス+オフセット」形式のアドレス指定は多くの命令セットに組み込まれている。