跳至正文
这篇笔记的目录
回到学习目录
技术开发

RISC-V 基础知识

RISC-V 是一套开放的指令集架构(ISA)标准;它规定软件可见的机器接口,不等于某一款处理器芯片。

#RISC-V#xv6#计算机系统#学习笔记

一句话: RISC-V 是一套开放的指令集架构(ISA)标准;它规定软件可见的机器接口,不等于某一款处理器芯片。

本章导航#

ISA 是什么 · RISC 与 CISC · CPU 怎样执行程序 · RISC-V 的组成 · 扩展命名 · 学习路径

学习目标#

  • 区分 ISA、微架构、汇编和机器码。
  • 说清一条指令从取指到更新 PC 的基本过程。
  • 理解 RISC-V 基础整数寄存器、指令格式与扩展字母的作用。

1. ISA 是什么#

**ISA(Instruction Set Architecture,指令集架构)**是硬件与低层软件之间的契约。它定义指令的编码和语义、可见寄存器、内存访问规则、异常/特权行为等。编译器按 ISA 生成指令,处理器实现这些规则。

C / Rust 等源程序
↓ 编译器
汇编助记符(便于人阅读)
↓ 汇编器
机器码(指令的二进制编码)
↓ 处理器实现 ISA
执行结果

例如,a = b + c 可能变成 add x5, x6, x7,再由汇编器编码成机器字。微架构则说明某个具体 CPU 内部如何实现这些规则(流水线、缓存、预测器等);不同微架构可以实现同一 ISA。

易混点: ISA 不规定 C 语言的所有类型、编译器优化策略或 CPU 内部电路布局。

2. RISC 与 CISC#

RISC(精简指令集)与 CISC(复杂指令集)是历史设计理念的概括,不是“指令少就一定快”的性能结论。

维度常见 RISC 风格常见 CISC 风格
设计倾向指令语义较规整、便于流水化提供较复杂或更密集的指令编码
内存运算常采用 load/store:先读寄存器,再运算部分指令可直接把内存作为操作数
编码基础指令常规整;扩展可能改变长度常见可变长度编码
例子RISC-V、AArch64x86-64

现代实现都可能采用复杂的内部优化。判断性能要看程序、编译器、微架构和工作负载,而不是只看 ISA 标签。

3. CPU 怎样执行程序#

把处理器想成“根据 PC 找到下一条指令、解释它、完成操作”的机器:

  1. 取指: 从程序计数器(PC)指出的位置取出指令。
  2. 译码: 解析操作码、寄存器编号和立即数。
  3. 执行: ALU 计算、访存、比较或跳转。
  4. 提交结果并更新 PC: 顺序执行时 PC 前进;分支/跳转时 PC 改为目标地址。

例如 add x5, x6, x7 表示把 x6 与 x7 的值相加并写入 x5。基础 RV32I/RV64I 指令通常为 32 位;启用压缩扩展 C 后,也会有 16 位指令,所以不能一概说“所有 RISC-V 指令都是 4 字节”。

4. RISC-V 的组成#

RISC-V 采用开放标准 ISA。规范开放不等于所有实现的许可条件都相同;实现芯片时还要考虑具体标准、专利和许可要求。

基础整数 ISA 提供 32 个整数寄存器 x0x31(具体 ABI 名称见寄存器章),以及独立的 PC。RV32 的整数寄存器宽度为 32 位,RV64 为 64 位。RISC-V 采用 load/store 思路:算术通常在寄存器之间进行,load/store 指令负责寄存器与内存之间的数据传输。

常见指令格式#

格式常见用途示例
R两个寄存器参与运算add x5, x6, x7
I立即数运算、load、间接跳转addi x5, x6, 12
Sstoresw x5, 0(x6)
B条件分支beq x5, x6, label
U构造较大的立即数lui x5, 0x12345
JPC 相对跳转并可保存返回地址jal x1, label

这些是编码布局的类别,不是六种互不相关的“语言”;汇编器还会提供伪指令,让常见操作更容易书写。

5. 基础集与扩展#

RISC-V 由基础整数 ISA 和可组合扩展构成。常见单字母扩展包括:

字母含义(简写)
I基础整数指令集
M整数乘除
A原子操作
F / D单精度 / 双精度浮点
C压缩指令
V向量指令

例如 RV64GC 通常表示 RV64 基础整数 ISA 加上通用应用处理器常用扩展组合(其中 G 是 IMAFD 的简写,另含 C)。具体可用指令仍应查看目标平台、编译器的 -march 设置和官方规格书。

6. 学习路径#

  • 先掌握二进制、补码与基本计算机组成。
  • 学寄存器、寻址方式、分支和函数调用。
  • 用编译器生成汇编,再用反汇编核对机器码。
  • 用 QEMU 与 GDB观察寄存器、PC、栈和内存。
  • 读 xv6:先启动,再追踪进程、页表、系统调用、文件系统。

核心结论: 先把 ISA 当作“软件与处理器之间可验证的契约”,再学习一条条指令;不要把 ISA、处理器实现和某个汇编器混为一谈。

下一篇: 01 · 计算机组成原理02 · 二进制与补码