本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。
これに対してIntel 4004は、演算する語長が4ビット、命令語長は8ビット、アドレス空間は12ビットである。当時の半導体技術で1チップに集積するという要件から、4ビットの語長に制限せざるを得なかったことは理解できる。そして8ビット=256命令では電卓機能を実現するプログラムは組めないと思われるので、4ビットの整数倍とすると12ビットのアドレス空間は、実用上、必須であろう。
命令語長に関してはPDP-8のように12ビットとする手もあると思われる。そうすればPDP-8のように間接アドレスを使えば、12ビットのメモリ空間を容易にアクセスできるようになる。しかし、4001 ROMのビット数を256x8ビットより増やせないとすると、幅を12ビットとすると128命令しか入らないので、各命令の機能が増え、強力になる点を考慮しても、同一機能を実現するのに必要なROMチップが増えてコストアップになる点を嫌ったのではないかと思われる。
そして、16ピンの安価なパッケージの採用も必須とすると、4ビットの双方向バスでRAM/ROMを接続する4ビットの語長、8ビット長の命令語、12ビットのアドレス空間という4004のチョイスとなる。
PDP-8ではこれらが全て12ビットということで色々なことが上手く行っていたのであるが、4004では、これらを異なるビット数にしてしまった(せざるを得なかった)ことにより、色々と問題が出ている。また、ビット長を別としても、筆者の独断と偏見で言わせて貰えば、4004の命令アーキテクチャ(Instruction Set Architecture、通常、ISAと呼ぶ)はあまり成功しているとは言い難い。
IBMのSystem/360と同様に16個のレジスタを持ち、さらに4段のアドレスタックを備えるなど、PDP-8と比べると、当時としては先進的な機構を取り入れようとしているが、これらが上手く活きていない。
汎用レジスタのアーキテクチャがうまく機能するためには、System/360のRR命令のように2個のレジスタを指定する命令が欲しい。しかし、4004の命令は8ビット長であるので1個のレジスタしか指定できず、[R1]+[R2]→R1([ ]は内容を示す。従って、この表現は、R1レジスタの内容とR2レジスタの内容を加算し、R1レジスタに格納することを意味する)を行うには[R1]→ACC、[ACC]+[R2]→ACC、[ACC]→R1と3命令が必要となり、合計では、命令メモリは24ビット、実行サイクルは24サイクルが必要となってしまう。これならば、前述のROMチップの容量問題は別として、命令語長を12ビットとしてRR命令を作れば命令メモリ容量は12ビット、実行時間も9~10サイクルで実現できるので、12ビットの命令の方がメモリ容量、性能の両面で有利である。また、16個のレジスタは数としては十分なようであるが、各レジスタのビット数が4ビットしかない点が問題である。System/360は32ビットのレジスタであり、個々のレジスタが一つ変数を格納することが出来るが、電卓でも4ビット表現の10進数を8~16個使って一つの数を表わしているので、全部のレジスタを使っても、実質的には1個か2個の変数をレジスタに置けるに過ぎない。これらの理由から、4004は汎用レジスタマシンとしては上手く機能しない。
また、メモリアドレスを指定するインデックスレジスタとしては、命令のオペランドとしてレジスタペアを指定し、その内容を使う8ビットアドレスであるのでRAM全体の任意のアドレスを一つの命令では指定できない。このため、DCL命令で256命令ごとのページアドレスを指定するという構造になっており、これは致命的な問題ではないが、直接、全メモリ空間を指すことができる命令に比べると不便である。
そして、命令を格納する4001 ROMのアドレスは8ビット単位、データを格納する4002 RAMのアドレスは4ビット単位である。ROMは命令だけにしてデータを読まなければこれでも良いが、ROMからデータを読もうとすると、ROM、RAMで別個の命令が必要になるという非対称であまり美しくない構造になっている。このため、命令の種類が増えてしまう。
また、4段のスタックは3重までのサブルーチンコール/リターンの高速化には有効であるが、4004では、スタックの内容をメモリに書き出す命令がないので、3重より深いサブルーチンコールを実現する方法が無い。更に、このスタックのために12個の4ビットレジスタを必要としており、性能向上の割りにはハードウェアコストを掛けすぎという感がある。
ということで、4004の命令アーキテクチャはどうもあまり良いアーキテクチャとは言えないが、4004の命令アーキテクチャの良し悪しは、史上初のワンチップマイクロプロセサを作ったというHoff氏の功績をいささかも減ずるものではなく、むしろ、経験のないアーキテクチャ設計を、教科書を勉強しながら、とにかく作り上げたということを評価すべきであろう。