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