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

MIPS basic store (at address zero?)

到目前为止,我编写了一个根本不使用数据存储器的汇编程序。现在我正在尝试编写一个超级简单的程序来存储一个值,然后将该值加载到不同的寄存器中(并打印一些东西以确保我是清醒的)。

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

我一直收到 'address out of range' 错误。我试过将偏移量更改为不同的值(4、8、32),甚至尝试将立即数加载到寄存器中,所以我没有使用 $zero 寄存器。

如果我的程序只有数据,我应该使用什么作为基地址?在地址零处存储数据值有什么问题?我的 textbook/brain 让我相信这绝对没问题..

那是因为没有内存映射到地址0。它很可能在0x10000000之后的某个地方,(通常是MARS中的0x10010000),当你查看模拟器的数据段window时会看到.

所以,如果你想访问数据段开头的一个词,放一个标签

即:

    .data

 startofdata: .word 0

在代码部分:

 la $a0, startofdata
 sw $t0, 0($a0)

startdata 可能被命名为错误,如果你想标记每个位置以使其更具可读性