寄存器指南

RISC-V s11 / x27 被保存寄存器

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

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

保存寄存器

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

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

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

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

适合什么时候用

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

什么时候不要这样用

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

调用前后会发生什么

1

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

2

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

3

s11 没有帧指针别名。

标准 psABI 保存规则

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

常见问题

s11 / x27 为什么适合保存跨调用值?

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

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

被调用函数负责恢复。