こんにちは、まさとです。
6つもあってしかも、初めて聞く言葉だ、、
一つずつ丁寧にご説明しますね!
今回の記事はCPUのオペランド読み出しの部分でデータをどのように取りにいくかを書いた記事になります!
そのためCPUの概要は知っておく必要があるので詳しくは以下の記事を読んでみてください!
上記記事を一読してから本記事を読み進めるとCPUに対する知識がもっと深まるかと思いますのでぜひ!!
オペランド読み出しってなんだったっけ
![](https://masatooooon.com/wp-content/uploads/2022/02/CPU-2.png)
命令レジスタは命令部とオペランド部に分かれていましたね。
命令部は一つ前のデコードで処理したので次はオペランド部を処理します。
オペランド部には処理の対象となるデータの番地が格納されており
対象番地を確認してメモリにデータを取りに行きます。
今回は命令レジスタに0002が入っており、メモリの0002番地を探して対象データを取りに行っています。
しかし、その対象データの探し方は様々な方法があります。
上記は6つのうちの一つである直接アドレス指定方式というものです。
それでは一つずつ見ていきましょう!
アドレス指定方式6つとは
即値アドレス指定方式
これは一番単純なものなので
サクッといきましょう。
![](https://masatooooon.com/wp-content/uploads/2022/02/100-1.png)
即値アドレス方式はオペランド部に入っているデータをそのまま使います。
今回の場合で言うと100というデータをそのまま使います。
なのでメモリへの参照は行われません。
すぐに値が得られるから「即値アドレス」と覚えましょう。
直接アドレス指定方式
例で出したものと同じですね。
![](https://masatooooon.com/wp-content/uploads/2022/02/CPU-2.png)
オペランド部に入っているアドレスがそのままメモリの番地になっています。
今回の場合は0002のメモリ番地を探して、そこのデータを使ってねといった感じです。
間接アドレス指定方式
これは伝言ゲームみたいなものです!
![](https://masatooooon.com/wp-content/uploads/2022/02/100-2.png)
まずはオペランド部に入っているメモリアドレスを見にいきます。
するとそこにまたメモリアドレスが書いてあって
また探しにいきます。
やっとデータがあるのでそのデータを使う方法が間接アドレス指定方式です。
インデックスアドレス指定方式
ここから少しややこしくなって来ます、、
![](https://masatooooon.com/wp-content/uploads/2022/02/インデックスレジスタ番号.png)
命令レジスタの中が今までは命令部とオペランド部だったのに
新しくインデックスレジスタ番号とやらが入ってきてますね。
これはメモリ参照のようにインデックスレジスタを参照するものとなっています。
この場合だとインデックスレジスタ番号に2が入っているので
インデックスレジスタの2番を探して20を取り出します。
その20とオペランド部にある100を足し算します。
足し算の結果がメモリアドレスになるというわけです。
これがインデックスアドレス指定方式です。
ベースアドレス指定方式
![](https://masatooooon.com/wp-content/uploads/2022/02/インデックスレジスタ番号-1.png)
また新しいベースレジスタという言葉が出てきましたね。
ベースレジスタというのは
プログラムがロードされた時の
先頭アドレスを記憶しているレジスタです。
![](https://masatooooon.com/wp-content/uploads/2022/02/プログラム.png)
これはプログラムをメモリ上のどこにロードしたとしても命令を変える必要はないため
非常にメリットがあります。
以上がベースアドレス指定方式です!
相対アドレス指定方式
これはベースアドレス指定方式と
とても似ているので理解しやすいかと
![](https://masatooooon.com/wp-content/uploads/2022/02/インデックスレジスタ番号-2.png)
プログラムカウンタというのは次に実行するメモリアドレスのことです。
ただここでは使い方が少し違いまして、
メモリ上にロードされたプログラムの中の命令位置を
基準としてそこからの差分をオペランド部で指定しています。
ベースアドレス指定方式と似ているというお話をしましたが
これはCPUにベースレジスタがない場合に、
代わりにプログラムカウンタを使わせてもらっているという状態です。
ベースアドレス指定方式が理解できれば
こちらも自ずと理解できるはずです!!
最後に
![](https://masatooooon.com/wp-content/uploads/2022/02/Floppy-disk-amico.png)
いかがだったでしょうか。
今回の内容をまとめます。
- オペランド読み出しって何だっけ
- アドレス指定方式6つとは
お疲れ様でした。
アドレス指定方式6つについて
少しわかった気がするよ。
今回はアドレス指定方式について
解説してきました。
アドレス指定方式6つそれぞれ
どんな名前で、どんな役割か。
この二つがすぐに答えれるようになってくださいね!
以上、まさとでした。