精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

CISC与RISC

考情分析

两种考法。选择题考核心特征对比,形式固定是"下列关于 RISC 的叙述中,错误的是"——四个选项里三个是 RISC 的真特征、一个把某条颠倒过来(把硬布线说成微程序、把"最适合流水线"说成"难以流水线")。综合题里出现过一次反向用法:给一段反汇编,判断这台机器是 CISC 还是 RISC,2 分。

所以特征表不能只会顺着背,还得能认出被颠倒的那一条。

大纲定位

考纲第四章(五):CISC 和 RISC 的基本概念

要求到什么程度:能列出两者在指令长度、指令格式种类、寻址方式、寄存器数量、控制器实现等维度的差异,并能由一段反汇编反过来判断这是哪一类机器。

CISC(复杂指令集计算机)

Complex Instruction Set Computer,以 x86(Intel/AMD)为代表。

设计理念:用一条复杂指令完成尽可能多的操作,减少程序的指令条数,降低对编译器的要求(早期编译器能力弱)。

主要特征

特征说明
指令数量多数百条甚至上千条
指令长度变长指令长度不固定(如 x86 指令 1~15 字节)
指令格式种类多字段的切分方式有很多套,操作码位数都可能不同
寻址方式多支持多种复杂寻址(内存 ↔ 内存操作)
控制方式微程序控制(便于设计复杂指令)
访存频繁指令可直接操作内存,不强制 Load/Store
寄存器少通用寄存器数量少(x86 早期只有 8 个)
参数传递寄存器不够用,过程调用的参数多用栈传递
执行时钟不同指令的执行周期数差异大

RISC(精简指令集计算机)

Reduced Instruction Set Computer,以 ARM、MIPS、RISC-V 为代表。

设计理念:只保留最常用的简单指令,通过编译器优化生成高效指令序列,依赖硬件流水线实现高吞吐。

主要特征

特征说明
指令数量少几十条核心指令
指令定长所有指令等长(如 MIPS 固定 32 位)
指令格式种类少只有少数几套字段切法,且各套里寄存器号的位置固定
寻址方式少数据操作在寄存器间进行,访存指令使用基址+偏移,种类远少于 CISC
控制方式硬布线控制(速度快)
Load/Store 架构只有 Load/Store 指令访问内存,其余操作均在寄存器间进行
寄存器多通用寄存器多(MIPS/RISC-V 有 32 个)
参数传递寄存器够用,过程调用的参数多用寄存器传递
执行时钟大多数指令在一个时钟周期内完成,平均 CPI 接近 1

「一个时钟周期完成一条指令」到底在说什么

这句话是对的,但它说的是吞吐不是延迟

"RISC 大多数指令在一个时钟周期内完成"是教材和真题反复出现的正确表述,考场上看到它请直接放过——它不是错误选项。

但它容易被理解偏,所以要分清两个量:

含义RISC 五级流水线的值
延迟(一条指令走完全程)从取指到写回要经过几个周期5 个周期(IF/ID/EX/MEM/WB)
吞吐(每周期完成几条)稳态下平均每个时钟周期完成多少条1 条/周期,即 CPI 1

"一个时钟周期完成一条指令"说的是第二行——流水线满载后,每来一个时钟就有一条指令从末端走出来。不是说一条指令从头到尾只花一个周期(那是单周期 CPU 的特征,而单周期 CPU 的时钟周期长得离谱)。

两句话不矛盾:每条指令仍要走 5 个周期,但 5 条指令是重叠着走的。

CISC 做不到这一点,是因为它的指令复杂度差异太大——一条 MOV 和一条串操作指令所需周期数可以差几十倍,没法均衡地切成流水段,平均 CPI 远大于 1。

指令定长 ≠ 指令格式种类少

这是两个互相独立的维度,真题会把它们并列写在同一个选项里("指令数、寻址方式和指令格式种类相对 CISC 少"),所以必须分开理解:

维度问的是CISCRISC
指令长度一条指令占几个字节变长(x86 为 1~15 字节)定长(如一律 32 位)
指令格式种类这些位怎么切分成字段,一共有几套切法多,操作码位数都可能不同少,且各套之间字段位置尽量对齐

定长完全可以配上很多种格式(同样 32 位,切法可以有几十种)。RISC 两样都要:既定长,格式种类还少

为什么格式种类少这么重要:因为它让译码可以和读寄存器并行。以 RISC-V 为例,无论是 R 型、I 型还是 S 型指令,rs1 永远在 IR[19:15]——CPU 根本不用等译码结果出来,就可以拿这几位去读寄存器堆。格式一乱,这一步就只能串行等着,流水线的 ID 段立刻被拉长。

所以"精简"精简的从来不只是指令条数,而是四样东西一起:

指令条数指令长度统一指令格式种类寻址方式

选择题里把这四样并列说成"相对 CISC 少",是正确叙述。

过程调用的参数怎么传

寄存器多不只是"少访存"这一个好处,它还改变了函数调用的约定

寄存器数量参数怎么传
RISC多(32 个)前几个参数走寄存器(MIPS 用 a0~a3,ARM 用 r0~r3,RISC-V 用 a0~a7),超出的才压栈;返回值也走寄存器
CISC(x86 早期)少(8 个)寄存器不够分,参数普遍压栈,被调用方从栈帧里按偏移取

寄存器传参的收益很直接:一次调用省掉好几次访存。参数放栈上意味着调用方写内存、被调用方再读内存;放寄存器则完全不碰内存。函数调用在真实程序里极其频繁,这点开销积累起来很可观。

一个容易引起怀疑的细节:x86-64 也用寄存器传参(rdirsirdxrcxr8r9),它不是 CISC 吗?

