MIPS to C Translation
Solution 1
sw $t1, 0($t0) # $t0 = A[0]
You've got this back-to-front. It is a store, so it is used:
sw $t1, 0($t0) # A[1] = $t1
Solution 2
I think you have got in completely wrong.
addi $t0, $s6, 4 # $t0 = A[1]
After the addi, register $t0
became the memory address of A[1], which would be &A[1]
, not A[1]
. To get value of A[1], you need to use lw
after you done the addi
lw $t0, 0($t0) # $t0 =A[1]
Solution 3
Just a little addition to the previous answers:
The store word means that you cannot access $t1 anymore because it is copied to memory. At least you should not use the $t1 from the store word instruction. You should use the one before (add $t1, $s6, $0
). This means that the answer is f ( which is in $s0) = &A[0] (base address in register $t1) + A[1] (value of the array with word index 1, which is in register $t0)
Solution 4
Mnush's answer is incorrect.
The last line is adding $t1 and $t0.
$t1 = A[0] and
$t0 = A[1].
With proper comments:
addi $t0, $s6, 4 # $t0 = &A[1]
add $t1, $s6, $0 # $t1 = &A[0]
sw $t1, 0($t0) # A[0] = A[1]
lw $t0, 0($t0) # $t0 = A[0]
add $s0, $t1, $t0 # f = A[0] + A[1]
The C Code:
A[1] = A[0];
f = A[0] + A[1];
Solution 5
Actually you are using A[1] twice as shown:
Register $t0 carries the address of the array from the first instruction
sw $t1, 0($t0) # A[1] = $t1 => A[1] = &A[0]
Load the value of the address ($t0 + 0) into register $t0
lw $t0, 0($t0) # $t0 = A[1]
Essentialy =>
$t0 = &A[0]
user2789564
Updated on June 04, 2022Comments
-
user2789564 almost 2 years
I need to translate some MIPS assembly instructions to C code. I think I got it, but it seems counter-intuitive. Any help? We have variables f, g, h, i, j stored in registers $s0, $s1, $s2, $s3 and $s4 respectively. The base of arrays A and B are stored in $s6 and $s7 respectively. 4 byte words. Comments in the code are my own.
addi $t0, $s6, 4 # $t0 = A[1] add $t1, $s6, $0 # $t1 = A[0] sw $t1, 0($t0) # $t0 = A[0] lw $t0, 0($t0) # $t0 = A[0] add $s0, $t1, $t0 # f = A[0] + A[0]
I just feel like I'm wrong. Why make $t0 A[1] first if we never use it?