# An example of a recursive function main: #int main() #{ # int max; # print("Enter +ve integer: "); # scanf("%d", &max); **** # int tmp = sumTo(max); # printf("Sum 1..%d = %d\n", max, tmp); *** # return 0; #} #prolog push $ra push $s0 li $v0, 4 # print("Enter +ve integer: "); la $a0, ask syscall li $v0, 5 # scanf("%d", &max); syscall move $s0, $v0 # I need max after the function call # I need to store it safely move $a0, $v0 jal sumTo # sumTo(max); move $t0, $v0 # tmp = sumTo(max) li $v0, 4 # printf("Sum 1..") la $a0, out1 syscall li $v0, 1 # printf(max) move $a0, $s0 syscall li $v0, 4 # printf(" = ") la $a0, out2 syscall li $v0, 1 # printf(tmp) move $a0, $t0 syscall li $v0, 11 # printf("\n") li $a0, '\n' syscall li $v0, 0 #epilog pop $s0 pop $ra jr $ra #$v0 $a0 #int sumTo(int n) { # if(n == 0){ # return 0; # } # tmp = sumTo(n-1) # return n + tmp; #} sumTo: push $ra push $s0 move $s0, $a0 # $s0 = n bnez $s0, else # if(n != 0) goto else li $v0, 0 # returnValue = 0 j epilog else: addi $a0, $s0, -1 # $a0 = n - 1 jal sumTo # $v0 = sumTo(n-1) add $v0, $s0, $v0 # returnValue = n + $v0 epilog: pop $s0 pop $ra jr $ra .data ask: .asciiz "Enter +ve integer: " out1: .asciiz "Sum 1.." out2: .asciiz " = "