3
Universal Machineエミュレーターを実装する
目標は、最短コードでICFP 2006のユニバーサルマシンをエミュレートする完全なプログラムを作成することです。Universal Machineには、ここで説明する非常に単純な命令セットがあります。エミュレータはコマンドライン引数からファイル名を読み取り、プログラムとしてファイルを実行する必要があるため、言語は何らかの方法でコマンドライン引数と標準入力/出力をサポートする必要があります。エミュレータは、妥当な時間内(数十年以内)にサンドマークを完了する必要があります。命令セットの簡単な説明を次に示します。 マシンには8つのレジスタがあり、それぞれが32ビットの符号なし整数を保持しています。 マシンは、32ビットの符号なし整数セルの配列のインデックス付きセットを保持します。 簡単に言えば、割り当て命令は不透明な32ビットuintを返します。これは、作成された配列へのハンドルであり、静的サイズを持ち、32ビットuint要素を保持します。 0番目の配列はプログラムを示します。起動時にビッグエンディアンファイルから読み込まれます。 0配列のセルを指す命令ポインターもあります。 各ステップで、ポインターが指すセルから命令が読み取られ、ポインターは何かが実行される前に確認されます。 最上位4ビットはオペコードを表します。 オペコードが13の場合、次の3ビットはレジスタを表し、残りの25ビットはそのレジスタに書き込まれる番号を表します。 それ以外の場合、9つの最下位ビットは3つのレジスタ、たとえばA、B、およびCを表します。Cは3つの最下位ビットで表されます。 その後、オペコードに応じて、次のようになります 。0 = C == 0でない限りA = B 1. A = B [C] 2. A [B] = C 3. A = B + C 4. A = B * C 5. A = B / C 6. A …