MIPS这条指令的区别?

MIPS difference in this instruction?

谁能解释一下两者之间的区别:

lw $t5, $t3

lw $t5, ($t3)

lw $t5, 0($t3)

第一个和第二个按预期工作。但是为什么第三个和第二个不一样呢?

除非你的汇编器非常宽容,否则第一个例子是语法错误:

lw $t5, $t3

spimmars 都标记了它。 lw 指令是 "load from memory"。如果你想从 $t3 的内容设置 $t5 的内容,你需要 move 伪操作:

move $t5, $t3

这是 shorthand 用于:

addu $t5, $t3, $zero

lw的正确用法是:

lw <dest_reg>,<offset>(<source_reg>)

这获取源寄存器的内容,加上 signed [16 位] 偏移量以产生最终地址。它将从该地址获取 32 位字并将获取的值放入目标寄存器。

如果<offset>为零,可以不加,所以下面两个是等价的:

lw $t5, 0($t3)
lw $t5, ($t3)