我已经看到在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指令后的值。
答案 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个块中获取值