Mips .space 指令 内存地址越界



我的代码如下所示:

.data
.space 40
prompt: .asciiz "Please enter a number:"
.text
main:
lui $a0, 0x1029 # accessing address(prompt) after 40 bytes (41th byte)
addi $v0, $0, 4
syscall

通过运行上面的代码,我有一个内存地址越界错误,"null"被打印到控制台。我很困惑为什么会发生此错误?

另一方面,如果我将主标签中的第一行替换为以下两行:

lui $a0, 0x1000
addi $a0, $a0, 40

然后它工作正常。

lui $a0, 0x1029$a0设置为0x10290000,紧邻左移16。 这就是lui的全部意义,加载上部立即。

lui $a0, 0x1000/addi $a0, $a0, 40$a0设置为0x10000028,即prompt的地址。

这就是la $a0, prompt会组装的东西。


除了把0x29放在错误的地方之外,它0x28。 请记住,起始地址为 0,因此 .data 部分的第 41 个字节的偏移量为 40。

数据部分的第一个字节的偏移量为 0。

最新更新