現在、私は秋の基本情報技術者試験に向けて勉強中です。
その中で、私が得た知識をまとめて記事にしています。
本記事のテーマ
アドレス指定方式とは
計算によって求めた主記憶装置上のアドレスを実行アドレス(もしくは有効アドレス)と呼びます。
コンピュータに指示を与えるには、コンピュータの理解できる言語つまり、機械語で命令しなければなりません。また、命令は「何を(オペランド部)どうしろ(命令部)」 という記述になっています。この何をの部分には「メモリのアドレス」や「メモリのアドレスが格納されているメモリのアドレス」が入っている場合など様々な種類があります。このように、なんらかの計算によってアドレスを求める方式を、アドレス修飾(もしくはアドレス指定)と呼びます。具体的にどんな方式があるのかを紹介していきます。
即値アドレス指定方式
オペランド部に、対象となるデータそのものが入っている方式を即値アドレス指定方式と呼びます。
直接アドレス方式
オペランド部に記載してあるアドレスが、そのまま実行アドレスとして使える方式を直接アドレス指定方式と呼びます。
間接アドレス方式
間接アドレス指定方式では、オペランド部に記載してあるアドレスのなかに、「対象となるデータが入っている箇所を示すメモリアドレス」が記されています。間接的に指定しているわけです。
オペランド部の指し示す先には、「対象となるデータが入っている箇所を示すメモリアドレス」が記されていますので、オペランド部が示すアドレスの中身を見ると、データが実際に入っている場所、つまり実効アドレスを得ることができます。
そして、実効アドレスを参照するとデータが得られるのです。
インデックス(指標)アドレス指定方式
インデックス(指標)アドレス指定方式では、オペランド部の値に、インデックス(指標)レジスタの値を加算することで実効アドレスを求めます。
インデックスレジスタというのは何かというと、連続したアドレスを扱う時に用いるレジスタです。配列型のデータ処理などで使います。
オペランド部に含まれているインデックスレジスタ番号は、インデックスレジスタ内のどの値を使用するかを示しています。
インデックスレジスタの値とオペランド部の値を合わせることで、実効アドレスが決まります。
ベースアドレス指定方式
ベースアドレス指定方式では、オペランド部の値に、ベースレジスタの値を加算することで実効アドレスを求めます。
ベースレジスタというのは、プログラムがメモリ上にロードされた時の、先頭アドレスを記憶しているレジスタです。つまりベースアドレス指定方式というのは、プログラム先頭アドレスからの差分をオペランド部で指定する方式なわけです。
こうすると、メモリ上のどこにプログラムがロードされても、命令を変えなくて済むのです!
相対アドレス指定方式
相対アドレス指定方式では、オペランド部の値に、プログラムカウンタの値を加算することで実効アドレスを求めます。
プログラムカウンタに入っているのは、次に実行される命令へのメモリアドレスです。
つまり相対アドレス指定方式は、メモリ上にロードされたプログラムの中の、命令位置を基準として、そこからの差分をオペランド部で指定する方式なのです。
ベースアドレス方式と似ていますが、ベースアドレスを持たないCPUがどこにロードされても大丈夫なアドレス指定を行いたい時に用いられます。
以上で機械語のアドレス指定方式の説明を終了します。
今回も覚える用語がいっぱい出てきましたが、内容自体はすごく簡単なことなので、実際に頭の中でアドレス指定を描きながら用語と紐づけていきましょう!
参考資料
・キタミ式イラストIT塾 基本情報技術者 平成31/01年