;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Here is a slim program that computes the sum of the digits ;; of a non-negative integer n into result ;; allocate-registers n result continue sp decision remainder allocate-registers zero one ten allocate-registers digit-sum base-case li zero 0 li one 1 li ten 10 li sp 0 li digit-sum digit-sum-label li base-case base-case-label read n li continue end-label digit-sum-label: sge decision n ten jeqz decision base-case ;; save registers st n sp add sp sp one st continue sp add sp sp one ;; prepare for recursive call quo n n ten li continue after-recursive-call-label ;; make recursive call j digit-sum after-recursive-call-label: ;; restore registers sub sp sp one ld continue sp sub sp sp one ld n sp ;; use recursive result to compute sum-of-digits into result rem remainder n ten add result result remainder ;; jump where you are supposed to jump j continue base-case-label: add result n zero j continue end-label: write result halt