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

Digital Equipment(DEC)は1965年にPDP-8というミニコンを発売した。このコンピュータは爆発的に売れて、DECの基礎を確立した製品である。Intelに就職する前のスタンフォード大学時代にHoff氏がPDP-8を使っていたかどうかは知らないが、超小型のコンピュータである4004を考えるにあたり、当時評判の良かった小型コンピュータであるPDP-8を参考にしたことは確実だと思われる。

PDP-8は昨今の4Uサーバ(高さが7インチ)より大きめであるが、IBM 1130と比べると、当時の常識としては格段に規模が小さくなっており、ミニコンと呼ばれた理由が分かる。

DECのPDPシリーズのミニコンは有名であるが、実は、このコラムを書くに当たって同社のマニュアルを調べて、初めて、PDPというのはProgrammed Data Processorの略であるということに気がついた。次に示す図は、1966年に発行されたDECのProgrammed Data Processor-8 Users Handbookから転載したPDP-8のブロックダイヤグラムである。

  • DEC PDP-8のブロックダイヤグラム

    DEC PDP-8のブロックダイヤグラム(出典:DECのProgrammed Data Processor-8 Users Handbook)

DECのPDP-8は、IBM1130より、更に安価なマシンを目指しており、処理単位となる語は12ビットであり、命令も12ビット長になっている。また、アドレスも12ビット長であり、最大4096語のメモリをアクセスすることが出来る。この4096語のメモリは128語単位のページに分割されており、最大で32ページのメモリがあることになる。

PDP-8のブロック図に戻ると、中央左寄りにAccumulator、その右下にメモリバッファレジスタがある。Accumulator部にはレジスタとしてのアキュムレータと演算器があり、アキュムレータとメモリバッファレジスタの内容を演算し、アキュムレータに結果を格納する。メモリは図の右上にあり、その下のメモリアドレスレジスタで番地を選択してアクセスを行い、データはメモリバッファレジスタとの間でやり取りを行う。

アキュムレータの内容をメモリバッファレジスタに転送することが出来、更に、メモリバッファレジスタの内容をメモリアドレスレジスタに転送することが出来るので、演算結果をメモリアドレスにしたり、メモリに格納するデータにしたりすることが出来る。

命令のフェッチは、プログラムカウンタの内容をメモリアドレスレジスタに転送し、メモリを読むことにより行われる。読み込まれた命令はメモリバッファレジスタを経由して右側のインストラクションレジスタに格納され、Major State Generatorによりデコードされて各部の制御信号が作られる。プログラムカウンタの内容は通常は命令実行毎に+1されるが、分岐命令などではメモリバッファレジスタから内容を転送するものと思われる。

このようにPDP-8は、Von Neumannのノイマンアーキテクチャを殆どそのまま実現したような構造である。また、PDP-8は基本的に12ビットマシンであり、命令もデータも12ビットであり、レジスタやメモリも12ビット幅である。

命令の語長が12ビットと短いので、アキュムレータの内容とメモリオペランドの間で演算を行い、結果をアキュムレータに格納する1アドレス命令であり、PDP-8の一般的な命令は、次に示す形式となっている。

  • PDP-8の一般的な命令式

命令種別を示すOPフィールドは僅か3ビットである。そしてIAフィールドは間接アドレス指定、Pフィールドはメモリページの指定を行う。そして7ビットのAddressフィールドがあり、これにより128語のページ内の任意の語を指すことができる。そして、Pフィールドの値が"0"の場合は、0番地から始まるページ0がアクセスされ、Pが"1"の場合は、現在実行している命令が存在するページをアクセスする。

これではページ0と現在のページ内の合計256語のメモリしかアクセスできないが、この2つのページ内にアドレスを書いた語を用意しておけば、その語を使って間接アクセスを行うことにより、4096語の中の任意のアドレスのメモリを参照したり、そこへジャンプしたりすることが出来る。

PDP-8の命令はOPフィールドが3ビットしかないので、定義できる命令の種類は以下の8種である。

  • PDP-8の命令

何しろ命令がこの8種しかないので、メモリからデータを読むだけのロード命令が無く、OP命令でアキュムレータをクリアしてからTAD命令でメモリからの値を足し込むという操作でメモリ読むことが必要になる。しかし、アキュムレータの内容をメモリに格納するDCA命令が、格納後にアキュムレータをクリアするので、通常は、OP命令でアキュムレータをクリアする必要が無いとか、0ページの8進で10番地から17番地のメモリを間接アクセスすると、自動的に内容が+1されるAutoindexed機能などの工夫を施し、たった、3ビットの命令種別でも、使い物になる命令体系が作れるという好例である。

なお、OP命令ではオペランドのメモリアドレスを指定するフィールドが無いので、例えば乗除算を行う場合はMQレジスタという特別なレジスタをオペランドとして使う。先ず、TAD命令でアキュムレータにデータを入れ、それを第一オペランドとしてMQレジスタに格納し、第二オペランドをTAD命令でアキュムレータに格納してから乗算や除算を実行するという手順が必要となる。