PRG-ngaro
Ngaro 命令セット
スタックマシンの
| コード値 | 名前 | 説明 | |
|---|---|---|---|
| 000 | nop | 何もしない | |
| 001 | lit | スタックに値を積む。値は次のメモリ単位位置から取る | |
| 002 | dup | TOS (訳注: スタックのトップ要素) を複製してスタックに積む | |
| 003 | drop | TOS を捨てる | |
| 004 | swap | TOS と NOS (訳注: TOS のすぐ下の要素) を入れ替える | |
| 005 | push | 値をデータスタックからリターンスタックへ移す | |
| 006 | pop | 値をリターンスタックからデータスタックへ移す | |
| 007 | call | サブルーチンを呼び出す。サブルーチンのアドレスは次のメモリ単位位置から取る (訳注: リターンスタックにリターンアドレスを積む) | |
| 008 | jump | 新しいアドレスへジャンプする。アドレスは次のメモリ単位位置から取る | |
| 009 | return | サブルーチンを終えて呼び出し元へ戻る (訳注: リターンスタックトップを捨てる) | |
| 010 | gt_jump | NOS が TOS より大きければジャンプする。アドレスは次のメモリ単位位置から取る | |
| 011 | lt_jump | NOS が TOS より小さければジャンプする。アドレスは次のメモリ単位位置から取る | |
| 012 | ne_jump | TOS と NOS が等しくなければジャンプする。アドレスは次のメモリ単位位置から取る | |
| 013 | eq_jump | TOS と NOS が等しければジャンプする。アドレスは次のメモリ単位位置から取る | |
| 014 | fetch | TOS が指すアドレスに保持されている値を取得する | |
| 015 | store | TOS が指すアドレスに NOS を保存する | |
| 016 | add | TOS に NOS を足す | |
| 017 | subtract | TOS から NOS を引く | |
| 018 | multiply | TOS に NOS を掛ける | |
| 019 | divmod | NOS を TOS で除算して TOS に商、NOS に余りを置く (訳注: 余りは C や Java のそれで、Scheme での remainder の方) | |
| 020 | and | ビット単位 AND | |
| 021 | or | ビット単位 OR | |
| 022 | xor | ビット単位 XOR | |
| 023 | shift_left | ビット列を左 (訳注: より大きい桁方向) へシフトする | |
| 024 | shift_right | ビット列を右 (訳注: より小さい桁方向) へシフトする (訳注: 符号ビットをコピーする算術右シフト。ただし C による実装では C 処理系依存) | |
| 025 | zero_return | TOS が 0 なら呼び出し元へ戻り TOS を捨てる (訳注: リターンスタックトップも捨てる)。TOS が 0 なら何もしない | |
| 026 | inc | TOS に 1 を足す | |
| 027 | dec | TOS から 1 を引く | |
| 028 | in | スタックトップの要素が示す I/O ポートから値を 1 つ読み込みスタックトップに積む | |
| 029 | out | スタックトップの要素が示す I/O ポートへスタックトップの下の値を 1 つ書き込む | |
| 030 | wait | I/O イベントを待つ |
スタック
2 つのLIFOスタック Data Stack と Address Stack