MIX: 仮想コンピュータの革新
MIXは、著名な計算機科学者
ドナルド・クヌースによって述べられた、仮想的なコンピュータです。彼の著書『
The Art of Computer Programming(計算機プログラミングの技法)』において紹介され、1960年代に構想されました。将来的には、MMIXという新しいコンピュータアーキテクチャがMIXの役割を引き継ぐ予定です。MIXとMMIXに関連するソフトウェア実装、MIXwareやMMIXwareはクヌース自身によって開発されており、これらは自由に利用することが可能です。また、GNU MDKのようなMIX/MMIXエミュレータも存在し、さまざまなプラットフォームで広く利用されています。
アーキテクチャの概要
MIXは、
二進法と
十進法のハイブリッド型のコンピュータ設計を採用しています。プログラムは、
二進法の際は各バイトが6ビットで構成され(0から63の値を持つ)、
十進法の場合は1バイトが2桁の十進数字で構成されます。さらに、1ワードは5バイトと符号からなります。多くのMIX用プログラムは、
二進法または
十進法のいずれかで動作しますが、特に注意すべきは、1バイトに63を超える値を格納しようとしない限り、両形式で問題なく機能するという点です。
1ワードが扱う数の範囲は、
二進法モードで-1,073,741,823から1,073,741,823まで、
十進法モードでは-9,999,999,999から9,999,999,999までです。これは、符号-仮数表現を使用しているため、現代の多くのコンピュータで普及している2の補数表現とは異なります。
レジスタの構成
MIXでは、9つのレジスタが存在し、それぞれ異なる役割を果たしています。具体的には、
- - rA: アキュムレータ(1ワード)
- - rX: 拡張レジスタ(1ワード)
- - rI1からrI6: インデックスレジスタ(各2バイト)
- - rJ: ジャンプアドレスレジスタ(2バイト)
レジスタは、最低でも6ビットで構成されており、命令でバイト単位に操作位置を指定することが可能です。MIXではオーバーフローの監視や比較結果を示すためのフィールドも備えています。
メモリと入出力システム
MIXコンピュータには4000ワード分のストレージがあり、アドレスは0から3999までの範囲で指定されます。また、以下のような入出力デバイスが装備されています。
- - 磁気テープ装置
- - 磁気ディスクまたは磁気ドラム装置
- - カードリーダ
- - カードパンチ
- - ラインプリンタ
- - タイプライタ端末
- - 紙テープ装置
命令構成
MIXの各命令はメモリ上の1ワードに格納されており、4つの部分から構成されています。これにはメモリアドレス部、インデックス指定部、修飾部、命令コードが含まれます。特に修飾部は、指定されたワード内のフィールド位置を示すために用いられます。MIXの命令コードには常にニーモニックが対応し、プログラミング中は自己書き換えコードが頻繁に使用されます。これは、現代のように自動復帰機能を持たないため、
サブルーチンから戻る際に特に重要です。
また、MIXでは命令の修飾部を活用して特定の部分を簡単に書き換えることができるため、柔軟なプログラミングが可能とされています。MIXのプログラムは、MIXALという
アセンブリ言語で記述され、書き換え命令などによる多様な操作が支援されています。
MIXの設計思想は、学ぶ価値が高く、計算機科学の基礎を深く理解するための絶好の手段と言えるでしょう。