Mips .space指令内存地址超出范围

时间:2018-10-05 23:59:47

标签: assembly mips

我的代码如下:

.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

然后正常工作。

1 个答案:

答案 0 :(得分:0)

lui $a0, 0x1029$a0设置为0x10290000,立即数左移16。这就是lui的全部点,立即加载 upper

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

这是la $a0, prompt所要组装的。


除了将0x29放在错误的位置外,它还是0x28。请记住,起始地址为0,因此.data节的第41个字节的偏移量为40。

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