あなた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バイト目 | 2バイト目 | キャリー フラグ | 説明 | |
---|---|---|---|---|---|
bit 7~4 | bit 3~0 | ||||
ADD A, [Adr] | 0000 | Adr | ※1 | Adrで指定されたアドレスの内容をRAMから読み出しAレジスタに加算 | |
ADD B, [Adr] | 0001 | Adr | ※1 | Adrで指定されたアドレスの内容をRAMから読み出しBレジスタに加算 | |
ADD A, Im | 0010 | Im | ※1 | 命令中で指定された定数(Im)をAレジスタに加算 | |
ADD B, Im | 0011 | Im | ※1 | 命令中で指定された定数(Im)をBレジスタに加算 | |
MOV A, [Adr] | 0100 | Adr | - | Adrで指定されたアドレスの内容をRAMから読み出しAレジスタに格納 | |
MOV B, [Adr] | 0101 | Adr | - | Adrで指定されたアドレスの内容をRAMから読み出しBレジスタに格納 | |
MOV A, Im | 0110 | Im | - | 命令中で指定された定数(Im)をAレジスタに格納 | |
MOV B, Im | 0111 | Im | - | 命令中で指定された定数(Im)をBレジスタに格納 | |
SUB A, [Adr] | 1000 | Adr | ※2 | Adrで指定されたアドレスの内容をRAMから読み出しAレジスタから減算 | |
SUB B, [Adr] | 1001 | Adr | ※2 | Adrで指定されたアドレスの内容をRAMから読み出しBレジスタから減算 | |
MOV [Adr], A | 1010 | Adr | - | RAMのAdrで指定されたアドレスにAレジスタの内容を格納 | |
MOV [Adr], B | 1011 | Adr | - | RAMのAdrで指定されたアドレスにBレジスタの内容を格納 | |
JNC Im | 1110 | Im | - | キャリー(C)がゼロならば指定アドレス(Im)にジャンプ | |
JMP Im | 1111 | Im | - | 指定アドレス(Im)にジャンプ |
4ビットで命令を判別する点は同じでも、TD4とTD4EX4では搭載する命令が異なります。TD4EX4では以下の命令を追加しています。
- RAMへの書き込みと読み込み
- RAMの内容をアキュムレーターに加算
- RAMの内容をアキュムレーターから減算
いっぽう以下の命令はTD4EX4では削除しました。I/O命令については前述の通りです。
- IN命令とOUT命令
- レジスタ間転送命令
これらの変更の結果、TD4からTD4EX4に引き継がれた命令は以下の3種類しかありません。
- イミディエイトデータをアキュムレーターに読み込む
- イミディエイトデータをアキュムレーターに加算
- ジャンプ命令と条件ジャンプ命令
これらの命令の選定は、電卓を作成するために必要かどうかと、その命令を実現するために何個のICが必要になるかで判断しました。例えば乗算命令や除算命令は電卓を製作するには最適な命令ですが、必要なICの数が莫大になるため不採用としました。
では、これらの命令をどのようにして設計したのかを解説します。