- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!! 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
! ネタ元
http://retroforth.org/docs/The_Ngaro_Virtual_Machine.html
http://www.h7.dion.ne.jp/~samwyn/forth/Ngaro.html