本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。
次の表に、4004の命令セットを示す。命令は基本的に8ビット長であり、命令の種別を示すOPRとオペランドを指定するOPAからなっている。命令語長が8ビットで1アドレス命令であるので一つのオペランドしか指定できず、演算命令などでは他方のオペランドは常にアキュムレータ(ACC)であり、演算結果もアキュムレータに書き込むという動作を行う。
しかし、 8ビットの分岐先アドレスを記述する分岐命令や、8ビットの数値(直値)をレジスタに格納するFIM命令などの命令は、8ビットでは記述できないので16ビット命令となっている。
命令の種別を示すOPRは4ビットであるので最大16種の命令を作ることができるが、一部の命令ではOPAのD0ビットを命令種別に動員することにより、18種の命令を作っている。また、I/O命令群はOPAの値で15種の命令に分かれており、ACC命令群はOPAの値で14種の命令に分かれている。
NOP命令
ノーオペレーション命令。なにもせず次の命令に進む。
JCN命令
JCN命令は、OPAで指定される条件が真であれば、命令の後半の8ビットで指定されたアドレスへ分岐する16ビット命令である。条件の指定は、以下のようになっている。
- C2=1:アキュムレータの内容が"0"の場合にはジャンプ
- C3=1:キャリーが"1"の場合にはジャンプ
- C4=1:テスト信号が"0"の場合にはジャンプ
- C1=1:上記のジャンプ条件を反転
C2-4の複数の条件がTrueになった場合にどのように判定されるかはデータシートには記述されていないが、C1=0の場合は一つ以上の条件がTrueとなれば条件はTrueとなると思われる。一方、C1=1で条件を判定した場合には、C2-4の一つでもTrueであればFalseとなり分岐しないと思われる。
分岐先のアドレスは8ビット分しか記述できないので、最上位の4ビットは現在のアドレスが使用される。このため、そのJCN命令があるROMチップの内部の命令にしか分岐できず、他のROMチップに分岐する場合には12ビットのアドレスが指定できる無条件分岐のJUN命令か、サブルーチンコールのJMS命令を使う必要がある。