1

Translate the following MIPS code 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.

addi $t0, $s6, 4
add $t1, $s6, $0
sw $t1, 0($t0)
lw $t0, 0($t0)
add $s0, $t1, $t0

that was problem, and this is my think:

t0 = A+4;     //t0=&A[1]
t1 = A;        //t1=&A[0]
*t0 = t1;       //A[1]=&A[0]
t0 = *t0;       //t0=A[1]=&A[0]
s0 = t1+t0;    //f=&A[0]+&A[0]

In my answer, pointer+pointer might be awkward so i confuse what is wrong.
am i right? or something wrong?

Peter Cordes
  • 328,167
  • 45
  • 605
  • 847
Blasted99
  • 11
  • 1
  • 1
    I think you got it right, this code really is adding two pointers. That normally makes no sense. To actually express it in C, you can write `(intptr_t)&A[0] + (intptr_t)&A[0]`. (Notice I used signed `intptr_t` so overflow will be UB, because MIPS `add` traps on signed overflow. Compilers always use `addu` even for signed integer math.) – Peter Cordes Mar 25 '21 at 00:48
  • Exact duplicate of [How to understand this basic Assembly Code?](https://stackoverflow.com/q/63891264), although it's unanswered because they also got it right. It's the asm that's weird/wrong, not your thinking :/ – Peter Cordes Mar 25 '21 at 03:10
  • Maybe you are right. What is the source of this problem? – night_owl Mar 25 '21 at 04:12

0 Answers0