寄存器指南

RISC-V s9 / x25 被保存寄存器

保存寄存器9(x25)。标准 psABI 要求修改它的过程在返回前恢复入口值。

ABI 名称:s9;物理寄存器:x25。
保存责任:调用后保持。
先按 psABI 角色理解它,再看具体指令如何读写。
物理编号 x25ABI 名 s9保存责任 调用后保持
角色
被保存寄存器
调用约定
调用后保持
先记一句
标准 psABI 将 s0-s11 标记为调用后保持。
psABI 规范依据

保存寄存器

psABI 将 s0-s11 标记为调用后保持。被调用函数如果修改这些寄存器,必须在返回前恢复入口值。s9 没有帧指针别名;可选帧指针规则只适用于 x8/s0。

调用后保持:是
RISC-V psABI integer register convention
快速理解与检索要点

s9 / x25 属于 s0-s11 保存寄存器组。psABI 规定它调用后保持;被调用函数如果修改它,返回前必须恢复。

s0-s11 是调用后保持的保存寄存器。
修改 s9 的 callee 必须在返回前恢复原值。

适合什么时候用

  • - 按标准 psABI 将其识别为调用后保持的保存寄存器。
  • - 当过程修改它时,在返回前恢复入口值。
  • - s9 是保存寄存器;帧指针别名只属于 x8/s0。

什么时候不要这样用

  • - 不要在函数里修改 s* 后直接返回。
  • - 不要把 s9 解释为帧指针;该可选角色只由 x8/s0 承担。

调用前后会发生什么

1

标准 psABI 将 s0-s11 标记为调用后保持。

2

被调用函数修改 s* 时,必须在返回前恢复入口值。

3

s9 没有帧指针别名。

标准 psABI 保存规则

示例用于理解规则,不替代完整程序
# s9 是调用后保持的保存寄存器
# 修改 s9 的过程必须在返回前恢复入口值

常见问题

s9 / x25 为什么适合保存跨调用值?

s0-s11 调用后保持;callee 修改它们时必须恢复,所以 caller 可以依赖其返回后不变。

s9 被函数修改后谁负责恢复?

被调用函数负责恢复。