1

所以我试图将这个 MIPS 汇编代码翻译成 C。我对正在发生的事情的某个部分感到困惑。这是 MIPS 汇编代码:假设我们有变量 f、g、h、i、j 分别存储在 $s0、$s1、$s2、$s3 和 $s4 中。假设数组 A 和 B 的基地址分别为 $s6 和 $s7,它们包含 4 个字节的字。我插入了评论以表明我了解其中的大部分内容。

sll  $t0, $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    <-- Here's where I am confused. Since $t0 contains the address of A[f], what does adding 4 do to that?

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

1 回答 1

3

它看起来像计算指向 A 数组下一个元素的指针,一行之后你从这个地址加载数据。假设在 C 中:

Word4Byte A[],B[];
B[g] = A[f] + A[f+1];
于 2013-09-17T23:29:28.570 回答