我的代码如下所示:
.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
那它就能正常工作。
发布于 2018-10-05 17:39:45
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。
https://stackoverflow.com/questions/52674561
复制