Here is the code we wrote today:
addi $a0, $zero, 4 jal fact add $a0, $zero, $v0 #print return value addi $v0, $zero, 1 syscall addi $v0, $zero, 10 #exit system call syscall fact: #int fact(int n) #n is a0 addi $sp, $sp, -8 sw $ra, ($sp) sw $s0, 4($sp) addi $t0, $zero, 2 #if(n < 2) bge $a0, $t0, body li $v0, 1 # return 1; b return body: add $s0, $a0, $zero addi $a0, $a0, -1 #int val = n * fact(n-1); jal fact mulo $v0, $s0, $v0 #return val; previous instruction already puts it into $v0 return: lw $ra, ($sp) lw $s0, 4($sp) addi $sp, $sp, 8 jr $ra