MIX (プログラミング)

MIX とは、ドナルド・クヌースが著書 The Art of Computer Programming (TAoCP) で使った仮想計算機である。1960年代に生まれた MIX は、今後の TAoCP の版では MMIX という新たな（仮想の）コンピュータアーキテクチャで置換される予定である。MIX と MMIX のソフトウェア実装（MIXware および MMIXware）はクヌースが開発しており、自由に利用可能となっている。クヌースの MIX/MMIX エミュレータからの派生版も存在する。GNU MDK がその一例で、フリーソフトウェアとして幅広いプラットフォーム上で動作する。

TAoCP 本文中の記述によれば、MIX は「世界初の多機種複合型コンピュータ」で、型番は MIX という綴りをローマ数字として解釈したものと同じ 1009 であると設定されている。この数は「MIX によく似ていて MIX を簡単にシミュレートできる実在のコンピュータ 16 種」の型番から取って平均した（mixした）ものであるとあるが、具体的にその機種を検討してみるとかなり恣意的であり、このラインナップについてはこじつけと見てよいであろう。

アーキテクチャ 
MIX は二進法と十進法のハイブリッド型コンピュータである。二進法でプログラムする場合、各バイトは6ビットで構成される（値は 0 から 63 まで）。十進法では、1バイトは2桁の十進数字で構成される（値は 0 から 99 まで）。5バイトと符号で1ワードが構成される。MIX 用プログラムの多くは二進法でも十進法でも動作する（1バイトに63より大きい値を格納しようとしない限り）。

1ワードで表せる範囲は、二進モードでは −1,073,741,823 から 1,073,741,823 まで（これらの値を含む）、十進モードでは −9,999,999,999 から 9,999,999,999 まで（これらの値を含む）である。符号-仮数表現であるため、MIX では “−0” と “+0” が表現上区別される。これは、現代のコンピュータの多くが固定長整数の表現に採用している2の補数表現とは大きく異なる点である（浮動小数点数の表現には現代のコンピュータでもよく使われている）。

レジスタ 
MIX ではレジスタは9本存在する。
 rA: アキュムレータ（1ワード、すなわち5バイトと符号）
 rX: 拡張レジスタ（1ワード）
 rI1, rI2, rI3, rI4, rI5, rI6: インデックスレジスタ（2バイトと符号）
 rJ: ジャンプアドレスレジスタ（2バイト。常に正なので符号なし）

バイトは最低でも6ビットで構成される。命令ではバイト単位にレジスタ上の操作位置を指定でき、(first:last) の形式で表される（命令の修飾部）。0番目のフィールドは1ビットの符号を指す。

MIX では、直前の操作によってオーバフローが発生したかどうかを記録するフィールドと、比較結果を3種類の値（大きい、等しい、小さい）で示すフィールドも持っている。以下の図では、各レジスタをフィールドに分割して表示している。

メモリと入出力 
MIXマシンには、4000ワードのストレージ（メモリ）があり、アドレスは 0 から 3999 までである。以下のような各種入出力機器も含まれる。
 磁気テープ装置（デバイス番号 0 から 7）
 磁気ディスクまたは磁気ドラム装置（デバイス番号 8 から 15）
 カードリーダ（デバイス番号 16）
 カードパンチ（デバイス番号 17）
 ラインプリンタ（デバイス番号 18）
 タイプライタ端末（デバイス番号 19）
 紙テープ装置（デバイス番号 20）

命令 
各命令はメモリ上の1ワードに格納され、4つの部分から構成される。メモリアドレス部（2バイトと符号ビット）、インデックス指定部（1バイト、rIx レジスタの番号を指定）、修飾部（1バイト）、命令コード（1バイト）である。修飾部はアドレス指定されたワード内のフィールド位置の指定に使われる。全ての命令コードにはニーモニックが対応している。

MIX では自己書き換えコードをよく使う。特にサブルーチンからの自動復帰機能（リターンスタック）が命令セット上考慮されていないので、その場合も自己書き換えコードを使う。自己書き換えの際には、命令の中の修飾部を駆使して、命令ワード内の特定の部分だけを書き換える（例えば、アドレス部だけを書き換えるなどする）。

MIXプログラムを書く場合、MIXAL というアセンブリ言語を使う。

なお、シフト命令を見てもわかるとおり、MIXではバイトの内部構造が影響するような命令を持たない（例えばビット演算）。このため、二進法でも十進法でも同じプログラムが動作するのである。

注

外部リンク 
MMIX 2009: A RISC Computer for the Third Millennium クヌースの公式MIXページ
MMIX News クヌースの公式MIXニュース
MMIXware: A RISC Computer for the Third Millennium クヌースの公式MIX本
Open Directory: Computers: Programming: Languages: Assembly: MIX-MMIX MIX-MMIX/MIXAL-MMIXAL リンク集

抽象機械
プログラミング
教育ソフトウェア
ドナルド・クヌース