寄存器指南

RISC-V zero / x0 寄存器:硬连线零值、写入丢弃与常见用法

zero 是 RISC-V 最容易先记住的寄存器:读取 x0 永远得到 0,写入 x0 的结果会被忽略。你会在与零比较、把目的寄存器设为零、NOP 和部分伪指令写法里反复看到它。

官方 ISA:x0 硬连线为全 0。
汇编手册:读取返回 0,写入会被忽略。
新手规则:把 zero 当常量 0 或丢弃目的地,不要当变量存储。
物理编号 x0ABI 名 zero保存责任 N/A
角色
零值常量
调用约定
不可修改
先记一句
zero 不参与调用约定保存责任,因为它永远读出 0。
psABI 规范依据

硬连线零寄存器

psABI 将 x0 命名为 zero,含义是不可变的零值寄存器。读取始终得到 0,写入不会保存结果。

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

zero / x0 是 RISC-V 的硬连线零寄存器。读取总是得到 0,写入会被忽略,因此它常用于常量 0、比较零和丢弃写回结果。

ISA 将 x0 定义为硬连线全 0。
psABI ABI 名称为 zero,保存责任不适用。

适合什么时候用

  • - 需要常量 0 时直接读取它,不需要额外清零指令。
  • - 把结果写到 zero 可以主动丢弃结果。
  • - 很多伪指令会借助 zero 构造,例如 mv / li / nop 等。

什么时候不要这样用

  • - 不要尝试把它当成普通可写寄存器。
  • - 不要用它保存临时状态,写入 zero 的结果会被硬件丢弃。

调用前后会发生什么

1

zero 不参与调用约定保存责任,因为它永远读出 0。

2

函数调用前后 zero 的值都不会变化。

用 zero 构造常见写法

示例用于理解规则,不替代完整程序
addi a0, zero, 0   # a0 = 0
add  zero, a0, a1  # 计算结果被丢弃
beq  a0, zero, done

常见问题

zero / x0 能保存数据吗?

不能。x0 读取始终为 0,写入会被忽略。

为什么很多指令会使用 x0?

x0 可作为常量 0,也可作为丢弃写回结果的目的寄存器。