上記の続きを書きます。
インデックス(指標)アドレス指定方式
インデックス(指標)アドレス指定方式では、オペランド部の値にインデックス(指標)レジスタの値を加算することで実効アドレスを求めます。
|命令部|2(インデックスレジスタ番号)|100(オペランド部)|
メモリ
0100
0150 18
0154 25
0158 63
インデックスレジスタ
0
1
2 50
実効アドレスを求めます
インデックスレジスタとは連続したアドレスを扱うときに用いるレジスタです。
プログラミングの配列と同じですね。
今回はインデックスレジスタが2なので50の値を使用します。
インデックスレジスタの値とオペランド部の値を合わせることで、実効アドレスが決まります。
オペランド部が100のため150が実効アドレスです。
実効アドレスが150のためメモリは「18」という値をデータとして用います。
ベースアドレス指定方式
この方式では、オペランド部の値にベースレジスタの値を加算することで実効アドレスを求めます。
|命令部|50(オペランド部)|
メモリ
100
150
151
200 18
ベースレジスタってのはなによとなりましたが、プログラムがメモリ上にロードされた時の先頭アドレスを記憶しているレジスタのようです。
先頭アドレスを記憶することでメモリ上のどこにプログラムをロードされても命令を変えなくてすみます。
ベースアドレス指定方式はプログラム先頭アドレスからの差分をオペランド部で指定する方式です。
ベースレジスタ 150
オペランド 50
実効アドレス 200
200番地の「18」という値をデータとして用います。
相対アドレス指定方式
この方式では、オペランド部の値にプログラムカウンタの値を加算することで実効アドレスを求めます。
|命令部|50(オペランド部)|
150(プログラムカウンタ)
メモリ
0100
0150
0152
0200 18
0201
50(オペランド部) + 150(プログラムカウンタ)
実行アドレス 18
プログラムカウンタに入っているのは、次に実行される命令へのメモリアドレスです。
相対アドレス指定方式は、メモリ上にロードされたプログラムの中の命令位置を基準として
そこからの差分をオペランド部で指定する方式となります。
ベースアドレス方式と似ていてよくわからなくなってきたので一旦まとめてみます。
機械語のアドレス指定方式のまとめ
|命令部|オペランド|
メモリ
|メモリアドレス|実行アドレス|
即値アドレス指定方式
オペランド部に、対象となるデータそのものが入っている
直接アドレス指定方式
オペランド部に記載してあるアドレスが実行アドレスとして使える
間接アドレス指定方式
オペランド部に記載しているアドレスの中に、対象となるデータが入っている箇所を示すメモリアドレスがある
インデックス(指標)アドレス指定方式
オペランド部の値に、インデックスレジスタの値を加算することで実行アドレスを求める
ベースアドレス指定方式
オペランド部の値に、ベースレジスタの値を加算することで実行アドレスを求める
相対アドレス指定方式
オペランド部の値に、プログラムカウンタの値を加算することで実行アドレスを求める
まとめ
早くCPUを頭に組み込みしたい