0

我在 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 值。是错误的吗?

4

1 回答 1

1

这是一个布尔值,指示是否有错误:

在一些架构上,寄存器用作布尔值(0 表示没有错误,-1 表示有错误)来表示系统调用失败。

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

资源

于 2021-05-02T07:57:32.027 回答