RAC1 (Rudimentary Arithmetic Calculator Level-1) サンプル

2 + 3 を計算する

	CONST, 2,
	CONST, 3,
	ADD, 
	EXIT

結果:

x2 + y2 を計算する

	REF, "x",
	DUP,
	MUL,
	REF, "y",
	DUP,
	MUL,
	ADD,
	EXIT
xの値(整数):
yの値(整数):

結果:

スタックトップの絶対値を求める

        DUP,
	CONST, 0,
	LT,
	IFT, "Neg",
	EXIT,

	$$$, "Neg",
	CONST, 0,
	XCHG,
	SUB,
	EXIT
スタックトップの値(整数):

結果:

スタックトップの階乗を計算する

	DUP,
	CONST, 1,
	LT,
	IFT, "Error",
	// 準備
	ASSIGN, "k",

	// 計算開始
	$$$, "Start",
	REF, "k",
	CONST, 1,
	SUB,
	DUP,
	CONST, 0,
	// N, k-1,  k-1, 0
	EQ,
	IFT, "End",
	// N, k-1
	ASSIGN, "k", // k := k - 1
	MUL, // N*(k-1),
	JMP, "Start",
		
	$$$, "Error",
	ERROR, "NonPositiveArgument",

	$$$, "End",
	DISCARD,
	EXIT
スタックトップの値(整数):

結果:

変数 n, m の最大公約数を求める

	$$$, "ConfirmArgs",
	REF, "m",
	REF, "n",
	LT,
	NOT,
	IFT, "Check",
	ERROR, "BadArgument",

	$$$, "Check",
	REF, "n",
	CONST, 0,
	EQ,
	IFT, "End",

	$$$, "DoStep",
	REF, "m",
	REF, "n",
	ASSIGN, "x",
	REM,
	ASSIGN, "n",
	DISCARD,
	REF, "x",
	ASSIGN, "m",
	DISCARD,
	JMP, "Check",

	$$$, "End",
	REF, "m",
	  
	EXIT

n ≦ m でなくてはなりません。

nの値(整数):
mの値(整数):

結果:

サブルーチンを使って x22 + y22 を計算する

	REF, "x2",
	CALL, "sq",
	REF, "y2",
	CALL, "sq",
	ADD,
	EXIT,

	$$$, "sq",
	DUP,
	MUL,
	RET
x2の値(整数):
y2の値(整数):

結果:

fact(j) + fact(k) を計算する

	REF, "j",
	CALL, "fact",
	REF, "k",
	CALL, "fact",
	ADD,
	EXIT,

	$$$, "fact",
	ALLOC, "k", // ローカル変数
	DUP,
	CONST, 1,
	LT,
	IFT, "Error",
	ASSIGN, "k",

	// 計算開始
	$$$, "Start",
	REF, "k",
	CONST, 1,
	SUB,
	DUP,
	CONST, 0,
	EQ,
	IFT, "End",
	ASSIGN, "k",
	MUL,
	JMP, "Start",
		
	$$$, "Error",
	ERROR, "NonPositiveArgument",

	$$$, "End",
	DISCARD,
	RET
jの値(整数):
kの値(整数):

結果: