.globl fac3 fac3: li $t0, 1 # check for base case bgt $a0, $t0, recurse li $v0, 1 # if so, set return value jr $ra # and return recurse: addi $sp, $sp, -8 # make room on stack for sw $ra, 4($sp) # return address, and sw $a0, 0($sp) # N addi $a0, $a0, -1 # calc N-1 for recursive call jal fac3 # calc (N-1)! lw $t1, 0($sp) # restore N from stack mul $v0, $v0, $t1 # multiply (N-1)! by N lw $ra, 4($sp) # restore return address from stack addi $sp, $sp, 8 # and restore stack pointer jr $ra # and return