SR命令 :WRレジスタの内容を指定されたアドレスの内容分だけ右へシフトして(ずらして)WRレジスタへ上書きする。
INA命令 :指定されたアドレスの場所へP3レジスタから入力した数値を書き込む。
INB命令 :指定されたアドレスの場所へP4レジスタから入力した数値を書き込む。
OUTA命令 :指定されたアドレスの内容をP1レジスタから出力する。
OUTB命令 :指定されたアドレスの内容をP2レジスタから出力する。
命令の数が少ない事と動作内容が単純であることに驚かれるかもしれません。しかし他の一般的なコンピュータにおいてもCPUが直接行う仕事というのは上に書いたような単純な動作のものがほとんどです。ここで説明したようなCPUの命令を使って書かれたプログラムのことを機械語と言います。
一般的なプログラミング言語(例えばC言語やBasic言語)では開発者が効率よくプログラミングできるように便利で高度な機能を持った命令がたくさん用意されています。ですがその高度な機能を持った命令を直接実行できるコンピュータ回路を作ろうとすると、ものすごく複雑で大規模な回路を作ることになってしまいます。ですのでコンピュータ上では一度全てのプログラムを単純な機械語に変換してから実行する仕組みになっています。
CPUが発明されたばかりの頃はもちろん人が機械語で直接プログラミングを行っていました。今でも一部では機械語に近いアセンブリ言語を使ったプログラミングが使われています。
このCPUでは命令のサイズを16ビットにしています。なので8ビットのメモリ回路の中では2つ分のアドレスの領域を使って1つの命令を保存するかたちになります。このCPUでは最初の8ビットに命令の識別番号を保存し、その後の領域には8ビットの数値やアドレス番号を保存する構造にしてあります。実際に命令が実行されるときには最初の8ビット(識別番号が書き込まれている方)が「IR1」レジスタに読み込まれ、後ろの8ビット(数値やアドレス番号が書き込まれている方)が「IR2」レジスタに読み込まれます。
図68.16ビットサイズの命令
ただ今回作成したCPUの命令は17つしかないので識別番号は2進数で5ビットあれば表現できてしまいます。残りの3ビットは少しもったいないですが未使用領域として常に0で埋めておくことにします。命令は常に2つ分のアドレス領域を使って保存されることになるので、結果的にメモリ回路内部では「IR1」に読み込まれる方の8ビットは偶数番地に、「IR2」に読み込まれる方の8ビットは奇数番地に保存されるようになっています。