label fac
// recursive factorial routine
lim result 1
// basis is 1
jlte return arg zero // return if count is 0 or
less
aim
stack_pointer +1 // increment stack pointer
store stack_pointer return // save return address on stack
aim
stack_pointer +1 // increment stack pointer
store stack_pointer arg // save argument on stack
aim arg -1
// subtract 1 from argument
jsub jump_target return // call recursively
load arg stack_pointer // restore original argument
aim
stack_pointer -1
load return stack_pointer // restore original return address
aim
stack_pointer -1
mul
result result arg // multiply by original arg
junc return
// return to caller