第5章 プログラム内蔵方式の実現

プログラム内蔵方式とは

プログラム内蔵方式とは、コンピュータの内部(具体的には主メモリ)に機械語プログラムを並べ、そこに書かれている内容に従って演算や判断などの処理する方式です。

この方式は現代のコンピュータでは「当り前」の事ですが、実際にこの方式を実現した電子式コンピュータは1943年に稼働したEDSACが初めてであり、それ以前のコンピュータは、紙テープに穿孔された命令を直接実行するか(注)、処理すべき事が変わる度に配線を変える必要がありました。


現代においてはプログラム内蔵方式ではないコンピュータは「博物館の展示品」以外には存在しません。100円ショップ等で購入できる安価な電卓はコンピュータではなく単なる「手動式計算機」に過ぎません。

日本ではコンピュータを電子計算機と訳してしまったため、「安価な電卓でも電子式の計算機だからコンピュータである」と思った人(あるいは、思っている人)が少なくありません。しかしその考え方は明らかな誤りです。プログラム内蔵方式であるか否かがコンピュータであるか否かの正しい基準です。


注:外部記憶装置の「記憶媒体」としての紙テープではなく、プログラムが格納する主メモリとしての紙テープです。この場合、分岐命令は都度紙テープを巻き戻したり早送りする必要があり、分岐命令1つに数秒要するため実行速度がとても遅くなります。


図はレジスタ間転送装置の再掲図ですが、14個ある白抜き矢印(制御入力)に与える信号を「手作業によるスイッチ操作」で実現するのではなく、主メモリの内容(機械語命令)に従って自動的に行うのが、プログラム内蔵方式のコンピュータです。

プログラムカウンタ

主メモリの内容(機械語命令)に従ってコンピュータを動かすためには、現在、主メモリのどのアドレスの内容を実行しているかを記憶するレジスタが不可欠です。

このレジスタは実行中のプログラムの位置を保持するので「プログラムレジスタ」と呼ばれるべきです。しかしこのレジスタは(分岐命令が現れた時以外は)常にインクリメントされるレジスタです。そのため「プログラムレジスタ」ではなく「プログラムカウンタ」と呼ぶのが慣習となっています。略称はPCを用いるのが一般的です。


注:パーソナルコンピュータの略称もPCなので文献によっては文脈から、どちらの意味のPCなのかを判断する力も必要になることもあります。本書ではプログラムカウンタの意味以外でのPCという略称は用いていません。

命令レジスタ

プログラムカウンタが示す主メモリの内容(=機械語命令コード)を複写し、その命令の実行が完了するまで、それを保持するのが「命令レジスタ」の役割です。

RETROF-2020の場合、主メモリのデータ幅は16ビットですが命令の種類は256種類もあれば十分なので、機械語命令コードの上位8ビットのみを命令レジスタに格納します。下位の8ビットはオペランド(命令に対するオプションの様なもの)として使用します。このオペランドの処理方法に関しては後で(どこで?)詳細を説明します。ここではオペランドはとりあえず無視して下さい。

尚、命令レジスタを「オーダーレジスタ(order register)」と呼んでいた時代もありますが、現代では「インストラクションレジスタ(instruction register)」と呼ぶのが主流です。本書でも以降、命令レジスタの略語はIRとします。

レジスタ間転送装置の改良

図はレジスタ間転送装置に、命令レジスタを付加したものです。

プログラムカウンタは既存の「Pレジスタ」をそのまま使います。

図ではPレジスタがプログラムカウンタであることを明示するためにPCと表記を変えています。また主メモリの出力を入力値とする命令レジスタ(IR)が新たに追加されています。

この構成での具体的な動作原理は次項以降で詳しく解説します。

ハーバード方式とノイマン方式

主メモリを1組だけ用意し、そこにプログラム(機械語コード)とデータ(機械語コード以外)を格納するコンピュータアーキテクチャを「ノイマンアーキテクチャ」と言います。

一方、プログラムを格納する主メモリと、データを格納する主メモリを個別に用意するアーキテクチャを「ハーバードアーキテクチャ」と呼びます。

ハーバード方式は「プログラムの読み出し」と「データの読み書き」を同時にできる(実行速度を速くできる)という長所がありますが、メモリを2組用意する必要があるという短所もあります。

RETROFシリーズは、できるだけ単純な回路で実用的なコンピュータを作ることが目的でしたので、全てノイマンアーキテクチャを採用しています。