あんたCPUなんか創ってどうするのよ?! Vol.1 第6章 第4節

~TD4とかいうCPUがあまりにも残念だったので拡張してみた~

2016/8/14
コミックマーケット C90 3日目 西g16b

第6章 第4節 インテル4004 のアプローチ

ではここで、偉大なる先人の知恵を借りましょう。

4004の命令コードはオペコードが4ビット、オペランドが4ビットとなっており、TD4と似ています。これはTD4が4004の真似をしている訳ではなく、4ビットCPU を設計すると概ね同じような仕様に落ち着くと言うことでしょう。

ところが4004の命令数は39個もあります。オペコードが4ビットしかないのに、一体どうやって39個もの命令を実現しているのでしょうか?

それは命令コード表を見れば分かります。

命令1バイト目2バイト目説明
bit7~4bit3~0
NOP00000000 何もしない
JCN0001ccccaaaaaaaa条件分岐
FIM0010rrr0dddddddd8ビット定数(イミディエイトデータ)読み込み
SRC0010rrr1 アドレス送信
FIN0011rrr0テーブル参照
JIN0011rrr1レジスタ間接ジャンプ
JUN0100aaaaaaaaaaaa無条件ジャンプ
JMS0101aaaaaaaaaaaaサブルーチンコール
INC0110rrrr インクリメント
ISZ0111rrrraaaaaaaaインクリメント&分岐
ADD1000rrrr 加算
SUB1001rrrr減算
LD1010rrrrレジスタ⇒アキュムレータ転送
XCH1011rrrrレジスタ⇔アキュムレータ交換
BBL1100rrrrサブルーチンからのリターン
LDM1101Immイミディエイトデータ読込
RAM命令群1110????RAMへの読み書き・加減算およびROMへの入出力
ACC命令群1111????各種演算

4004 の命令コードで特筆すべきことは、一部の命令のオペコードが8 ビット幅になっている事です。上の表のRAM 命令群とACC 命令群が該当します。また、オペコードが0010 の時と0011 の時は命令コードの最下位ビットによって別の命令として解釈されます。かなり複雑な命令体系だと言って良いでしょう。

それらの結果、4004 では39 個もの命令を実現しています。

この命令セットを嶋正利氏たちがどのようにして作り上げたのか、非常に興味があります。