.text # do fact(3) li $a0,3 jal fact # print the return value (the result of factorial) add $a0,$v0,$0 li $v0,1 syscall # exit the program li $v0,10 syscall fact: # push activation frame addi $sp,$sp,-8 sw $s0,0($sp) sw $ra,4($sp) # set $v0 to 1 in case we have N==0 li $v0,1 # save copy of argument N add $s0,$a0,$0 # test for fact(0) beq $a0,$0,fact_exit # call fact(N-1) addi $a0,$a0,-1 jal fact # multiply fact(N-1)*N mul $v0,$s0,$v0 fact_exit: # pop activation frame lw $s0,0($sp) lw $ra,4($sp) addi $sp,$sp,8 jr $ra