从任何以s开头的内存地址加载都有问题。我可以正确地从t寄存器加载,但当我运行
li $v0, 4
lw $t0, $s0
lw $a0, $t0
syscall
我得到的错误是:操作数太少或格式不正确。预期: lw $t1,-100($t2)
有一些东西存储在$s0中,所以有人能解释一下我调用这个地址的方法有什么问题吗?
发布于 2015-04-30 19:09:44
Do:lw $t0, 0($s0) lw $a0, 0($t0)
而不是。
请记住,当您使用sw和lw时,需要给出一个偏移量。
发布于 2015-05-02 15:04:00
您的问题并不完全是任何以s开头的内存地址。这两行的问题是相同的:
lw $t0, $s0
lw $a0, $t0
但是当米普斯发现第一个错误时,他停止了。
要使用lw
或sw
,您必须遵循一种格式,一种约定:
lw $rt, offset($rs)
其中,$rt
是您要在其中加载值的寄存器,该值位于内存位置,其结果是将包含$rs
的值与offset
相加。
有关这方面的更多信息,请阅读this。
这是必需的,因为内存远远高于可以保存每个寄存器的值(16位、32位或64位,取决于您的MIPS),所以如果没有offset
,您几乎什么都不能寻址。
https://stackoverflow.com/questions/29962608
复制