a1 / x11 调用后还能保持原参数吗?
不能假设。a0-a7 调用后不保持,callee 可以覆盖。
psABI 将 a0-a7 用作参数寄存器,其中 a0-a1 也用于返回值。它们不是 callee-saved,调用后可被覆盖。
a1 / x11 属于 a0-a7 参数寄存器组。psABI 规定 a0-a7 用于传参,a0-a1 也用于返回值;这些寄存器调用后不保持。
a* 属于 caller-saved,callee 可以覆盖它们。
调用返回后,a0 / a1 通常要优先按返回值理解,而不是原参数。
如果参数超过 a0-a7,额外参数会通过栈传递。
addi a0, zero, 3 # 第一个参数
addi a1, zero, 4 # 第二个参数
call add2
# 返回后 a0 保存返回值不能假设。a0-a7 调用后不保持,callee 可以覆盖。
psABI 规定 a0-a1 也用于返回值。