Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MIPS:lw(装入字)指令_Assembly_Mips - Fatal编程技术网

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:偏移量是字节的数量