;; This program reads in a number n and prints out ;; the sum of its digits, calculated recursively ;; like in the following scheme procedure. ;; ;;(define sod ;; (lambda (n) ;; (if (< n 10) ;; n ;; (+ (sod (quotient n 10)) ;; (remainder n 10))))) ;; ;; Date Written: 2008/02/20 ;; Author: Peter Dierauer allocate-registers sod, n, base-case, result, sp, zero, one, ten, cont, compare, remainder li sod Lsod li base-case Lbase-case li sp 0 li zero 0 li one 1 li ten 10 read n li cont Lhere j sod Lhere: write result halt Lsod: sge compare n ten jeqz compare base-case ;; save my context st n sp add sp sp one st cont sp add sp sp one ;; make recursive call li cont Lback quo n n ten j sod Lback: ;; retrieve my context sub sp sp one ld cont sp sub sp sp one ld n sp rem remainder n ten add result result remainder j cont Lbase-case: add result n zero j cont