MMIX
MMIX(エムミックス)は、ドナルド・クヌースがジョン・ヘネシー(MIPSプロセッサ設計者)や Dick Sites(Alphaプロセッサ設計者)の協力を得て設計した命令セット(命令セットアーキテクチャ、ISA)である。コンピュータプログラミングの「Art」を記している大著The Art of Computer Programming (TAoCP) において使用していた「MIX」の代替となるべく設計され、現代的な特徴を持つ。当命令セットを設計した後に執筆・改訂の TAoCP にて既に使用されている。
"MMIX" という綴りはローマ数字として解釈すると2009であり、前任のMIXの頭にMを付けたものであると同時に、2000年代のコンピュータ(プロセッサ)という意味を掛けているものと思われる(とはいえ、MIXの時の「実在のコンピュータ 16 種の型番から取って平均した」値の1009である、という主張にはかなりこじつけの気配があったのと同様、特に意味があるものではない)。
ブートストラップレジスタ(トリップ)
トリップ時、rB ← $255 および $255 ← rJ が行われる。 従って rJ が汎用レジスタにセーブされる。
トラップアドレスレジスタ
トラップハンドラのアドレス
Zオペランド(トリップ)
トリップ時、現在の命令のZオペランドを保持。
動的トラップアドレスレジスタ
外部割込み時のトラップハンドラアドレス
ローカルレジスタスタックはレジスタ・ウィンドウに似ているが、具体的な実装方式は定義されておらず、あくまでもユーザーから見た見え方のみが定義されている。ローカルレジスタスタックを使用すると、各サブルーチンは $0 から $(rL-1) までをローカルレジスタとして持つ(rLレジスタは専用レジスタ)。どちらでもない汎用レジスタはマージナルレジスタと呼ばれる。マージナルレジスタをオペランドに使用すると自動的にそのレジスタまでがローカルレジスタとなる(入力オペランドとして使用すると、値は 0)。例えば、ルーチン A が $0 から $4 までをローカルレジスタに使用していて、引数を2つ持つルーチン B を呼び出す場合、$5 をルーチン B の結果格納域とし、$6 と $7 に引数を設定してルーチンBを呼び出す。そうするとルーチンBでは$6だった物理レジスタが $0、$7だった物理レジスタが $1 として見えるようになる。ルーチン B のリターン値を $0 に格納してルーチン A に戻ると、ルーチンA からは $5 にそのリターン値が見えることになる($0 から $4 は B を呼び出す前と同じものが復帰している)。物理レジスタには限りがあるため、全コールスタックをレジスタに保持することはできない。スタック内容のレジスタからメモリへの移動(またはその逆)は自動的に行われ、rO レジスタと rS レジスタがメモリ上のスタックとレジスタスタックの関連付けを行う。