Assembly MIPS:lw(装入字)指令
Assembly MIPS:lw(装入字)指令,assembly,mips,Assembly,Mips,lw$s0,8($0)是否与lw$s0,0($v0)相同 我看不出有什么区别。我认为8代表偏移量,这意味着我们需要0美元的地址,并向地址中添加2(8/4) 编辑: 我的问题是关于lw指令和MIPS寄存器集。我很难理解偏移量到底是如何工作的…它们并不相同,尽管在某些情况下它们的行为会相似。 lw指令的格式如下: lw RegDest, Offset(RegSource) 其中RegDest和RegSource是MIPS寄存器,Offset是立即数 这意味着,将寄存器RegSource的内容和指定
lw$s0,8($0)
是否与lw$s0,0($v0)
相同
我看不出有什么区别。我认为8代表偏移量,这意味着我们需要0美元的地址,并向地址中添加2(8/4)
编辑:
我的问题是关于lw指令和MIPS寄存器集。我很难理解偏移量到底是如何工作的…它们并不相同,尽管在某些情况下它们的行为会相似。
lw
指令的格式如下:
lw RegDest, Offset(RegSource)
其中RegDest和RegSource是MIPS寄存器,Offset是立即数
这意味着,将寄存器RegSource的内容和指定的偏移量相加后产生的地址中包含的字加载到寄存器RegDest中。生成的源地址必须是字对齐的(即4的倍数)
所以,,
lw$s0,8($0)
表示在$s0
中加载位于$0
加8指定地址的单词内容。由于$0
是寄存器$zero
,它将始终包含常量零,它将把位于绝对地址8中的字加载到$s0
中
lw$s0,0($v0)
表示在$s0
中加载位于$v0
指定地址的单词内容。如果$v0
包含值8,则两条指令具有相同的效果。如果$v0
不是4的倍数,则指令将生成寻址陷阱
通常情况下,lw
是一条伪指令,因为汇编程序可能会执行多条指令来完成该指令。偏移量(位移)必须是16位有符号值。
如果指令有一个包含更多位的立即数,汇编程序通常会使用一个临时寄存器(
$at
)来保存立即数的内容,然后使用emmit等效指令来执行预期的行为。您可以使用disassembler或MIPS监视器(也可以使用MARS模拟器检查代码)看到这一点。这个问题没有太多。。你能补充更多细节吗。澄清。lw$s0,8($0)
是否与lw$s0,0($v0)
相同?“如果$v0
保持值8,则为是。否则,不会。为了澄清,偏移量是位的数量,而不是字节的数量,对吗?@ryanwebjackson:偏移量是字节的数量