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

bru*_*ner 1 assembly mips qtspim

我刚刚开始使用 Mips,所以这可能听起来很简单,但是:当我在没有
li $v0,10 指令的情况下 编写上面的代码时,我收到一条错误消息:内存地址超出范围 当我添加它时,它没有任何警告。 这意味着什么?

.text
.globl main
main:
 li $t1,27
li $t2,2
mulou $t3,$t1,$t2
li $v0,10
syscall
Run Code Online (Sandbox Code Playgroud)

Jes*_*ter 6

li它本身只是将立即数加载到寄存器中。在这种特殊情况下,另一侧的服务例程syscall 查看 in 的值$v0来判断请求的功能。10是代码exit(请参阅spim 支持的系统调用列表)。如果您没有设置$v0,那么将根据所$v0包含的值执行一些随机函数。很可能不会,exit所以CPU会尝试继续执行内存中代码之后的任何内容,这迟早会崩溃。

  • 是的。您可以想象操作系统服务例程有类似 `switch ($v0) { case 10: do_exit(); 之类的东西。}` (2认同)