MIPS程序集理解读取系统调用

MIPS程序集理解读取系统调用,mips,Mips,我无法理解MIPS中的一段代码。即使用“读取”linux系统调用的寄存器约定: ... move a0,zero #a0 = 0 move a1,s0 #a1 = some adress in memory li v0,4003 #v0 = 4003 = SYSCALL READ syscall bnez a3, label #What is in a3?? li v1,1 bne v0,v1 ... 现在我明白了 char buffer; int v0 = re

我无法理解MIPS中的一段代码。即使用“读取”linux系统调用的寄存器约定:

...
move    a0,zero #a0 = 0
move    a1,s0    #a1 = some adress in memory
li  v0,4003  #v0 = 4003 = SYSCALL READ
syscall
bnez    a3, label #What is in a3??
li  v1,1
bne v0,v1
...
现在我明白了

char buffer;
int v0 = read(0, &buffer, 1);
????

我完全不明白的是,在这种情况下,reg a3的含义是什么?v0是read的返回值,但a3应该是参数,而不是ret值。是错误吗?

它是一个布尔值,指示是否存在错误:

在一些体系结构上,寄存器用作布尔值(0 表示无错误,-1表示错误)发送信号 系统调用失败

Arch/ABI    Instruction           System   Ret   Ret    Error 
                                  call #   val   val2
-------------------------------------------------------------
mips        syscall               v0       v0    v1     a3