;Exam2012H24FallPrg3
;Exam2012H24秋Prg3 再帰処理
;-------------------------
;F(X, N)=X x F(X, N-1) + 1 (N >= 1)
;------------------
MAIN START
	LD GR1,N ;　
	LD GR2,X ;　
	CALL POLY2
	ST GR0,ANS
	RET
X DC 3
N DC 4
ANS DS 1 ;　
	END
;-------------------
POLY2 START
	RPUSH
	CALL RSUB ;再帰処理の本体を呼ぶ
	RPOP
	RET ;主プログラムへ戻る
RSUB LD GR1,GR1 ; N=0 ?
	JNZ CONT ; Nでないならば CONT へ
	LD GR0,=1 ;GR0 <--- F(X, 0)の値（==1）
	RET
CONT LAD GR1,-1,GR1 ; N-1         答え　ア
	CALL RSUB ;　F(X, N-1)を計算
	CALL MULT
	ADDL GR0,=1
	RET
	END
;---------------------
MULT START
	RPUSH
	LD GR1,GR0
	LD GR0,=0   ;乗算結果の初期化
	LD GR2,GR2  ;乗数GR2はゼロであるか？
LP	JZE FIN ;答え　カ
;乗数GR2が右論理シフトの結果ゼロになれば終了
	LD GR3,GR2
	AND GR3,=#0001 ; 最下位ビットのチェック
	JZE CONT
	ADDL GR0,GR1
CONT SLL GR1,1 ; 答え　エ
	SRL GR2,1
	JUMP LP
FIN RPOP
	RET
	END
;----------------
 