インデックスレジスタ【index register】指標レジスタ
インデックスレジスタとは?

コンピュータがメモリのデータを読み書きするには、格納場所を示すアドレスを指定しなければならない。名簿や売上データのように同じ形式のデータが連続して並ぶ配列を扱う場合、個々のアドレスをプログラム中にひとつずつ書き込む方法は非効率である。
そこで、先頭の基準アドレスを固定しておき、そこからの相対的な位置をインデックスレジスタに格納しておく。CPUは「基準アドレス+インデックスレジスタの値」を計算して実際のアクセス先を求めるため、レジスタの値を一定量ずつ増やすだけで隣のデータへと順番にアクセスできる。
この方式は「インデックスアドレス指定」(指標アドレス指定)と呼ばれ、ループ処理で同じ命令を繰り返しながらレジスタの値だけを次々更新していけば、簡単に配列全体を端から走査できる。アドレスを個別に記述する必要がなくなるため、プログラムが短くなり、CPUが処理する命令数も減るため実行効率も上がる。配列への順次アクセスだけでなく、構造体の要素参照やテーブル検索でも同様の手法が使われる。
初期のCPU製品ではインデックスレジスタが専用のレジスタ域として独立して設けられていたが、現代の製品では汎用レジスタをインデックス用途に転用する設計が一般的である。x86系アーキテクチャにおけるSIレジスタ、DIレジスタはその名残であり、64ビット環境ではRSIレジスタ、RDIレジスタとして拡張されている。
また、インデックスレジスタと混同されやすいベースレジスタは、プログラムが置かれたメモリ領域の先頭アドレスを保持するためのもので、役割が異なる。両者を組み合わせ「ベースアドレス+インデックス+即値オフセット」の組み合わせでアドレスを計算する場合もある。C言語やJavaなどの高水準言語を使う場合、プログラマがインデックスレジスタを直接操作することはないが、コンパイラが内部でこの仕組みを活用したコードを自動生成している。