有人可以解释一下有什么区别:
lw $t5, $t3
和
lw $t5, ($t3)
和
lw $t5, 0($t3)
第一个和第二个按预期工作。但为什么第三个与第二个不同呢?
答案 0 :(得分:1)
除非你的汇编程序非常宽容,否则第一个例子是语法错误:
lw $t5, $t3
spim
和mars
都标记了它。 lw
指令是“从内存加载”。如果您想从$t5
的内容设置$t3
的内容,您需要move
伪操作:
move $t5, $t3
这是:
的简写addu $t5, $t3, $zero
lw
的正确用法是:
lw <dest_reg>,<offset>(<source_reg>)
这将获取源寄存器的内容,添加签名 [16位]偏移量以生成最终地址。它将从该地址获取32位字,并将获取的值放入目标寄存器。
如果<offset>
为零,则可以将其关闭,因此以下两个是等效的:
lw $t5, 0($t3)
lw $t5, ($t3)