CS61C Lecture 07: RISC-V intro¶
约 534 个字 18 行代码 预计阅读时间 3 分钟 共被读过 次
一、计算机抽象层次¶
关键特性:每一层隐藏下层实现细节,指令集架构(ISA)是软硬件的接口契约
二、RISC-V 核心优势¶
- 开源自由:BSD协议允许任意修改和商用
- 模块化设计:基础指令集 + 可扩展模块(I/M/A/F/D等)
- RV32I(基础整数指令集)
- M(乘除扩展)、A(原子操作)、F/D(单/双精度浮点)
- 精简高效:典型RISC特征,对比x86(CISC):
- 定长32位指令(RV32)
- 仅load/store访问内存
- 32个通用寄存器
- 应用广泛:IoT → 超算的全生态覆盖
三、寄存器系统详解¶
-
基础配置:
- 32个通用寄存器(x0-x31)
- x0特殊寄存器:硬连线零值,写操作无效
- 寄存器宽度:RV32(32bit)、RV64(64bit) -
ABI 别名规范:
寄存器 | 别名 | 用途 |
---|---|---|
x0 | zero | 恒零值 |
x1 | ra | 返回地址 |
x2 | sp | 栈指针 |
x5-x7 | t0-t2 | 临时寄存器 |
x8-x9 | s0-s1 | 保存寄存器 |
- 核心特性:
- 无类型系统:操作决定数据处理方式(符号扩展/补码运算)
- 使用限制:高频访问要求,需合理分配寄存器资源
四、指令格式与类型¶
1. 算术指令¶
GAS
add x1, x2, x3 # x1 = x2 + x3(寄存器-寄存器)
sub x4, x5, x6 # x4 = x5 - x6
addi x7, x8, -20 # x7 = x8 + (-20)(立即数减法替代方案)
立即数特性:
- 12位有符号数(范围:-2048 ~ 2047)
- 无subi指令,负数加法实现减法
2. 内存访问指令¶
关键限制:RISC-V采用Load-Store架构,算术指令无法直接操作内存
3. 控制流指令¶
GAS
beq x1, x2, label # if x1==x2 → jump to label
jal ra, func # 跳转至func,ra保存返回地址
jalr x0, 0(x1) # 间接跳转到x1地址
寻址特性:分支偏移量为12位有符号数 × 2(字节对齐)
五、设计原则与优化技巧¶
-
伪指令优化:
汇编器自动转换伪指令为合法机器码 -
立即数扩展策略:
- 小立即数:直接使用addi
- 大立即数:lui(加载高20位) + addi/ori(设置低12位) -
性能考量:
- 4GHz CPU → 0.25ns/cycle,寄存器访问只需1周期
- 内存访问需数十到数百周期,凸显寄存器优化重要性
六、对比实验(x86 vs RISC-V)¶
x86实现:
RISC-V实现:
关键差异:RISC-V强制显式数据移动,提升流水线效率