本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。

次の表に、4004の命令セットを示す。命令は基本的に8ビット長であり、命令の種別を示すOPRとオペランドを指定するOPAからなっている。命令語長が8ビットで1アドレス命令であるので一つのオペランドしか指定できず、演算命令などでは他方のオペランドは常にアキュムレータ(ACC)であり、演算結果もアキュムレータに書き込むという動作を行う。

しかし、 8ビットの分岐先アドレスを記述する分岐命令や、8ビットの数値(直値)をレジスタに格納するFIM命令などの命令は、8ビットでは記述できないので16ビット命令となっている。

  • Intel 4004の命令表

    Intel 4004の命令表

命令の種別を示す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命令を使う必要がある。