MIPS sw和lw问题

时间:2011-07-10 18:32:17

标签: computer-science mips

我已经看到在MIPS中使用sw和lw的示例中,指令看起来像这样。

lw $6, 0($4)

我的第一个问题是,0()做了什么?如果是6美元,4美元(4美元)怎么办?

我正在尝试在MARS mips程序中进行测试,但每当我执行程序时,lw和sw似乎都没有用任何值更新寄存器。例如,如果我有这个代码

ori $t1, $t1, 8
lw $t2, 0($t1)

我希望将$ t2更新为某个值,但事实并非如此。我的第二个问题是,如果有人可以解释为什么$ t2仍然保持0x00000000而不是执行lw指令后的值。

2 个答案:

答案 0 :(得分:2)

指令lw {regDest},{imm}({reg})将在{regDest}中加载存储在{reg} + imm指向的有效地址的字的内容,其中inm是16位立即数。 有效地址应为4的倍数。

例如,代码

  ori $t1,$0, 0x2000
  lw $t2, 4($t1)

.data 0x2000
.word 0x1234
.word 0x4321

将在$ t2中加载地址0x2004的内容(即$ t1指向的地址,即0x2000加上立即数4,给出有效地址0x2004)。

如果该地址的内容为零,您仍然可以获得$ t2 = 0.

答案 1 :(得分:0)

0()表示您将从寄存器的第一个块获取它。你可以使它成为1,2或甚至4。

如果你输入n(),它将从你指定的第n个块中获取值