问题描述
我只是从Mips开始,所以听起来很简单,但是:
当我在没有 li $ v0,10指令的上方编写代码时,收到一条错误消息:内存地址超出范围
当我添加它时,它没有任何警告。
这是什么意思?
.text
.globl main
main:
li $t1,27
li $t2,2
mulou $t3,$t1,$t2
li $v0,10
syscall
解决方法
li
本身只是将立即数加载到寄存器中。在这种特定情况下,syscall
另一侧的服务例程将查看$v0
中的值以告知请求的功能。 10
是exit
的代码(请参见list of system calls supported by spim)。如果您未设置$v0
,则将根据碰巧包含的值$v0
执行一些随机函数。可能不会是exit
,因此CPU会尝试继续执行内存中的代码之后的所有操作,这迟早会导致崩溃。