トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

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 

ネタ元

http://retroforth.org/docs/The_Ngaro_Virtual_Machine.html

http://www.h7.dion.ne.jp/~samwyn/forth/Ngaro.html