トップ 一覧 検索 ヘルプ 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