こんにちは😀
以前、CPUの命令実行手順についてまとめましたが、今回はその中の命令に関してまとめてみます。
コンピュータに命令を伝える場合、コンピュータが理解できる言葉で命令を伝える必要があります。
それは命令語と呼ばれ、「0」と「1」で構成された機械語になります。
そして、命令は「命令部」と「オペランド部」でできています。
オペランド部は、処理の対象となるデータの在りか(メモリのアドレスとか)を保持しています。
オペランド部のアドレスは形式が決まっているわけではないので、何らかの計算によってアドレスを求める必要があります。
これをアドレス指定(アドレス修飾)と呼びます。
即値アドレス指定方式
いくつかあるアドレス指定をみていきます。
オペランド部に対象となるデータそのものが入っている方式を即値アドレス指定方式を言います。
そのままデータが入っているので、メモリへの参照は行われません。
直接アドレス指定方式
オペランド部に記載してあるアドレスが、そのまま実効アドレスとして使える方式を直接アドレス指定方式と言います。
これは、絶対アドレス指定方式とも呼ばれます。
実効アドレスとは、計算によって求めた主記録装置上のアドレスを指します。有効アドレスとも呼ばれます。
この方式は、そのアドレスのメモリの場所を参照しにいきます。
間接アドレス指定方式
オペランド部に対象となるデータが入っている箇所を示すメモリアドレスが記されている方式を間接アドレス指定方式と言います。
オペランド部にあるアドレスから実効アドレスの場所がわかります。
そしてその実効アドレスからメモリ上のデータを参照できます。
このように間接的にアドレスを指定している方式になります。
インデックスアドレス指定方式
オペランド部の値に、インデックス(指標)レジスタの値を加算することで実効アドレスを求める方式をインデックス(指標)アドレス指定方式と言います。
インデックスレジスタとは、連続したアドレスを扱う時に用いるレジスタで、配列型のデータ処理などで使います。
命令の中に書かれているインデックスレジスタ番号からインデックスレジスタを取り出し、イペランド部の値と加算することで実効アドレスを求めます。
ベースアドレス指定方式
オペランド部の値に、ベースレジスタの値を加算することで実効アドレスを求める方式をベースアドレス指定方式と言います。
ベースレジスタとは、プログラムがメモリ上にロードされた時の先頭のアドレスを記憶しているレジスタです。
このことからもわかるように、ベースアドレス指定方式は、プログラムの先頭アドレスからの差分をオペランド部で指定している方式になります。
相対アドレス指定方式
オペランド部の値に、プログラムカウンタの値を加算することで実効アドレスを求める方式を相対アドレス指定方式を言います。
プログラムカウンタに入っているのは、次に実効される命令へのメモリアドレスです。
つまり、この方式はメモリ上にロードされたプログラムの中の命令位置を基準として、そこからの差分をオペランド部で指定する方式になります。
今回の一言・・・
ほとんどの処理をコンピュータに任せている命令ですが、裏ではこのような複雑な処理が走っています。
理解を深めるためにも知っておきたい知識はたくさんあります。
今回はここまで🤚
では、また次回。