Appearance
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 完整对比表(核心对比表):
| 对比项 | CISC | RISC |
|---|---|---|
| 设计理念 | 用复杂指令弥合语义鸿沟 | 用简单指令加速执行 |
| 指令数量 | 多(数百至上千条) | 少(几十到百余条) |
| 指令长度 | 可变(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基本特征的辨析。
解题过程:
- 审题分析:逐项判断关于CISC和RISC的描述是否正确。
- 解题思路:回忆CISC和RISC的核心设计特征。
- 完整步骤:
- 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
- 方法反思:这类题需要对CISC和RISC的每个对比维度都清晰。D选项是常见陷阱——CPI(Cycles Per Instruction)不等于性能,性能 = (每秒执行的指令数),但题目问的是CPI本身,CISC平均CPI确实更大。
例题2(中等提升)
题目:某程序中有以下四种指令的使用比例:
| 指令类型 | 使用比例 | CISC方案CPI | RISC方案CPI |
|---|---|---|---|
| 算术/逻辑指令 | 40% | 1 | 1 |
| 传送/访存指令 | 30% | 2 | 1(Load/Store) |
| 转移指令 | 20% | 3 | 1 |
| 复杂指令 | 10% | 5 | 由编译器拆分为多条简单指令执行 |
设RISC方案中,复杂指令被拆分为平均4条简单指令,每条CPI=1。时钟周期相同,求两种方案的平均CPI,并比较性能。
命题意图:考查CISC与RISC的CPI计算,以及对"编译器拆分复杂指令"这一RISC设计思想的理解。
解题过程:
审题分析:需要计算加权平均CPI,并理解RISC如何处理复杂指令。
解题思路:CISC直接用加权平均;RISC需要将复杂指令的使用比例分摊到拆分后的简单指令中。
完整步骤:
CISC方案平均CPI:
RISC方案:复杂指令(占10%)被拆为4条简单指令(CPI=1),因此RISC的总指令数增加。设原总指令数为N:
- RISC实际执行指令数 =
- 但每条指令CPI = 1
- 实际上,题目给的"使用比例"在RISC中需要重新计算:
- 算术/逻辑: 条,CPI=1
- Load/Store: 条,CPI=1
- 转移: 条,CPI=1
- 原复杂指令拆分: 条,CPI=1
- 总指令数 =
- RISC平均CPI = 1(所有指令CPI均为1)
性能比较(设时钟周期为 ):
- CISC执行N条指令:总时间 =
- RISC执行1.3N条指令:总时间 =
- RISC性能 / CISC性能 =
- RISC方案性能约为CISC的1.62倍
方法反思:RISC虽然指令数增多(复杂指令被拆分),但由于每条指令CPI低、流水线效率高,总体性能可能更优。这正是RISC设计的核心论证。注意:此题假设时钟周期相同,实际中RISC的时钟频率通常也可以更高(因为流水线级数多),性能差距会更大。
五、考情分析
- 考查频次:近5年真题中几乎每年都有1道选择题涉及CISC vs RISC对比。
- 常见题型:选择题(判断描述正误、对比特征)、偶尔在大题中作为子问题。
- 分值占比:选择题约2分,偶尔结合CPI计算出4分大题。
- 命题趋势:单纯的特征对比题仍然高频,近年趋势是将CISC/RISC与CPI计算、流水线性能分析结合考查。需注意"现代CISC内部已RISC化"这一知识点也偶尔出现。基于大纲与命题规律推测。
六、易错点提醒
① 错误表现:认为"RISC一定比CISC快"。 错误原因:将"指令简单"等同于"速度快",忽略了程序的总指令数增加、编译器质量、缓存命中率等因素。 正确理解:RISC的CPI低,但指令数可能更多。性能 = ,需要综合三个因素。在某些特定工作负载下,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)第一章、第二章