スポンサーリンク

「プログラムとはコンピュータにやってほしい作業を手順通りに並べた作業命令の手順書です」ということを少し前のページでお話ししました。CPUを設計する時には回路の設計と同時にそのCPUで実行できる作業命令の具体的な作業内容について決めていきます。

これまでは”作業手順書内に書かれた作業命令”などと言ってきましたが、このCPUが実行する”作業命令”のことをコンピュータの世界では単純に命令と言います。CPUが実行できる命令の内容はCPUの設計者が自由に決めることができます。多機能な命令をたくさん作ればCPUを使う時に(プログラミングする時に)便利になりますが、その代わりCPUの構造が複雑になり規模も大きくなってしまいます。

ですので今回はできるだけ回路が簡単になるようにCPUの命令をできるだけ少なく、かつ単純な動作になるように設計しました。このCPUで実行できる命令は以下に示した17つの命令です。まずは各命令の名前と大まかな役割だけを紹介します。

 JUMP命令 :指定されたアドレスへジャンプする。

 JZE命令 :直前に行われた演算の結果でALUのフラグが「1」になった場合にのみ指定されたアドレスへジャンプする。

 LD命令 :指定されたアドレスの内容をWRレジスタへ読み込む。

 ST命令 :指定されたアドレスの場所へWRレジスタの内容を書き込む。

 SET命令 :指定された数値をWRレジスタへ読み込む。

 LHI命令 :指定されたアドレスの内容をHRレジスタへ読み込む。

 ADD命令 :WRレジスタの内容と指定されたアドレスの内容を足してWRレジスタへ上書きする。

 SUB命令 :WRレジスタの内容から指定されたアドレスの内容を引いてWRレジスタへ上書きする。

 AND命令 :WRレジスタの内容と指定されたアドレスの内容をANDしてWRレジスタへ上書きする。

 OR命令 :WRレジスタの内容と指定されたアドレスの内容をORしてWRレジスタへ上書きする。

 NOT命令 :指定されたアドレスの内容をNOTしてWRレジスタへ読み込む。

 SL命令 :WRレジスタの内容を指定されたアドレスの内容分だけ左へシフトして(ずらして)WRレジスタへ上書きする。

スポンサーリンク

 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ビットは奇数番地に保存されるようになっています。

 

<戻る       次へ>

 

スポンサーリンク