64位/32位的RISC-V体系结构提供32个64位/32位的整型通用寄存器,分别是x0~x31寄存器,如下图所示。对于浮点数运算,64位的RISC-V体系结构也提供32个浮点数通用寄存器,分别是f0~f31寄存器。RISC-V的通用寄存器通常具有别名和特殊用途,在书写汇编指令时可以直接使用别名。
为了便于记忆,下面的表格是各个寄存器的解释:
寄存器编号 | 寄存器名称 | 英文全称 | 含义 | 用途 |
---|---|---|---|---|
x0 | zero | 硬连线零 | 该寄存器的值始终为 0,用于一些需要常量 0 的操作,如 addi x1, zero, 10 可将立即数 10 加载到 x1 寄存器中。 |
|
x1 | ra | Return Address | 返回地址寄存器 | 保存函数调用的返回地址,用于函数调用和返回机制。 |
x2 | sp | Stack Pointer | 栈指针 | 指向当前栈帧的栈顶,用于管理栈空间,在函数调用时保存和恢复局部变量等。 |
x3 | gp | Global Pointer | 全局指针 | 指向全局变量区的基地址,方便快速访问全局变量。 |
x4 | tp | Thread Pointer | 线程指针 | 指向当前线程的数据区域,可用于多线程编程中快速访问线程特定的数据。 |
x5 - x7 | t0 - t2 | Temporary Registers | 临时寄存器 | 用于临时存储数据,在函数调用过程中不需要被调用者保存和恢复。 |
x8 | s0/fp | Saved Register / Frame Pointer | 保存寄存器 / 帧指针 | 通常作为帧指针,指向当前栈帧的底部,也可用于保存需要跨函数调用保留的值。 |
x9 | s1 | Saved Register | 保存寄存器 | 用于保存需要跨函数调用保留的值,在函数调用过程中由调用者负责保存和恢复。 |
x10 - x11 | a0 - a1 | Argument Registers | 参数寄存器 | 用于传递函数调用的前两个参数。 |
x12 - x17 | a2 - a7 | Argument Registers | 参数寄存器 | 用于传递函数调用的第 3 到第 8 个参数。 |
x18 - x27 | s2 - s11 | Saved Registers | 保存寄存器 | 用于保存需要跨函数调用保留的值,在函数调用过程中由调用者负责保存和恢复。 |
x28 - x31 | t3 - t6 | Temporary Registers | 临时寄存器 | 用于临时存储数据,在函数调用过程中不需要被调用者保存和恢复。 |