Question: Convert the C code to MIPS. recursion 1 . c: #include int recursion ( int m ) { if ( m = = - 1

Convert the C code to MIPS.
recursion1.c:
#include
int recursion(int m){
if(m ==-1)
return 3;
else if(m <=-2){
if (m <-2)
return 2;
else
return 1;
}
else
return recursion(m -3)+ m + recursion(m -2);
}
int main(){
int x;
printf("Please enter a number: ");
scanf("%d", &x);
printf("%d", recursion(x));
return 0;
}
Attempted MIPS code (always returns 4 no matter what input):
.data
prompt: .asciiz "Please enter a number: "
result: .asciiz "The result is: "
.text
main:
li $v0,4 # syscall for print string
la $a0, prompt
syscall
li $v0,5 # syscall for read int
syscall
move $a0, $v0 # move read integer to $a0 for recursion
jal recursion # Call recursion with input x
li $v0,4 # syscall for print string
la $a0, result
syscall
move $a0, $v0 # Move result to $a0 for printing
li $v0,1 # syscall for print int
syscall
li $v0,10 # syscall to exit
syscall
recursion:
addi $sp, $sp,-16 # stack frame for 4 variables
sw $ra,12($sp) # save return address
sw $a0,8($sp) # save original m
# Base cases
li $v0,3 # return value for m ==-1
beq $a0,-1, finish
li $v0,2 # return value for m ==-2
beq $a0,-2, finish
li $v0,1 # return value for m <-2
blt $a0,-2, finish
# Recursive case for m >-1
addi $a0, $a0,-3
jal recursion
sw $v0,4($sp) # Store result of recursion(m -3)
lw $a0,8($sp) # Restore original m
addi $a0, $a0,-2
jal recursion # Recurse with m -2
lw $t0,8($sp) # Load original m
lw $t1,4($sp) # Load result of recursion(m -3)
add $v0, $v0, $t1 # Add results of recursion(m -2) and recursion(m -3)
add $v0, $v0, $t0 # Add m to sum
finish:
lw $ra,12($sp) # Restore return address
addi $sp, $sp,16 # Restore stack pointer
jr $ra

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Accounting Questions!