現在、私は秋の基本情報技術者試験に向けて勉強中です。
その中で、私が得た知識をまとめて記事にしています。
本記事のテーマ
【基本情報技術者になろう!】
・CPUの命令実行手順の解説
CPUの命令実行手順とは
CPUの命令実行手順の流れはこんな感じです。
1. 命令の取り出し
2. 命令の解読
3. 対象データの読み出し
4. 命令実行
この際、CPUが命令を実行するために取り出した情報は、レジスタと呼ばれるCPU内部の記憶装置に保持します。
主記憶装置にロードされたプログラムは、一見単純に見える命令であっても紐解けば、そこにはたくさんの命令が詰まっていたりします。なので、CPUはこれを順番に取り出して、解読しながら1つずつ処理していきます。
この取り出した命令はどこかで覚えておかなければなりません。その役割を果たすのがCPU内部にあるレジスタという記憶装置です。
それでは、レジスタの種類と、それらが命令を実行する流れの中で、どのように使われるのかを見ていきます。
レジスタの種類とそれぞれの役割
【プログラムカウンタ】
役割:次に実行するべき命令が入っているアドレスを記憶するレジスタ
【命令レジスタ】
役割:取り出した命令を一時的に記憶するためのレジスタ
【インデックス(指標)レジスタ】
役割:アドレス修飾に用いるためのレジスタで、連続したデータを取り出しに使うための増分値を保持する。
【ベースレジスタ】
役割:アドレス修飾に用いるためのレジスタで、プログラムの先頭アドレスを保持する。
【アキュムレータ】
役割:演算の対象となる数や、演算結果を記憶するレジスタ。
【汎用レジスタ】
役割:特に機能を限定していないレジスタ。一時的な値の保持や、アキュムレータなどの代用に使ったりする。
これらのレジスタを使ってCPUがどのようになっているかというと次のようになります。
ただし、あるレジスタを別のレジスタで代用したりすることもあるので、必ず上のレジスタが全てのっているというわけではありません。
次に、はじめに紹介した命令実行の流れに沿って、1つずつ説明していきます。
命令の取り出し(フェッチ)
最初に行われるのは命令の取り出し「フェッチ」作業です。
使われるのは命令レジスタとプログラムカウンタです。
取り出しべき命令がどこにあるかはプログラムカウンタが知っています。
なので、プログラムカウンタの示すアドレスを参照して命令を取り出し、それを命令レジスタに記憶させます。
取り出し終わったら次の命令に備えてプログラムカウンタの値を1つ増加させます。
命令の解読
先ほど取り出した命令の解読作業に入ります。
命令レジスタに取り出した命令というのは「命令部」と「オペランド部」で出来ています。
【命令部】
実行させたい命令の種類を示すコード番号が入っている
【オペランド部】
処理対象となるデータを収めたメモリアドレスなどが入ってるところ
(命令の種類によってはこれがない場合もある)
※「オペランド」というのは「オペレートする対象」という意味がある
この命令の一部が命令デコーダへと送られます。
命令デコーダは、命令部のコードを解読して、必要な時に制御信号を飛ばします。
対象データ(オペランド)読み出し
仮に命令が加算などの演算処理だった場合、その演算の元となる数値が必要になります。それを読み取ってくる作業を行います。
処理対象となるデータ(オペランド)は、命令レジスタのオペランド部を見ると、データの格納されている場所が分かります。
ただし、アドレスの指定方式にはいろんな種類があるので、オペランド部に直接「メモリのアドレス」そのものが記載されているとは限りません。
というわけでこの手順では、オペランド部を参照して対象データを読み出し、それを汎用レジスタなどに記憶させます、
命令実行
今回が最後の実行 となります。ここまできたらあとは、命令を実行するだけです。仮に命令が演算処理だとすると、演算装置が「えいや!」と計算して終了です。
実行はこのような感じで、汎用レジスタから処理対象のデータを取り出して演算します。その後、演算結果を書き戻して終了です。終わったら、また実行手順①に戻って一連の手順を繰り返します。
以上でCPUの命令実行手順との説明を終了します。
CPUはコンピュータの脳の役割を果たします。つまり、システムを理解するにはCPUについても理解しておいた方が理解が進みます。
ですので、実行手順は複雑ですが、命令の流れと一緒に覚えましょう!
参考資料
・キタミ式イラストIT塾 基本情報技術者 平成31/01年