allocate-registers zero one ten result cont savecont tmp n jump-register sp last-digit ;; Main program li one 1 li ten 10 li result 0 read n li cont after-done li jump-register castnines j jump-register after-done: write result halt ;; Procedure castnines (iterative) castnines: st cont sp ;; save cont to stack (though could have saved to register) add sp sp one li cont castnines-cont ;; procedure call to sumdigits li jump-register sumdigits j jump-register castnines-cont: sub sp sp one ;; restore cont from stack ld cont sp add n zero result ;; loop if not done slt tmp n ten li jump-register castnines jeqz tmp jump-register j cont ;; return ;; Procedure castnines (recursive) sumdigits: li result 0 ;; One way of handling the base case jeqz n cont rem last-digit n ten div n n ten st last-digit sp ;; save last-digit and cont to stack add sp sp one st cont sp add sp sp one li cont sumdigits-cont ;; recursive procedure call li jump-register sumdigits j jump-register sumdigits-cont: sub sp sp one ;; restore last-digit and cont from stack ld cont sp sub sp sp one ld last-digit sp add result last-digit result ;; calculate result j cont ;; return