# A live coding example done as a recap on functions. # This has a simple function with 1 parameter and a return value .text main: main__prologue: begin push $ra push $s0 main__body: li $s0, 10 # int max = 10 move $a0, $s0 jal sum_to move $t2, $v0 #result li $v0, 4 la $a0, msg_sum1 # printf("Sum 1.. "); syscall li $t1, 10 # int max = 10 li $v0, 1 move $a0, $t1 # printf("%d", max); syscall li $v0, 11 la $a0, ' ' syscall li $v0, 11 la $a0, '=' syscall li $v0, 11 la $a0, ' ' syscall li $v0, 1 move $a0, $t2 syscall #TODO # printf("%d", sum); li $v0, 11 # putchar('\n'); li $a0, '\n' syscall li $v0, 0 # return 0; main__epilog: pop $s0 pop $ra end jr $ra ################################################ sum_to: sum_to_prologue: begin push $ra push $s0 sum_to_body: move $t2, $a0 # int n li $t0, 0 # int sum = 0; li $t1, 1 # int i = 1; sum_to_loop_cond: bgt $t1, $t2, sum_to_loop_end add $t0, $t0, $t1 # sum = sum + 1 addi $t1, 1 b sum_to_loop_cond sum_to_loop_end: move $v0, $t0 #return sum; sum_to_epilogue: pop $s0 pop $ra end jr $ra .data msg_sum1: .asciiz "Sum 1.. " msg_sum2: .asciiz " = "