是lw $s0,8($0)一样的lw $s0,0($v0)吗?
我没有看到差异.我认为8表示偏移量,这意味着我们需要$ 0的地址并将2(8/4)加到地址中.
编辑:
我的问题是关于lw指令和MIPS寄存器集.我很难理解偏移是如何工作的......
gus*_*bro 11
虽然在某些情况下它们会表现得相似,但它们并不相同.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)来保存立即数的内容,然后发出等效指令以执行预期的行为.您可以使用反汇编程序或MIPS监视器(也使用MARS模拟器检查代码)来查看此操作.
| 归档时间: | 
 | 
| 查看次数: | 31467 次 | 
| 最近记录: |