CISC(Complex Instruction Set Computer,复杂指令集计算机)和 RISC(Reduced Instruction Set Computer,精简指令集计算机)是两种主要的指令集设计哲学。它们在指令复杂度、指令数量、寻址方式、执行效率等方面有显著差异。
; 一条指令完成复杂操作
REP MOVSB ; 循环复制字符串
LOOP label ; ECX减1,非零则跳转
ENTER 8, 0 ; 建立栈帧
; Load/Store 架构
lw $t0, 0($s0) ; 从内存加载到寄存器
sw $t0, 0($s0) ; 从寄存器存储到内存
add $t0, $t1, $t2 ; 寄存器间运算
| 特性 | CISC | RISC |
|---|---|---|
| 指令数量 | 200+ | 50–100 |
| 指令长度 | 可变 | 固定 |
| 寻址方式 | 10–20 种 | 3–5 种 |
| 指令周期 | 多周期 | 单周期/流水线 |
| CPI | 大且变化 | 接近 1 |
| 控制方式 | 微程序 | 硬布线 |
| 访存方式 | 任意指令可访存 | Load/Store 专用 |
| 寄存器数 | 较少(8–16) | 较多(32+) |
| 流水线 | 难以优化 | 易于流水线化 |
| 代码密度 | 高 | 低(需要更多指令) |
| 编译器 | 简单 | 复杂(需优化) |
只有 Load 和 Store 指令可以访问内存 所有运算指令的操作数必须在寄存器中 例:计算 A = B + C(B、C 在内存中) CISC 方式(x86): ADD [A_addr], [B_addr], [C_addr] ; 一条指令 RISC 方式(MIPS): lw $t0, 0($s0) ; 加载B lw $t1, 0($s1) ; 加载C add $t2, $t0, $t1 ; 相加 sw $t2, 0($s2) ; 存储结果到A
固定指令长度 → 取指阶段统一 简单的寻址方式 → 译码阶段快速 Load/Store 架构 → 访存阶段固定 单周期指令 → 流水线无阻塞
RV32I:32 位基础整数指令集(约 40 条指令) RV64I:64 位基础整数指令集 M 扩展:乘除法 F/D 扩展:单/双精度浮点 A 扩展:原子操作 C 扩展:压缩指令(16 位)
x86 指令(CISC)
↓
指令译码器 → 将 CISC 指令分解为微操作(μops)
↓
微操作队列
↓
乱序执行引擎(RISC 风格)
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。