Register
介绍
RISC-V架构提供31个用户可修改的通用(基本)寄存器,即x1到x31,以及一个额外的只读寄存器x0,硬连接到0。x0寄存器的一个常见用途是帮助将其他寄存器初始化为零。
共有31个通用寄存器。
其中7个是临时寄存器(t0t6)。
a0a7用于函数参数。s0s11用于保存寄存器或函数定义内。
一个堆栈指针,一个全局指针和一个线程指针寄存器。
一个返回地址寄存器(x1),用于存储函数调用的返回地址。
一个程序计数器(pc)。PC保存着当前指令的地址。
所有寄存器都可以作为通用寄存器使用
Stack Pointer Register(SP)
在RISC-V体系结构中,x2寄存器被用作栈指针(sp),并保存栈的基址。此外,栈基址必须对齐到4个字节。如果不这样做,可能会出现加载/存储对齐错误。
Global Pointer Register(GP)
RISC-V使用x3 (gp)寄存器将所有全局变量放置在指定的特定区域。x3寄存器将保存全局变量所在位置的基址。
Thread Pointer Register(TP)
在多线程应用程序中,每个线程可能有自己的私有变量集,称为“线程特定变量”。这组变量将由寄存器x4 (tp)指向。
因此,每个线程在其x4寄存器中都有一个不同的值。
Return Address Register(RA)
x1 (ra)寄存器用于保存子程序的返回地址。在执行子程序调用之前,x1设置为子程序的返回地址,通常为“pc + 4”。标准的软件调用约定使用x1 (ra)寄存器来保存函数调用的返回地址。
Argument Register(参数寄存器)
在RISC-V中,8个参数寄存器,即x10x17(对应a0a7)用于在子程序中传递参数。
在子程序调用之前,子程序的参数被复制到参数寄存器。在参数数量超过8的情况下使用栈。
Temporary Register(临时寄存器)
临时寄存器用于在指令执行期间保存中间值。在RISC-V中有7个临时寄存器(t0t6)。
Privilege mode
risc-v架构将特权等级分为三个M、S、U。
User Mode:简称U 通常运行应用程序
Supervisor Mode:简称S 通常运行操作系统
Machine Mode:简称M 用于管理安全执行环境,最高权限,必选,其他两种模式都是可选的。
三种模式可以互相切换
Control and Status Registers (CSRs)
Registers
CSR寄存器非常多,下图为一些经常使用到的寄存器