MIPS:lw(加载字)指令

MIPS: lw (load word) instruction

lw $s0,8([=10=])lw $s0,0($v0)一样吗?

我看不出有什么不同。我认为8代表偏移量,这意味着我们需要$0的地址并将地址加2(8/4)。

编辑:

我的问题是关于 lw 指令和 MIPS 寄存器集。我很难理解偏移量究竟是如何工作的...

它们并不相同,尽管在某些情况下它们的行为相似。 lw指令格式如下:

lw RegDest, Offset(RegSource)

其中 RegDest 和 RegSource 是 MIPS 寄存器,Offset 是立即数。

表示将寄存器RegSource的内容与指定的Offset相加得到的地址中包含的字载入寄存器RegDest。生成的源地址必须是字对齐的(即 4 的倍数)

因此, lw $s0,8([=12=]) 表示将位于 [=14=] 指定地址的字的内容加载到 $s0 加 8。因为 [=14=] 是寄存器 $zero,它将始终包含常数零,它会将位于绝对地址 8 的字加载到 $s0.

lw $s0,0($v0)表示加载$s0位于$v0指定地址的字的内容。如果 $v0 包含值 8,则两条指令具有相同的效果。如果 $v0 不是 4 的倍数,指令将产生寻址陷阱。

通常 lw 是一种伪指令,因为汇编器可能会发出多条指令来完成指令。偏移量(位移)必须是 16 位有符号值。 如果您的指令具有更多位的立即数,汇编程序通常会使用一个临时寄存器 ($at) 来保存立即数的内容,然后发出等效指令来执行预期的行为。您可能会使用反汇编程序或 MIPS 监视器(也可以使用 MARS 模拟器检查代码)看到这一点。