基本情報技術者〜CPU[3]〜
こんにちは!ポテトヘッド(@potato_head0809)です!
前回の記事を読んでいない方はぜひこちらをご覧ください。
potato-head0809.hatenablog.com
今回は命令レジスタがメモリアドレスを指定する様々な方法について触れていきます。
では早速始めていきましょう!
アドレス指定方式
コンピュータに指示を与えるときには、
コンピュータが理解できる言葉で指示を出さなくてはいけません。
日本語の離せない外国の方に日本語で指示を出していてもダメですよね?
その、コンピュータが理解できる言葉というのが「機械語」になります。
さて、今回の話に入りますが、まず「命令」が何で構成されていたか
覚えていますでしょうか。
それは「命令部」と「オペランド部」でしたね!
もう一度、簡単に説明しておきますと...。
「命令部」
実行させたい命令の種類を示すコードが入っているところ
どうでしょうか。思い出しましたか??
なので、命令は「何を(オペランド部)どうしろ(命令部)」ということになります。
この「何を」の部分が、命令の種類によっては、
必ずしもメモリのアドレスが入っているとは限りません。
そこで、様々な指定の方式が出てくるので、その内容を見ていきたいと思います。
即値アドレス指定方式
即値アドレス指定方式とは、
オペランド部に対象のデータそのものが入っていることを言います。
直接アドレス指定方式
直接アドレス指定方式とは、
オペランド部に記載しているアドレスが、そのまま
実効アドレスとして使用できるもののことを言います。
間接アドレス指定方式
ここからは少し複雑になります。
間接アドレス指定方式とは、
オペランド部に記載しているアドレスの中に、
「対象となるデータが入っている箇所を示すメモリアドレス」が書かれています。
言葉では分かりづらいかもしれないので、図で見てみましょう。
どうでしょうか。イメージが持てましたか?
簡単に言うと、直接ではなく、間接的に取得しに行っているのです。
インデックスアドレス指定方式
インデックスアドレス指定方式とは、
足し算することで実効アドレスを取得しています。
図でも説明していますが、インデックスレジスタとは
連続した値を扱うときに用いられるレジスタです。
ベースアドレス指定方式
ベースアドレス指定方式とは、
足し算することで実効アドレスを取得しています。
「足し算」??
先程のインデックスアドレス指定方式と同じだと思うかもしれませんが
使用しているレジスタが異なるので、全く違うものになります。
では、図で見てみましょう。
このように少し複雑にすることで、
メモリ上のどこにプログラムがロードされても
命令を変えなくて良いというメリットがあります。
相対アドレス指定方式
相対アドレス指定方式とは、
オペランド部の値と、
プログラムカウンタの値を
足し算することで、実行アドレスを求めています。
先程は、「インデックスレジスタ」や「ベースレジスタ」でしたが、
今回は「プログラムレジスタ」です!
これは、ベースアドレス指定方式と似ています。
では、どういう時に使うのか。
それは、「ベースレジスタは持たないが、こうしたい!」というときです。
最後に。
どうだったでしょうか。
実行アドレスを求めるだけで、こんなにも
様々な方法があって覚えられないって思ってしまいそうですよね。笑
ですが、大体のイメージを持っていれば、似ているものもあるので
覚えられるのではないかと思っています!
最後までご覧頂きありがとうございました。
また、次回もよろしくお願い致します!