MIPS:lw(加载字)指令

Ere*_*osM 2 assembly mips

lw $s0,8($0)一样的lw $s0,0($v0)吗?

我没有看到差异.我认为8表示偏移量,这意味着我们需要$ 0的地址并将2(8/4)加到地址中.

编辑:

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

gus*_*bro 11

虽然在某些情况下它们会表现得相似,但它们并不相同.lw指令的格式如下:

lw RegDest, Offset(RegSource)
Run Code Online (Sandbox Code Playgroud)

其中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)来保存立即数的内容,然后发出等效指令以执行预期的行为.您可以使用反汇编程序或MIPS监视器(也使用MARS模拟器检查代码)来查看此操作.

  • @ryanwebjackson:偏移量是字节数 (6认同)