# A live coding example done as a recap on functions. # This has a recursive function .data msg_sum1: .asciiz "Sum 1.. " msg_sum2: .asciiz " = " .text main: main__prologue: push $ra push $s0 main__body: li $s0, 10 # int max = 10; move $a0, $s0 # int max = 10; jal sum_to # result = sum_to(max); move $t0, $v0 # $t0 = result li $v0, 4 # printf("Sum 1.. "); la $a0, msg_sum1 syscall li $v0, 1 # printf("%d",max); move $a0, $s0 syscall li $v0, 4 # printf(" = "); la $a0, msg_sum2 syscall li $v0, 1 # printf("%d", result); move $a0, $t0 syscall li $v0, 11 # putchar('\n') li $a0, '\n' syscall li $v0, 0 main__epilog: pop $s0 pop $ra jr $ra sum_to: # We move our input n from $a0 to $s0 # We need to do this as $a0 will be modified # so we need to store n somewhere safe # as we need to use it again in the last line of # the function. sum_to__prologue: push $ra push $s0 sum_to__body: move $s0, $a0 # n $s0 sum_to_if: bnez $s0, sum_to_else # if(n == 0) li $v0, 0 # return 0 j sum_to__epilog sum_to_else: sub $a0, $s0, 1 # n - 1 jal sum_to # int result = sum_to(n-1); add $v0, $v0, $s0 sum_to_if_end: sum_to__epilog: pop $s0 pop $ra jr $ra