CPU 寄存器映射
1. 通用寄存器 (GPR)
RISC-V 有 32 个 32 位通用寄存器 (x0-x31)。
| 寄存器 | ABI 名称 | 描述 |
| x0 | zero | 硬连线 0 |
| x1 | ra | 返回地址 |
| x2 | sp | 栈指针 |
| x3 | gp | 全局指针 |
| x4 | tp | 线程指针 |
| x5-x7 | t0-t2 | 临时寄存器 |
| x8 | s0/fp | 保存/帧指针 |
| x9 | s1 | 保存寄存器 |
| x10-x11 | a0-a1 | 参数/返回值 |
| x12-x17 | a2-a7 | 参数寄存器 |
| x18-x27 | s2-s11 | 保存寄存器 |
| x28-x31 | t3-t6 | 临时寄存器 |
2. 控制状态寄存器 (CSR)
2.1 机器模式 CSR
| 地址 | 名称 | 读写 | 描述 |
| 0x300 | mstatus | R/W | 机器状态 |
| 0x301 | misa | R/W | 机器 ISA |
| 0x304 | mie | R/W | 机器中断使能 |
| 0x305 | mtvec | R/W | 机器陷阱向量 |
| 0x340 | mscratch | R/W | 机器 scratch |
| 0x341 | mepc | R/W | 机器异常程序计数器 |
| 0x342 | mcause | R/W | 机器异常原因 |
| 0x343 | mtval | R/W | 机器陷阱值 |
| 0x344 | mip | R/W | 机器中断挂起 |
| 0x30A | mcounteren | R/W | 计数器使能 |
| 0xF11 | marchid | R | 架构 ID |
| 0xF12 | mimpid | R | 实现 ID |
| 0xF13 | mhartid | R | 硬件线程 ID |
| 0xF14 | mvendorid | R | 供应商 ID |
2.2 mstatus 位定义
| 位 | 名称 | 描述 |
| 0 | UIE | 用户中断使能 |
| 1 | SIE | 超级用户中断使能 |
| 3 | MIE | 机器模式中断使能 |
| 4 | UPIE | 用户先前的中断使能 |
| 5 | SPIE | 超级用户先前的中断使能 |
| 7 | MPIE | 机器先前的中断使能 |
| 8 | SPP | 超级用户先前的特权模式 |
| 11:12 | MPP | 机器先前的特权模式 |
| 17 | MPRV | 修改特权模式访存 |
2.3 mcause 值定义
| 值 | 描述 |
| 0 | 用户模式软件中断 |
| 1 | 机器模式软件中断 |
| 4 | 用户模式定时器中断 |
| 5 | 机器模式定时器中断 |
| 8 | 用户模式外部中断 |
| 9 | 机器模式外部中断 |
| 0x7FFFFFFF | 指令地址未对齐 |
| 0x7FFFFFFE | 指令访问错误 |
| 0x7FFFFFFD | 非法指令 |
| 0x7FFFFFFC | 断点 |
| 0x7FFFFFFB | 加载地址未对齐 |
| 0x7FFFFFFA | 加载访问错误 |
| 0x7FFFFFF9 | 存储地址未对齐 |
| 0x7FFFFFF8 | 存储访问错误 |
| 0x80000000+ | 中断 (MSB=1) |
3. 计数器寄存器
| 地址 | 名称 | 读写 | 描述 |
| 0xB00 | mcycle | R/W | 周期计数器 |
| 0xB02 | minstret | R/W | 指令退休计数器 |
| 0xB80 | mcycleh | R | 周期计数器高 32 位 |
| 0xB82 | minstreth | R | 指令退休计数器高 32 位 |