Belt machine とは

コンピュータエンジニアリングおよびプログラミング言語の実装では、ベルトマシンは、個々のマシンプロセッサレジスタではなく先入れ先出し(FIFO)キューを使用してプログラム内の各部分式を評価する、実際のまたはエミュレートされたコンピュータです。ベルトコンピュータは、引数を明示的に指定するが暗黙的に結果を出力する命令セットを用いてプログラムされる。
ベルト機械の一般的な代替はレジスタマシンであり、各命令はオペランドの引数と結果の位置に使用する特定のレジスタを明示的に指定します。ベルトマシンは、プッシュダウンスタックを暗黙的に使用する引数と結果の両方を指定するスタックマシンに関連しています。他の選択肢は、目に見える一時レジスタを有するアキュムレータ・マシンと、目に見える一時レジスタを持たないメモリ – メモリ・マシンとである。
ベルトマシーンは、コンベアベルトに類推して、固定長のFIFOキューまたはベルトを備えた一時的なストレージを実装します。算術論理ユニット(ALU)および他の機能ユニットのオペランドは、ベルト上の任意の位置から取得され、計算結果はベルトの前方位置に落とされ(格納され)、ベルトを前進させて余裕を持たせる。ベルトが固定された長さであるため、前面の液滴は、背中から落ちる古いオペランドによってマッチします。プッシュオフされたオペランドはアクセス不能になり、後で作業するために必要な場合は明示的に保存する必要があります。命令セットのほとんどの動作は、データレジスタまたはメインメモリセルではなく、ベルト上のデータでのみ機能します。
addのような一般的な命令の場合、両方の引数オペランドがベルト上の明示的に指定された位置から来て、その結果が前面にドロップされ、次の命令の準備が整います。複数の結果を持つ操作では、ベルトの前面に多くの値がドロップされます。ほとんどのベルト命令は、結果レジスタ、メモリアドレス、またはリテラル定数を指定するためのフィールドを追加せずに、オペレーションコード(opcode)と2つのベルト位置としてのみエンコードされます。このエンコーディングは、2つ以上の入力または複数の結果でより豊かな操作に容易に拡張されます。定数オペランドは、別々のロード即値命令によってドロップされます。主ランダムアクセスメモリ(RAM)におけるプログラム変数の全てのアクセスは、1つのメモリアドレスを含む別々のロード命令またはストア命令に分離されるか、ベルトオペランドからそのアドレスを計算する何らかの方法で分離される。
すべてのベルトマシンには、ローカル変数とヒープにアクセスするためのロード/ストアオペコードのバリアントがあります。これはオフセット、ベルト上のポインタ、またはさまざまな専用ベースレジスタから行うことができます。同様に、ベルトから取り出された住所に分岐するための命令と、プログラムカウンタに対する分岐とがある。