Skip to content

408 计算机组成原理

第四章 指令系统

CO-04-04 CISC与RISC


一、定位信息

  • 圈层标注:核心层(大纲明确要求"CISC和RISC的基本概念")
  • 前置知识回顾:需要了解指令格式(操作码、地址码、指令字长,见CO-04-01)、寻址方式(见CO-04-02)的基本概念。CISC与RISC的对比涉及前面所有指令系统的基础知识。
  • 知识网络定位:CISC与RISC是指令系统设计的两大哲学流派,上承"指令格式"和"寻址方式"的设计选择,下启"控制器设计"(硬布线 vs 微程序),是理解整个CPU设计理念的关键。
  • 考点热度H级(高频重点) —— 近5年真题中几乎每年都有CISC vs RISC的对比选择题,偶尔在大题中作为子问题出现,分值2-4分。

二、知识点讲解

2.1 CISC(Complex Instruction Set Computer,复杂指令集计算机)

核心思想:用更强大、更复杂的指令来简化编译器设计,缩小"语义鸿沟"(高级语言与机器语言之间的差距)。

设计特征

  • 指令系统庞大(数百条甚至上千条指令)
  • 指令长度可变(从1字节到十几字节不等,如x86的1~15字节)
  • 指令格式多样(多种寻址方式、多种地址码个数)
  • 许多指令功能复杂(一条指令可完成多步操作,如字符串操作、内存块拷贝)
  • 大多数指令可以访存(操作数可以在内存中)
  • 采用微程序控制器实现(复杂指令需要多步微操作)
  • 各指令执行时间差异大(简单指令1周期,复杂指令可能几十周期)
  • 典型代表:x86(Intel/AMD)、VAX、IBM 370

为什么CISC设计者认为复杂指令好? 早期(1960-70年代)编译器技术不成熟,硬件设计者希望通过复杂指令直接支持高级语言的语句(如一条指令实现while循环)。同时,内存昂贵,紧凑的编码(变长指令)可以节省存储空间。

2.2 RISC(Reduced Instruction Set Computer,精简指令集计算机)

核心思想:只保留最常用的简单指令,通过提高单条指令执行速度和流水线效率来提升整体性能。

设计特征

  • 指令系统精简(通常只有几十到一百余条指令)
  • 指令长度固定(如MIPS固定32位、RISC-V固定32位基础指令)
  • 指令格式规整(有利于流水线设计)
  • 指令功能简单(每条指令完成的操作单一,大多在1个时钟周期内完成)
  • 只有Load/Store指令可以访存(其余指令的操作数必须在寄存器中 → "Load/Store架构")
  • 采用硬布线控制器实现(简单指令译码快)
  • 通用寄存器数量多(32个或更多),减少访存次数
  • 依赖编译器优化来生成高效代码
  • 典型代表:ARM、MIPS、RISC-V、PowerPC

为什么RISC反而更快? Amdahl定律告诉我们:程序的大部分执行时间花在少数简单指令上(如加法、传送、跳转)。与其让少数复杂指令稍快一点,不如让占绝大多数的简单指令尽可能快。RISC通过固定指令长度、规整格式、硬布线译码、流水线等技术,使简单指令的CPI(每条指令时钟周期数)接近1。

2.3 发展趋势

现代处理器设计中,CISC和RISC的界限在模糊:

  • x86(CISC)内部将复杂指令翻译成类似RISC的"微操作(μops)",内部核心实际上是RISC风格
  • ARM(RISC)也在不断增加新指令(如ARMv8的加密指令、SIMD指令等),变得越来越"复杂"
  • 但两种设计理念在指令集架构(ISA)层面仍有本质区别

三、记忆与理解辅助

① CISC vs RISC 完整对比表(核心对比表):

对比项CISCRISC
设计理念用复杂指令弥合语义鸿沟用简单指令加速执行
指令数量多(数百至上千条)少(几十到百余条)
指令长度可变(1~15字节等)固定(如32位)
指令格式多样规整统一
寻址方式多(十几种以上)少(几种基本方式)
访存限制大多数指令可访存仅Load/Store可访存
通用寄存器数较少(如x86早期8个)较多(32个或更多)
控制器实现微程序控制硬布线控制
CPI(每指令周期数)变化大(1~几十)接近1
流水线效率较难流水线化易于流水线化
编译器复杂度较低(硬件做更多事)较高(编译器需优化)
代码密度高(变长编码紧凑)较低(固定长度有冗余)
功耗较高较低
典型代表x86(Intel/AMD)ARM、MIPS、RISC-V

