概要
CPUが命令を実行する流れのメモ。
CPUが一つの命令を実行するまでに以下の一連の流れを行っている。
- 命令の取り出し
- 命令のデコード
- オペランドアドレスの割り出し
- オペランドデータの取り出し
- 命令の実行
①命令取り出し
画像クリックで等倍
まず最初は主記憶装置から命令を取り出すところから始まる。
「プログラムカウンタ(命令アドレスレジスタ)」というところに「実行する命令が主記憶装置のどこにあるのか」という情報を持っているため、それを使って主記憶装置から命令を取り出す。
この時取り出される命令には
「命令部」と、演算対象であるデータの主記憶装置上のアドレスを表す
「オペランド部」の二つが組み合わさっている。
取り出した命令(命令部+オペランド部)は
「命令レジスタ」で保持する。
命令を取り出したら、「プログラムカウンタ」の値をインクリメントする(次に実行する命令のアドレスに変更する)
②命令のデコード
画像クリックで等倍
受け取った命令は制御信号に変換される必要がある。
それを行うのが
「デコーダ」の役割。
「デコーダ」は「命令レジスタ」から命令の「命令部」を受け取り、制御信号に変換し、「算術論理演算装置(ALU)」へ送る。
③オペランドアドレスの割り出し
画像クリックで等倍
次に
「オペランド(演算対象のデータ)」を主記憶装置から取り出す作業を行いたいところだが、その前にその「オペランド」が「主記憶装置のどこに保存されているか」を割り出す必要がある。
「命令レジスタ」に保存されている命令の「オペランド部」からオペランドがどこにあるのかを割り出すことができる。
この時割り出し方式がいくつかあるがそれについてはそこそこ長いため別記事で記載する。
割り出したアドレスは
「汎用レジスタ」に保持される。
④オペランドデータの取り出し
画像クリックで等倍
オペランドアドレスの割り出しができたら、そのアドレスを使って主記憶装置から実際に「オペランド」の取り出しを行う。
取り出された「オペランド」は
「汎用レジスタ」に保持される。
⑤命令の実行
画像クリックで等倍
最後に命令を実行する。
命令の実行は
「算術論理演算装置(ALU)」で行われる。
「汎用レジスタ」から計算対象の「オペランド」を取り出し、演算を行う。
演算結果は再び「汎用レジスタ」に書き戻され、その後、「汎用レジスタ」から主記憶装置にも書き戻される。
ここまで終わったら再び「①命令の取り出し」に戻り、次の命令が実行される。
CPU内の構成要素(部品)まとめ
名称 | 概要 | ① | ② | ③ | ④ | ⑤ |
---|
プログラムカウンタ(命令アドレスレジスタ) | 実行する命令が主記憶装置のどこに保存されているかを保持する | o | - | - | - | - |
命令レジスタ | メモリから取り出した命令を保持する | o | o | o | - | - |
デコーダ | 命令レジスタから送られた命令をデコードする | - | o | - | - | - |
汎用レジスタ | オペランドの保持など様々な情報を保持する | - | - | o | o | o |
算術論理演算装置(ALU) | 演算を行う | - | o | - | - | o |