では、図3を使ってCPUの演算の流れ(汎用レジスタ方式)を説明します。
メモリ(ROM)の中にはマイコンが実行する命令が入っています。算術演算なら、足し算、引き算などがあります。論理演算ならAND、OR、XORなどです。
例えば、足し算を行う場合、足し算という命令を二進数の番号で定義します。番号をいくつにするかは、マイコンの開発者が自由に決めることができます。ここでは「足し算をしろ」という番号(命令コード)を「00000001b」と決めます。次に何と何を足すかを定義します。ここでは足し算の命令コードの次に来る8bitコードの最初の4bitと後半の4bitが汎用レジスタの数字を表すことにします。そして汎用レジスタのレジスタ1とレジスタ2を計算することにします。そして演算結果をどこに入れるかを定義します。さらに次の8bitが演算結果を入れるレジスタの番号を表わすように定義します。ここでは、説明を簡単にするために、これも汎用レジスタにして、レジスタ3に入れることにします。
すなわち、メモリの中には次のような順番で二進数の番号(命令コード)が入ります。
足し算の命令コード : 0000 0001 b
計算する数字が入っているレジスタ : 0001 0010 b
演算結果を入れるレジスタ : 0000 0011 b
これらは、最初にメモリから読み出されてFIFO/プリフェッチバッファに格納されます。
(1)で決めたルールに従って、FIFO/プリフェッチバッファに入っている2進数のデータを解読(デコード)します。
0000 0001 b → 足し算をしろ
0001 0010 b → レジスタ1とレジスタ2からデータを読み出せ
0000 0011 b → レジスタ3に演算結果を入れろ
命令に基づき演算装置は次の動作を行います。
足し算をしろ ⇒ ALUをXOR(足し算モード)にする
レジスタ1とレジスタ2からデータを読み出せ ⇒ レジスタ1とレジスタ2の出口を開けて、データをバスに乗せる
レジスタ3に演算結果を入れろ ⇒ レジスタ3の入り口を開けてデータをバスから取り込む
レジスタ1の値を緑色のバスに乗せます。
レジスタ2の値を青色のバスに乗せます。
ALUは足し算モード(XOR)になって青色のバスの値と緑色のバスの値を足します。
ALUは足し算した結果を紫色のバスに乗せます。
レジスタ3の入り口が開いて、紫色のバスのデータを取り込みます。
これで、レジスタ1とレジスタ2を足し算して、レジスタ3に入れる演算が完了です。
アキュムレータ方式の場合は、レジスタが1個なので、レジスタ1がアキュムレータだと考えてください。基本動作は汎用レジスタ方式と同じですが、レジスタ1とメモリの値を演算してレジスタ1に入れると考えてください。
今回は、CPUの主な仕事である演算に着目しましたが、この他にアドレス計算、割り込み処理、演算結果(キャリー、ボローなど)の処理といった、その他の仕事も担っています。それらの詳細は、回をあらためて説明していきます。
Copyright © ITmedia, Inc. All Rights Reserved.