首页/计算机组成原理/指令系统/CISC和RISC 🔗 在 Obsidian 中打开
计算机组成原理 · 指令系统

CISC和RISC

重要度 ⭐⭐⭐⭐指令系统RISC指令集复杂指令精简指令
速查
CISC:指令多、变长、复杂、微程序实现(典型 x86);RISC:指令少、定长、简单、硬布线实现(典型 ARM / MIPS / RISC-V)。RISC 采用 Load/Store 架构,只有 load/store 能访存。

概述

CISC(Complex Instruction Set Computer,复杂指令集计算机)和 RISC(Reduced Instruction Set Computer,精简指令集计算机)是两种主要的指令集设计哲学。它们在指令复杂度、指令数量、寻址方式、执行效率等方面有显著差异。

CISC · x86 指令多 · 变长 · 复杂 · 微程序 RISC · ARM/MIPS/RISC-V 指令少 · 定长 · 简单 · 硬布线
图:两种指令集设计哲学与代表架构。

CISC 的特点

设计理念

  • 用硬件实现更多功能
  • 一条指令完成复杂操作
  • 缩小程序体积,减少访存次数

主要特征

  1. 指令数量多:通常 200 条以上
  2. 指令长度可变:1 字节到十几个字节
  3. 寻址方式多:十几种以上
  4. 指令功能强:一条指令可完成复杂操作
  5. 微程序控制:复杂指令用微程序实现
  6. CPI 较大:不同指令周期数差异大
  7. 指令使用频率差异大:20% 的指令占 80% 的执行时间

典型 CISC 处理器

  • Intel x86 系列(i386、i486、Pentium、Core 等)
  • Motorola 68000 系列
  • VAX 系列

CISC 指令示例(x86)

; 一条指令完成复杂操作
REP MOVSB      ; 循环复制字符串
LOOP label     ; ECX减1,非零则跳转
ENTER 8, 0     ; 建立栈帧

RISC 的特点

设计理念

  • 简化指令集,用简单指令组合完成复杂操作
  • 硬布线控制,单周期执行
  • 优化编译器,让编译器负责指令组合

主要特征

  1. 指令数量少:通常几十到一百条
  2. 指令长度固定:便于流水线执行
  3. 寻址方式少:通常 3–5 种
  4. 指令功能简单:Load/Store 架构
  5. 硬布线控制:单周期或流水线执行
  6. CPI 接近 1:大部分指令 1 个周期
  7. 大量使用寄存器:减少访存

典型 RISC 处理器

  • MIPS 系列、ARM 系列(手机、嵌入式)
  • RISC-V(开源)、SPARC、PowerPC

RISC 指令示例(MIPS)

; Load/Store 架构
lw  $t0, 0($s0)   ; 从内存加载到寄存器
sw  $t0, 0($s0)   ; 从寄存器存储到内存
add $t0, $t1, $t2  ; 寄存器间运算

CISC vs RISC 对比

特性CISCRISC
指令数量200+50–100
指令长度可变固定
寻址方式10–20 种3–5 种
指令周期多周期单周期/流水线
CPI大且变化接近 1
控制方式微程序硬布线
访存方式任意指令可访存Load/Store 专用
寄存器数较少(8–16)较多(32+)
流水线难以优化易于流水线化
代码密度低(需要更多指令)
编译器简单复杂(需优化)

Load/Store 架构

RISC 的核心特征

只有 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 架构」意味着只有这两种指令能访存,运算指令只能操作寄存器——这是 RISC 区别于 CISC 的标志。

RISC 的流水线优化

为什么 RISC 更适合流水线

固定指令长度 → 取指阶段统一
简单的寻址方式 → 译码阶段快速
Load/Store 架构 → 访存阶段固定
单周期指令 → 流水线无阻塞

流水线中的问题

  • 数据冒险:后续指令需要前面指令的结果
  • 控制冒险:跳转指令导致流水线清空
  • 解决方案:前递、分支预测、延迟槽

RISC-V 简介

特点

  • 开源指令集架构
  • 模块化设计(RV32I 基础 + 扩展)
  • 简洁高效,广泛用于教学和嵌入式

基础指令集

RV32I:32 位基础整数指令集(约 40 条指令)
RV64I:64 位基础整数指令集
M 扩展:乘除法
F/D 扩展:单/双精度浮点
A 扩展:原子操作
C 扩展:压缩指令(16 位)

x86 的「RISC 化」

x86 指令(CISC)
      ↓
指令译码器 → 将 CISC 指令分解为微操作(μops)
      ↓
微操作队列
      ↓
乱序执行引擎(RISC 风格)
本质外部接口是 CISC,内部执行是 RISC 风格:微操作(μops)是简单的 RISC 风格操作。

CISC 和 RISC 的融合趋势

现代处理器

  • x86 内部用 RISC 核心
  • ARM 增加了一些复杂指令
  • 两者界限越来越模糊

选择考虑

  • 嵌入式/移动:RISC(ARM)— 低功耗
  • 桌面/服务器:CISC(x86)— 兼容性
  • 新兴领域:RISC-V — 开源灵活

易错点

必记
  1. RISC 不是「指令更少就更慢」,而是通过简单指令组合实现复杂功能。
  2. 现代 x86 内部是 RISC 风格的微操作执行。
  3. RISC 的 Load/Store 架构意味着只有这两种指令访存。
  4. CISC 的微程序控制比 RISC 的硬布线控制慢。
  5. RISC 的编译器更复杂(需要优化指令组合)。
  6. RISC 指令数量虽少,但通过组合可完成所有功能。
  7. ARM 是 RISC,但 ARMv8 也增加了一些复杂指令。

交互动画 · A = B + C 的两种实现

内存B=3C=5A=?(结果) 寄存器组\$t0 / \$t1\$t2(结果)仅 RISC 使用 ALU 选择实现方式,观察数据通路
计算 A = B + C:CISC 一条指令直接访存,RISC 用 4 条指令走 Load/Store
点击上方按钮开始
示意图:指令区在上(橙色 = 当前高亮指令),数据在「内存 ↔ 寄存器 ↔ ALU」之间流动;橙色流动虚线表示激活的数据通路。

相关知识点

instruction-format addressing-modes instruction-set-design

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。