② 口诀记忆:"CISC靠硬件多干活(微程序、复杂指令),RISC靠编译器多干活(优化调度、寄存器分配)"

③ 三层理解法

  • 表层:CISC指令多而复杂,RISC指令少而简单
  • 中层:CISC用微程序控制器(灵活但慢),RISC用硬布线控制器(快但设计复杂)
  • 深层:CISC的设计假设是"硬件复杂→编译器简单",RISC的设计假设是"硬件简单→编译器复杂"——本质是硬件与编译器之间的复杂度权衡

④ 判断题速查

说法正误解释
"RISC一定比CISC快"取决于具体实现和工作负载
"RISC指令数一定少于128条"没有硬性上限,关键是设计哲学
"CISC不能用流水线"可以,但更难实现(现代x86深度流水线)
"RISC只有Load/Store能访存"这是RISC的核心特征之一
"x86是CISC的典型代表"但其内部实现已RISC化

四、例题与精解

例题1(基础巩固)

题目:以下关于CISC和RISC的描述中,正确的是( )。 A. RISC的指令系统通常比CISC复杂 B. CISC通常采用硬布线控制器 C. RISC通常只有Load和Store指令才能访问主存 D. CISC的CPI通常比RISC更小

命题意图:考查CISC与RISC基本特征的辨析。

解题过程

  1. 审题分析:逐项判断关于CISC和RISC的描述是否正确。
  2. 解题思路:回忆CISC和RISC的核心设计特征。
  3. 完整步骤
    • A选项:"RISC指令系统比CISC复杂"——错误。RISC的设计哲学正是"精简指令",指令数量少、格式规整,远不如CISC复杂。
    • B选项:"CISC采用硬布线控制器"——错误。CISC的复杂指令难以用硬布线实现,通常采用微程序控制器
    • C选项:"RISC只有Load/Store才能访存"——正确。这是RISC的标志性特征——Load/Store架构,所有其他指令的操作数必须在寄存器中。
    • D选项:"CISC的CPI比RISC小"——错误。CISC指令复杂,CPI变化大(简单指令可能1,复杂指令可能几十);RISC的CPI接近1。平均而言,RISC的CPI更小。
    • 答案:C
  4. 方法反思:这类题需要对CISC和RISC的每个对比维度都清晰。D选项是常见陷阱——CPI(Cycles Per Instruction)不等于性能,性能 = 1CPI×Tclk\frac{1}{CPI \times T_{clk}}(每秒执行的指令数),但题目问的是CPI本身,CISC平均CPI确实更大。

例题2(中等提升)

题目:某程序中有以下四种指令的使用比例:

指令类型使用比例CISC方案CPIRISC方案CPI
算术/逻辑指令40%11
传送/访存指令30%21(Load/Store)
转移指令20%31
复杂指令10%5由编译器拆分为多条简单指令执行

设RISC方案中,复杂指令被拆分为平均4条简单指令,每条CPI=1。时钟周期相同,求两种方案的平均CPI,并比较性能。

命题意图:考查CISC与RISC的CPI计算,以及对"编译器拆分复杂指令"这一RISC设计思想的理解。

