首页 > 解决方案 > MIPS 基本存储(地址为零?)

问题描述

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

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 寄存器。

如果我的程序只有数据,我用什么作为基地址?在地址零存储数据值有什么问题?我的教科书/大脑让我相信这绝对没问题..

标签: mips32mars-simulator

解决方案


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

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

IE:

    .data

 startofdata: .word 0

并在代码部分:

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

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


推荐阅读