;; This program reads in a nonnegative integer n and ;; calculates the sum 1 + 2 + ... + n using recursion, ;; then prints it out. allocate-registers n ; input allocate-registers result ; output allocate-registers zero one ; constants allocate-registers sp ; stack pointer allocate-registers cont ; continuation register allocate-registers sum2n after-recursion recursive-case ; label registers allocate-registers test ; temporary li zero 0 li one 1 li sum2n Lsum2n li recursive-case Lrecursive-case li after-recursion Lafter-recursion li sp 0 read n li cont Ldone j sum2n Ldone: write result halt ;; For input number in register n, this subroutine computes 1 + 2 + ... + n ;; and returns it in register result. ;; ;; Preconditions: ;; register n conains the input nonnegative integer ;; register cont contains the return address ;; ;; Postcondition: ;; register result contains the value of 1 + 2 + ... + n ;; ;; Registers used: ;; n - input ;; result - output Lsum2n: seq test n zero jeqz test recursive-case li result 0 j cont Lrecursive-case: st n sp add sp sp one st cont sp add sp sp one sub n n one li cont Lafter-recursion j sum2n Lafter-recursion: sub sp sp one ld cont sp sub sp sp one ld n sp add result result n j cont