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

The following problems deal with translating from MIPS to C. Assume that the var

ID: 3541778 • Letter: T

Question

The following problems deal with translating from MIPS to C. Assume that the variables f,g,h,i and j are assigned to registers $s0,$s1,$s2,$s3, and $s4 respectively. Assume that the base address of the arrays A and B are in registers $s6 and $s7 respectively.

a.

sll $s2 $s4 1

add $s0 $s4 $s3

add $s0 $s0 $s1


b.

sll $to, $s0, 2 # $t0 = f*4

add $t0, $s6, $t0 # $t0 = &A[f]

sll $t1, $s1, 2 # $t1= g*4

add $t1, $s7, $t1 # $t1 = &B[g]

lw $s0, 0($t0) # f = A[f]

addi $t2, $t0, 4

lw $t0, 0($t2)

add $t0, $t0, $s0

sw $t0, 0($t1)


1. For the MIPS assembly instructions in a and b above, what are the corresponding C statements?

2. For the MIPS assembly instructions in a and b above, rewrite the assembly code to minimize the number of MIPS instructions (if possible) needed to carry out the same function.

Explanation / Answer

please rate - thanks


a.

sll $s2 $s4 1                               h=j*2

add $s0 $s4 $s3                        f=j+i

add $s0 $s0 $s1                       f+=g       


b.

sll $to, $s0, 2                  # $t0 = f*4                                    

add $t0, $s6,$t0          # $t0 = &A[f]

sll $t1, $s1, 2                   # $t1= g*4

add $t1, $s7, $t1    # $t1 = &B[g]

lw $s0, 0($t0)                   # f = A[f]

addi $t2, $t0, 4                 # t2=t0+4

lw $t0, 0($t2)                     # t0=*t2

add $t0, $t0, $s0             # t0+=A[f]

sw $t0, 0($t1)                    # B[g]=t0


b[g]=a[f]+a[f+1]


rewritten

I don't see a better way

need to get the addresses, load them, to the addition, and then store, which is all this is doing