解题过程

  1. 审题分析:需要计算加权平均CPI,并理解RISC如何处理复杂指令。

  2. 解题思路:CISC直接用加权平均;RISC需要将复杂指令的使用比例分摊到拆分后的简单指令中。

  3. 完整步骤

    CISC方案平均CPICPICISC=0.4×1+0.3×2+0.2×3+0.1×5=0.4+0.6+0.6+0.5=2.1CPI_{CISC} = 0.4 \times 1 + 0.3 \times 2 + 0.2 \times 3 + 0.1 \times 5 = 0.4 + 0.6 + 0.6 + 0.5 = 2.1

    RISC方案:复杂指令(占10%)被拆为4条简单指令(CPI=1),因此RISC的总指令数增加。设原总指令数为N:

    • RISC实际执行指令数 = N×(0.4+0.3+0.2)+N×0.1×4=0.9N+0.4N=1.3NN \times (0.4 + 0.3 + 0.2) + N \times 0.1 \times 4 = 0.9N + 0.4N = 1.3N
    • 但每条指令CPI = 1
    • 实际上,题目给的"使用比例"在RISC中需要重新计算:
      • 算术/逻辑:0.4N0.4N 条,CPI=1
      • Load/Store:0.3N0.3N 条,CPI=1
      • 转移:0.2N0.2N 条,CPI=1
      • 原复杂指令拆分:0.1N×4=0.4N0.1N \times 4 = 0.4N 条,CPI=1
      • 总指令数 = 1.3N1.3N
    • RISC平均CPI = 1(所有指令CPI均为1)

    性能比较(设时钟周期为 TT):

    • CISC执行N条指令:总时间 = N×2.1×T=2.1NTN \times 2.1 \times T = 2.1NT
    • RISC执行1.3N条指令:总时间 = 1.3N×1×T=1.3NT1.3N \times 1 \times T = 1.3NT
    • RISC性能 / CISC性能 = 2.1NT1.3NT1.62\frac{2.1NT}{1.3NT} \approx 1.62
    • RISC方案性能约为CISC的1.62倍
  4. 方法反思:RISC虽然指令数增多(复杂指令被拆分),但由于每条指令CPI低、流水线效率高,总体性能可能更优。这正是RISC设计的核心论证。注意:此题假设时钟周期相同,实际中RISC的时钟频率通常也可以更高(因为流水线级数多),性能差距会更大。


五、考情分析

  • 考查频次:近5年真题中几乎每年都有1道选择题涉及CISC vs RISC对比。
  • 常见题型:选择题(判断描述正误、对比特征)、偶尔在大题中作为子问题。
  • 分值占比:选择题约2分,偶尔结合CPI计算出4分大题。
  • 命题趋势:单纯的特征对比题仍然高频,近年趋势是将CISC/RISC与CPI计算、流水线性能分析结合考查。需注意"现代CISC内部已RISC化"这一知识点也偶尔出现。基于大纲与命题规律推测

六、易错点提醒

① 错误表现:认为"RISC一定比CISC快"。 错误原因:将"指令简单"等同于"速度快",忽略了程序的总指令数增加、编译器质量、缓存命中率等因素。 正确理解:RISC的CPI低,但指令数可能更多。性能 = 指令数CPI×Tclk\frac{\text{指令数}}{CPI \times T_{clk}},需要综合三个因素。在某些特定工作负载下,CISC的复杂指令可能比RISC的多条简单指令组合更快。

② 错误表现:认为"RISC的指令系统很小,所以功能弱"。 错误原因:将"指令数量少"等同于"功能弱"。 正确理解:RISC通过组合简单指令可以实现任意复杂操作,功能并不弱。只是把复杂性从硬件转移到了编译器。"图灵完备"——只要有基本的算术、逻辑、分支和访存指令,就能计算任何可计算的问题。

③ 错误表现:混淆"微程序控制器"与"硬布线控制器"的归属。 错误原因:CISC用微程序(灵活但慢),RISC用硬布线(快但设计复杂),两者的对应关系容易记反。 正确理解:口诀"C微R硬"——CISC用微程序(Microprogrammed),RISC用硬布线(Hardwired)。微程序通过微指令解释执行复杂指令,灵活可修改;硬布线通过组合逻辑直接译码,速度快但修改困难。

④ 错误表现:认为x86是纯CISC,与RISC无关。 错误原因:只看ISA层面的分类,不了解现代x86处理器的内部实现。 正确理解:x86 ISA是CISC风格,但自Intel Pentium Pro(1995年)以来,x86处理器内部将CISC指令翻译为类RISC的微操作(μops),然后用RISC风格的乱序执行引擎处理。这是408偶尔会考的"发展趋势"知识点。


七、来源标注

  • 依据 2026 考研统考大纲"计算机组成原理"部分"指令系统"章节
  • 依据《计算机组成原理》(唐朔飞版)第四章
  • 依据《计算机组成与设计:硬件/软件接口》(Patterson & Hennessy)第一章、第二章

考研全科复习资料 - 基于2026考研统考大纲