今まで,命令と制御という言葉をあまり区別なく用いてきたが, 制御部から制御線を経由してデータ処理部に渡されるものを 制御コード(control code)と呼ぼう。 一方,命令(instruction)または命令コード(instruction code)とは, 機械語のプログラムの形で書かれるものであり, 制御部はこれを解釈して,制御コードの形にしてデータ処理部に与えるものとする。
さてここで,制御部から与えられる制御コードの形を示しておこう。
制御コードはいずれも23bit幅で,
にも
にも与えられる。
命令コードのビット幅の16bitが,制御コードのビット幅の23bitに対し,
やや短くて済むのは,一種の符号化がなされているからである。
命令コードは制御部で解釈,つまりデコードされ,この23bit幅に変換される。
まず
のタイミングで与えられるのは,
ALUに関する演算命令に絡む制御コードであり,
で実行される。
そのコードは図 9.9のような意味を持っている。
のタイミングで与えられるのは,データ処理部内のデータ移動命令に関する制御コードであり,
のタイミングで移動が実行される。
そのコードは2種類あり,MSBが0か1かでコードの割り当てが変わる。
MSBが0の場合は,リテラルの絡まない通常の移動であり, 概要を図 9.10に示す。 レジスタ,I/Oポート,ALUレジスタ間の移動を行う。 移動には二つのバスを独立に利用できるので, Aバス,Bバスのそれぞれの通信元と通信先を5bitで指定することになる。 Bバス経由でALUのB入力レジスタを通信先とした場合には, シフト量を指定して,シフト結果を送ることも,シフト量を送ることもできるよう, 6bitとしている。
MSBが1の場合は,リテラルの絡む移動であり, 概要を図 9.11に示す。 Aバスを経由して,レジスタ,I/Oポート,ALUレジスタ, フラグレジスタのいずれかとリテラル間の移動を行う。 行き先としてALUのA入力レジスタを指定する場合には, 1bit左シフトしたデータを送ることもできる。