あなたCPUなんか創ってどうするのかしら?! 第1章 第3節

~あんたCPUなんか創ってどうするのよ?! Vol.4~

2019/4/14
技術書典6
池袋サンシャインシティ 文化会館ビル2F 展示ホールD「う11」

第1章 第3節 TD4EX4の命令

TD4EX4の命令は次ページの表1に示すように14個です。これは命令デコーダーの構成がTD4と同じになっていて、命令コードの上位4ビットで命令の判別をしているためです。4ビットなので搭載できる命令は最大で16個となりますが、TD4ではそのうちの12個を実際の命令に割り当てていました。

TD4EX4は1命令が1~2バイトの可変長命令を採用していますが、16個のうちの14個を実際の命令に割り当てています。

表1 TD4EX4の命令コード表
命令1バイト目2バイト目キャリー
フラグ
説明
bit 7~4bit 3~0
ADD A, [Adr]0000Adr ※1Adrで指定されたアドレスの内容をRAMから読み出しAレジスタに加算
ADD B, [Adr]0001Adr※1Adrで指定されたアドレスの内容をRAMから読み出しBレジスタに加算
ADD A, Im0010Im※1命令中で指定された定数(Im)をAレジスタに加算
ADD B, Im0011Im※1命令中で指定された定数(Im)をBレジスタに加算
MOV A, [Adr]0100AdrAdrで指定されたアドレスの内容をRAMから読み出しAレジスタに格納
MOV B, [Adr]0101AdrAdrで指定されたアドレスの内容をRAMから読み出しBレジスタに格納
MOV A, Im0110Im命令中で指定された定数(Im)をAレジスタに格納
MOV B, Im0111Im命令中で指定された定数(Im)をBレジスタに格納
SUB A, [Adr]1000Adr※2Adrで指定されたアドレスの内容をRAMから読み出しAレジスタから減算
SUB B, [Adr]1001Adr※2Adrで指定されたアドレスの内容をRAMから読み出しBレジスタから減算
MOV [Adr], A1010AdrRAMのAdrで指定されたアドレスにAレジスタの内容を格納
MOV [Adr], B1011AdrRAMのAdrで指定されたアドレスにBレジスタの内容を格納
JNC Im1110Imキャリー(C)がゼロならば指定アドレス(Im)にジャンプ
JMP Im1111Im指定アドレス(Im)にジャンプ
※1 最上位ビットからの繰り上げが発生した場合に1になる。発生しない場合には0になる。
※2 結果が正(ゼロ以上)になった場合に1になる。結果が負の場合には0になる。

4ビットで命令を判別する点は同じでも、TD4とTD4EX4では搭載する命令が異なります。TD4EX4では以下の命令を追加しています。

  • RAMへの書き込みと読み込み
  • RAMの内容をアキュムレーターに加算
  • RAMの内容をアキュムレーターから減算

いっぽう以下の命令はTD4EX4では削除しました。I/O命令については前述の通りです。

  • IN命令とOUT命令
  • レジスタ間転送命令

これらの変更の結果、TD4からTD4EX4に引き継がれた命令は以下の3種類しかありません。

  • イミディエイトデータをアキュムレーターに読み込む
  • イミディエイトデータをアキュムレーターに加算
  • ジャンプ命令と条件ジャンプ命令

これらの命令の選定は、電卓を作成するために必要かどうかと、その命令を実現するために何個のICが必要になるかで判断しました。例えば乗算命令や除算命令は電卓を製作するには最適な命令ですが、必要なICの数が莫大になるため不採用としました。

では、これらの命令をどのようにして設計したのかを解説します。