MIPS基本存储(地址为零?)

时间:2018-10-28 21:50:49

标签: mips32 mars-simulator

到目前为止,我已经编写了一个完全不使用数据存储器的汇编程序。现在,我正在尝试编写一个超级简单的程序,该程序存储一个值,然后将该值加载到另一个寄存器中(并打印出内容以确保我理智)。

li $t0, 13 # data that I want to store

li $v0, 1
move $a0, $t0
syscall

sw $t0, 0($zero) # error
#lw $t1, 32

#li $v0, 1
#move $a0, $t1
#syscall

我不断收到“地址超出范围”错误。我尝试将偏移量更改为不同的值(4、8、32),甚至尝试将立即数加载到寄存器中,所以我不使用$ zero寄存器。

如果我所有程序都具有数据,该如何用作基址?将数据值存储在地址零怎么办?我的教科书/大脑让我相信,这绝对没问题。

1 个答案:

答案 0 :(得分:1)

这是因为没有内存映射到地址0。它很可能在0x10000000(在MARS中通常为0x10010000)之后的某个位置,当您查看模拟器的数据段窗口时就会看到。

因此,如果您想在数据段的开头访问单词,请贴上标签

即:

    .data

 startofdata: .word 0

并在代码部分:

 la $a0, startofdata
 sw $t0, 0($a0)
如果您要标记每个位置以使其更具可读性,则

startdata可能被命名为error