Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I need help with the following MIPS machine assembly code question (translate fr

ID: 3585667 • Letter: I

Question

I need help with the following MIPS machine assembly code question (translate from C to MIPS machine assembly code):

Implement the following C code in MIPS assembly.

int verify (int n) {

     if (n <= 2) {

          return n;

     else

          return n –verify(n-1)*verify(n-2);

     }

#SIMILAR PROBLEM BELOW:

Implement the following C code in MIPS assembly.

int square (int n) {

     if (n <= 2) {

         return n*n;

     else

         return n*n + square (n – 1)+square(n – 2);

     }

fib: addi $sp, $sp, -12    # make room on stack

sw $ra, 8($sp)         # push $ra

sw $s0, 4($sp)         # push $s0

sw $a0, 0($sp)         # push $a0 (N)

bgt $a0, $0, cont      # if n>0, test if n=1

add $v0, $0, $0        # else fib(0) = 0

j rtn                  #

cont: addi $t0, $0, 1      #

bne $t0, $a0, cal      # if n>1, gen

add $v0, $0, $t0       # else fib(1) = 1

j rtn

cal: subi $a0, $a0,1       # n-1

jal fib                # call fib(n-1)

add $s0, $v0, $0       # copy fib(n-1)

sub $a0, $a0,1         # n-2

jal fib                # call fib(n-2)

add $v0, $v0, $s0      # fib(n-1)+fib(n-2)

rtn: lw $a0, 0($sp)        # pop $a0

lw $s0, 4($sp)         # pop $s0

lw $ra, 8($sp)         # pop $ra

addi $sp, $sp, 12      # restore sp

jr $ra

Explanation / Answer

verify: addi $sp, $sp, -12 # Adjust sp

addi $t0, $a0, -1 # Compute n-1

addi $t1, $a0, -2 # Compute n-2

sw $t0, 0($sp) # Save n-1 to stack

sw $t1, 4($sp) # Save n-2 to stack

sw $ra, 8($sp) # Save return address

slt $r1, 2, $a0 # check if 2 < n if true $r1 = 1 else $r1 = 0

beq $r1, 1, ELSE # branch ( 2 < n )

li $v0, $a0 # Set return value to n

addi $sp, $sp, 12 # Adjust sp

jr $ra # Return

ELSE: move $a0, $t0 # update n to n-1  

jal verify # call verify with n-1

sw $v0, 0($sp) # save the result of verify(n-1) to stack

lw $t0, 4($sp) # Restore n - 2 from stack

move $a0, $t0 # update n to n-2

jal verify # call verify with n-2

lw $t1, 0($sp) # Restore result of verify(n-1) from stack

mult $v0, $t1 # Multiple result of verify(n-1) with verify(n-2)

mflo $t2 # Put result in t2

lw $t0, 4($sp) # Restore n - 2 from stack

addi $t0, $t0, 2 # add 2 to n-2 to get n

sub $v0, $t0, $t2 # subtract result t2 from n

lw $ra, 8($sp) # restore return address from stack

addi $sp, $sp, 12 # Adjust sp

jr $ra # Return