Here is the code we wrote today:
#implementation of multichoose funciton
.text
#read n
addi $v0, $zero, 5
syscall
addi $a0, $v0, 0
#read k
addi $v0, $zero, 5
syscall
add $a1, $zero, $v0
jal multichoose
#print return value
add $a0, $v0, $zero
addi $v0, $zero, 1
syscall
#exit
addi $v0, $zero, 10
syscall
multichoose: #n is a0, k is a1
addi $sp, $sp, -16
sw $ra, ($sp)
sw $s0, 4($sp)
sw $s1, 8($sp)
sw $s2, 12($sp)
#if(k == 1) return n;
addi $t0, $zero, 1
bne $a1, $t0, checkn
add $v0, $a0, $zero
b return
checkn: #if(n == 1) return 1;
bne $a0, $t0, recurse
addi $v0, $t0, 0
b return
recurse: #int val1 = multichoose(n-1, k);
add $s0, $zero, $a0 #n is $s0
add $s1, $zero, $a1 #k is $s1
addi $a0, $a0, -1
#k is already in $n1
jal multichoose
addi $s2, $v0, 0 #val1 is $s2
#int val2 = multichoose(n, k-1);
addi $a0, $s0, 0
addi $a1, $s1, -1
jal multichoose
add $v0, $s2, $v0 #return val1 + val2;
return:
lw $ra, ($sp)
lw $s0, 4($sp)
lw $s1, 8($sp)
lw $s2, 12($sp)
addi $sp, $sp, 16
jr $ra