li $ v0,10在Mips中是什么?

问题描述

我只是从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中的值以告知请求的功能。 10exit的代码(请参见list of system calls supported by spim)。如果您未设置$v0,则将根据碰巧包含的值$v0执行一些随机函数。可能不会是exit,因此CPU会尝试继续执行内存中的代码之后的所有操作,这迟早会导致崩溃。