是。但这恰好说明寄存器传参的前提是"寄存器够多"——x86-64 把通用寄存器从 8 个扩到 16 个之后才有条件这么做。所以"RISC 多采用寄存器传参"依然是正确叙述:它描述的是 RISC 的典型做法,不是一条只有 RISC 才能满足的排他性定义。

核心对比表

特性CISCRISC
指令集规模大(数百条)小(几十条)
指令长度变长定长
指令格式种类少,且字段位置对齐
寻址方式多种复杂方式少(Load/Store)
控制器实现微程序(ROM 存储)硬布线(逻辑电路)
内存访问指令可直接访存只有 Load/Store 访存
通用寄存器
过程调用传参多用栈多用寄存器
平均 CPI远大于 1接近 1
流水线难以实现(变长指令),需先拆成微操作天生适合流水线
编译器要求低(指令复杂,编译简单)高(依赖编译器优化)
典型代表x86, x86-64ARM, MIPS, RISC-V, PowerPC

微程序控制 vs 硬布线控制

微程序控制

  • 将每条复杂指令分解为微操作,存储在控制存储器(ROM)中
  • 修改方便,适合复杂指令集
  • 速度较慢(需要查微程序存储器)

硬布线控制

  • 用组合逻辑直接产生控制信号
  • 速度快,延迟低
  • 设计复杂,修改困难,适合简单固定指令集

RISC 指令简单且定长,硬布线控制电路规模可控,因此速度更快。

Load/Store 架构的含义

RISC 中,只有 LOAD(从内存读到寄存器)和 STORE(从寄存器写到内存)两类指令可以访存。

所有运算都在寄存器之间进行:

# RISC 风格:计算 A + B 并存入 C
LOAD  R1, [A]    ; 从内存加载 A
LOAD  R2, [B]    ; 从内存加载 B
ADD   R3, R1, R2 ; 寄存器间运算
STORE R3, [C]    ; 结果写回内存
# CISC 风格:直接内存操作
ADD [C], [A], [B]  ; 一条指令完成(但内部很复杂)

卷面动作:给一段反汇编,怎么判断它是 RISC 还是 CISC

综合题给一段带虚拟地址和机器码的反汇编,问"计算机 M 是 RISC 还是 CISC?为什么?"——2017 年考过一次,2 分。

主判据:指令长度是否参差。 这是最直观、也是标准答案采用的那一条。机器码那一列直接数字节数就行,也可以用相邻两条指令的虚拟地址相减。

1   00401020  55            push ebp              ← 1 字节
20  0040105E  39 4D F4      cmp dword ptr[ebp-0Ch],ecx  ← 3 字节
23  00401066  D1 E2         shl edx,1             ← 2 字节
35  0040107F  C3            ret                   ← 1 字节

长度有 1、2、3 字节三种 变长指令 CISC。

佐证一:寄存器名。 出现 eaxebpecxedx 这套名字就是 x86(IA-32),x86 是 CISC。这一条不算独立判据,但能让结论落到具体架构上。

佐证二:运算类指令能不能直接访存。 看内存操作数([ebp-0Ch]dword ptr [...])有没有出现在非 Load/Store 指令上。

上例中 cmp 是比较指令,一个操作数却直接是内存单元 [ebp-0Ch] 不满足 Load/Store 架构 不是 RISC。

答案怎么写:结论 + 主判据即可。例如——"M 是 CISC。理由:图中指令的机器码长度分别为 1、2、3 字节,指令不定长;而 RISC 采用定长指令字(如 MIPS、RISC-V 为 32 位定长)。从 ebpecxedx 等寄存器名也可判定为 x86,属 CISC。"

这一问只有 2 分,写清"指令不定长"这一条就够。其余角度(是否 Load/Store 架构、指令条数、寻址方式多少)作为备选:万一题面给的片段长度恰好都一样,就换用它们。

现代处理器的融合趋势

现代 x86 处理器(Intel Core, AMD Ryzen)在外部维持 CISC 接口,内部将复杂指令翻译为微操作(μops),用类似 RISC 的核心执行,兼顾兼容性与性能。

ARM 架构从移动端扩展到服务器(Apple M 系列、AWS Graviton),RISC 的能效优势越来越明显。

交互可视化

加载可视化中...

考点清单

  • CISC:变长指令、格式种类多、微程序控制、多寻址方式、少寄存器、指令可直接访存、栈传参
  • RISC:定长指令、格式种类少、硬布线控制、Load/Store 架构、多寄存器、寄存器传参、流水线友好
  • "精简"精简四样:指令条数、指令长度(统一)、指令格式种类、寻址方式——真题把它们并列说"比 CISC 少"是正确叙述
  • 指令定长 ≠ 指令格式种类少,这是两个独立维度,RISC 两样都要
  • "RISC 大多数指令一个时钟周期完成"是正确叙述,说的是 CPI 1 的吞吐,不是一条指令只走一个周期
  • RISC 过程调用多用寄存器传参(MIPS a0~a3、ARM r0~r3),CISC 寄存器少故多用栈
  • RISC 最适合流水线,说"RISC 难以采用流水线"是错的——它整套设计就是为流水线服务的
  • 微程序控制修改灵活但速度慢;硬布线速度快但设计复杂
  • 判断一段反汇编属于哪类:主判据是指令长度是否参差;寄存器名、是否 Load/Store 架构可作佐证
  • 现代 CPU 多为混合架构,内部微操作是 RISC 风格

教材出处

  • 袁春风《计算机组成与系统结构(第 3 版)》§4.2.7 CISC 和 RISC 风格指令系统:CISC 的由来与 RISC 的七条主要特点(p100~101)

教材那七条里第 (2) 条写的是"指令格式规整。寻址方式少、指令格式少、指令长度一致"——一条里并列了三件事,正好印证上文"定长和格式种类少是两个维度"的说法。

真题练习