MIPS这条指令的区别?
MIPS difference in this instruction?
谁能解释一下两者之间的区别:
lw $t5, $t3
和
lw $t5, ($t3)
和
lw $t5, 0($t3)
第一个和第二个按预期工作。但是为什么第三个和第二个不一样呢?
除非你的汇编器非常宽容,否则第一个例子是语法错误:
lw $t5, $t3
spim
和 mars
都标记了它。 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)
谁能解释一下两者之间的区别:
lw $t5, $t3
和
lw $t5, ($t3)
和
lw $t5, 0($t3)
第一个和第二个按预期工作。但是为什么第三个和第二个不一样呢?
除非你的汇编器非常宽容,否则第一个例子是语法错误:
lw $t5, $t3
spim
和 mars
都标记了它。 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)