0
addi $s7, $s7, -4
add  $s7, $s7, $s1
lw   $s0, 4($s7)

假设整数变量 i 和 j 在寄存器 $s0 和 $s1 中。假设整数数组 X 的基地址在寄存器 $s7 中。

到目前为止,我有这个:

X = X - 4
X = X + j
i = X - 4 + j

这个对吗?我不太确定,所以只是在寻找确认。

4

2 回答 2

4

这是不正确的。请注意,lw指令从内存中读取一个字。

在 C 中,它看起来像

  //int *x;
  x--;            // addi $s7, $s7, -4 decrements pointer to x one element
  x = (int*)((char*)x + j);  // add $s7, $s7, $s1 increments the address pointed by x j elements
  i = *(x+1);     // lw $s0, 4($s7) reads the next element pointed by x

OP评论后的附录:

如果j = $s7是 4 的倍数(注意每个整数占用 4 个字节),那么它可以在 C 中重写为i = x[j/4].

于 2013-04-02T19:45:56.967 回答
0

lw-->加载字

语法:lw $t, offset($s) 操作:$t = MEM[$s + offset]; Advance_pc (4);

于 2013-04-02T20:10:15.400 回答