我正在尝试使用mips32在内存中按顺序存储数字0到10。这是我的代码:
addi $s2, $zero, 10
addi $s1, $zero, 0
addi $t0, $zero, 0
addi $s6, $zero, 10
L1:
beq $s1, $s2, exit
sll $t0, $s1, 2 #multiply by the size of a word to get the cur address of $s6
sw $t0, 0($s6)
addi $s1, $s1, 1
j L1
exit:
我收到错误sw $t0, 0($s6)
将此内容存储在内存开头有什么问题?
答案 0 :(得分:1)
除非您使用裸机运行,否则操作系统(或仿真器)将为您的程序提供虚拟内存。您通常不会获得分配给程序的整个地址范围,您需要向操作系统询问内存块 - 通过系统调用或通过二进制格式本身,例如通过预留.bss
中的空间或.data
部分。
PS。:可用的地址范围很少包含第一页,因此可以轻松捕获空指针。