;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; We implement this python program: ;; ;; def fact(n): ;; if n == 0: ;; return 1 ;; return fact(n-1) * n ;; ;; n = input() ;; print(fact(n)) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; allocate-registers n cont result fact allocate-registers zero one recurse after-recurse test sp li sp 0 li result 1 li zero 0 li one 1 li recurse recurseL li after-recurse after-recurseL li fact factL read n li cont after-callL li fact factL j fact after-callL: write result halt ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Compute the factorial of n ;; ;; input register: n ;; ;; cont register: cont ;; ;; output register: result ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; factL: seq test n zero jeqz test recurse li result 1 j cont recurseL: ;; begin saving context st n sp add sp sp one st cont sp add sp sp one ;; end saving context li cont after-recurseL sub n n one j fact after-recurseL: ;; begin retrieving context sub sp sp one ld cont sp sub sp sp one ld n sp ;; end retrieving context mul result result n j cont