计算机组成原理期末复习:高频考点与计算套路全梳理
2026/9/6 19:19:20 网站建设 项目流程

简介:柳州工学院计算机组成原理期末备考专用复习资料,面向该校计算机相关专业学生,旨在帮助快速掌握计算机系统底层运作机制的核心考点,应对期末考试。包内为1个docx格式文档,压缩包大小6.28MB,资料按章节梳理了计算机软硬件概念、三层次结构、冯·诺依曼计算机特点及五大部件功能,详细解释了机器字长、存储容量、运算速度等技术指标,并对系统总线的概念、分类、特性、性能指标、仲裁机制以及单/多/三/四总线结构、DMA总线等易混淆点进行了系统归纳和对比总结,同时配有第一、三章典型习题,并包含计算机发展及应用章节的浏览要点,便于结合教材边学边练。目前已有413人学习浏览,适合考前集中复习、平时查漏补缺,也可作为教师出题或备课的参考资料。 期末这门课,很多同学问我最多的一句话是:“计算机组成原理到底怎么复习?感觉书上的字都认识,连起来就不认识了。”

我太理解这种感觉了。这门课不像高数有明确的套路,也不像编程课能直接上手跑代码,它夹在“硬件”和“软件”中间,抽象概念一堆,知识点又碎又杂。但如果你真把这门课的期末题拿来看一遍,会发现它其实是所有专业课里题型最固定、最有规律可循的一门。尤其像咱们柳州工学院这种以应用型培养为主的学校,期末考察的广度和深度都比较稳定,套路感很强。

这篇文章就是根据我自己的复习经历、翻过的历年真题,以及平时帮同学答疑时积累下来的重点,整理出的一份面向期末的复习主线。不搞那种几百页的PPT搬运,我就按考试真正会考的方向,把知识体系、常见题型、计算套路和记忆方法串一遍,希望能让你少走点弯路。

1. 期末卷子背后的出题逻辑:先搞清楚老师想考你什么

1.1 从“学”到“考”的转变:这门课真正卡人的地方

计算机组成原理这门课的难点在于,它的知识链路特别长。从底层的晶体管、逻辑门,到上层的指令、CPU、操作系统交互,任何一个环节理解不到位,后面就容易断片。平时上课跟着PPT走,好像什么都听懂了,但一到期末复习就会发现:脑子里没有一条完整的主线

其实期末复习和平时上课完全是两回事。上课追求的是“理解”,期末追求的是“能写”。很多概念不需要你像专家一样透彻理解,但必须能在卷面上表达出来。比如“中断的处理流程”,你不需要真去写一个中断服务程序,但得能把“关中断、保存断点、识别中断源、保护现场、执行中断服务、恢复现场、开中断、返回断点”这个流程写完整。

所以,复习的第一步不是打开书从头看,而是先建立“考试思维”:这门课期末到底考什么题型,哪些知识点是用来出计算题的,哪些是用来出简答题的,哪些只需要混个眼熟。有了这个框架,再去看书,效率完全不一样。

1.2 各章节的分数权重与常考题型分布

根据我搜集到的历年期末信息和同学反馈,咱们学校计算机组成原理的期末卷子大致分这么几块:填空/选择、计算题、简答题、综合分析题。虽然每年题型名称可能有变化,但核心考察范围基本固定。

我整理了这份分布表,你可以对照着自己复习:

章节板块常考题型重要程度
数据的表示与运算(补码、原码、反码、移码)填空、选择、计算极高,必考
运算器与ALU(加法器、进位链)选择、计算
存储系统(Cache、主存扩展、虚拟存储)计算、综合分析极高,计算大项
指令系统(MIPS指令、寻址方式)选择、简答、实验
CPU结构与指令周期(数据通路、控制器)简答、综合分析
总线与I/O方式(中断、DMA)选择、简答中高

这个表说明一个道理:数据表示和存储系统占了大头,这两块拿不下,期末就很悬。而总线和I/O相对独立,背下来就能拿分,属于性价比最高的部分。下面我按这个优先级,把每块的核心考法掰开揉碎讲一遍。

2. 数据表示与运算器:补码、溢出、进位链一个都不能少

2.1 补码运算与溢出判断的两种标准写法

数据表示这块,期末考试最爱的就是补码加减法。原因很简单,它既能考你对补码的理解,又能考运算能力,还容易设置陷阱。需要注意,补码的英文是Two's complement,很多人会误以为补码就是对原码按位取反加一,这么说不太准确。按位取反加一只是从原码求补码的操作方法,补码的本质是一种有符号数的二进制编码方案,它让减法可以统一用加法来做。

考试题型通常是:给出两个十进制数,要求转换成补码后相加或相减,然后判断是否溢出、写出结果的真值。这里有个最稳妥的解题模板:

  1. 写出两个数的二进制补码表示(注意位数,通常给8位或16位)。
  2. 按二进制加法规则逐位相加。
  3. 判断溢出,两种方法任选一种:
    • 双符号位法:补码的符号位复制成两位,比如正数记00,负数记11。相加后如果两位符号位不同(0110),说明溢出;并且01表示正溢出,10表示负溢出。
    • 单符号位+进位法:看最高数值位向符号位的进位和符号位向更高位的进位,两者不同则溢出。

我建议考试用双符号位法,因为它不仅能判断是否溢出,还直接告诉你溢出的方向,答案写起来更完整。

大家容易错的地方在于:把两个正数相加得到负数,或者两个负数相加得到正数,这一定是溢出。而一正一负相加,不可能溢出。有了这个前置判断,很多题不用算都知道结果。

还有一个高频考点是移位运算。算术左移一位相当于乘2,算术右移一位相当于除以2(负数注意是向下取整),补码的算术右移是符号位扩展。这里经常出选择题问“某补码左移一位后是多少,是否溢出”,考的就是你对移位过程中符号位变化的敏感度。

2.2 串行进位与并行进位:一眼看穿加法器快慢的本质

热搜里出现了“计算机组成原理组间串行进位”,这是很多同学的痛点。其实这个问题没那么玄乎,理解它的核心就一句话:进位是加法器里最花时间的路径。

全加器要输出一个正确的和,必须等低位的进位传上来。如果32位加法器每一位都等着前一位的进位,那最坏情况进位要从最低位一路传到最高位,就像一排人传话,效率极低。这就是串行进位(行波进位)加法器

考试可能让你画4位串行进位加法器的连接图,或者问它的延迟时间。计算公式也简单:设每位产生进位的时间为t,那么n位串行进位加法器的总延迟大约是n倍的进位延迟(严格说还要加本位的和延迟,但期末一般简化处理)。

并行进位(先行进位)加法器的思路是:不再等低位进位传上来,而是直接通过逻辑电路提前“算”出每一位可能用到的进位。它引入了两个关键信号:进位生成函数G_i = A_iB_i(本位的两个输入都是1,必然产生进位)和进位传递函数P_i = A_i⊕B_i(只要有一个输入为1,低位进位就能传上来)。于是:

C_{i+1} = G_i + P_i·C_i

不断展开这个式子,你会发现C_{i+1}可以直接由C_0和各位的G、P算出来,不再依赖逐位传播。这就是并行进位的原理。

组间串行进位的意思是:组内用并行进位,组间再串行连接。比如4位一组先行进位,然后把4组串起来。这道题考的是你对“局部最优”的理解,而不是让你设计电路,所以抓住“组内并行、组间串行”这八个字,选择题基本能拿下。

3. 存储系统与Cache:计算题的重灾区

3.1 存储层次结构与Cache映射方式

存储系统这块,期末综合分析题十有八九会出现Cache。原因很好理解:Cache是冯·诺依曼瓶颈下最经典的解决方案,而且它的计算有标准套路,改几个参数就是一道新题。

先理清存储层次:寄存器→Cache→主存→磁盘,速度依次变慢,容量依次变大,单位成本依次变低。这中间的关键知识点是局部性原理:时间局部性(刚访问的地址很快会被再次访问)和空间局部性(访问了一个地址,附近的地址也很快会被访问)。Cache能生效,靠的就是这两条。

Cache的三种映射方式是必考:

  • 直接映射:主存块只能放到Cache中唯一的一个位置。公式是Cache行号 = 主存块号 mod Cache行数。优点是硬件简单,缺点是容易冲突。
  • 全相联映射:主存块可以放到Cache任意位置。最灵活,但比较电路复杂。
  • 组相联映射:两者折中。Cache分组,主存块可以放到指定组内的任意一行。公式是Cache组号 = 主存块号 mod Cache组数

计算频率最高的是直接映射和组相联映射,要会填“标记”和“有效位”的那一张表。这里有一个细节很多人丢分:主存地址拆分为“标记 + Cache行号/组号 + 块内地址”三段,块内地址的位数由块大小决定,Cache行号/组号位数由Cache行数/组数决定,剩下的高位才是标记。

3.2 Cache平均访问时间计算:背公式不如会推导

Cache命中率的计算和平均访问时间是期末的经典大题。公式长这样:

平均访问时间 = 命中率 × Cache访问时间 + 未命中率 × (主存访问时间 + Cache访问时间)

注意这里的细节是,未命中时要先把数据从主存调入Cache,然后还要再访问一次Cache才能拿到数据,所以未命中的总时间是“主存访问时间 + Cache访问时间”,两个都要算。

举例:Cache访问时间为5ns,主存访问时间为50ns,命中率为92%,平均访问时间是多少?

平均访问时间 = 0.92 × 5 + 0.08 × (50 + 5) = 4.6 + 4.4 = 9ns

如果试卷设置了“先访问Cache判断是否命中,未命中再访问主存”,那么平均访问时间 = 命中率 × 5 + 未命中率 × 50,结果是0.92×5 + 0.08×50 = 4.6+4 = 8.6ns。这两种算法结果不一样,关键在于看清题目描述的是“同时访问”还是“顺序访问”。期末题一般会说是“同时访问”,也就是先并行访问Cache和主存,命中了就返回,没命中再等主存结果,用第一种算法。

还有一个相关概念是替换算法,常考“先进先出(FIFO)”和“近期最少使用(LRU)”。LRU需要记录每行的使用情况,题目会给访问序列,让你画出每个时刻Cache的状态变化。做题时用表格一行一行推,不要心算,这种题一步错就会连环错。

3.3 主存扩展与芯片计算

除了Cache,存储芯片的扩展也是高性价比考题。核心是区分两种扩展:

  • 位扩展:增加字长。比如用8片8K×1位的芯片组成8K×8位的存储器,也就是8片并联,每片提供1位数据。地址线不变,数据线变多。
  • 字扩展:增加容量。比如用4片8K×8位的芯片组成32K×8位的存储器。此时数据线不变,地址线多了2位,高位地址通过译码器选中不同的芯片。

这部分的计算套路是:给定CPU地址线位数和数据线位数,计算需要的芯片数量和地址范围。比如CPU有16根地址线,地址空间为0000H~FFFFH,如果使用8K×8位的芯片,16K=2的14次方,所以需要2的16次方÷2的13次方=8片。这里的计算别搞混单位:8K=8×1024=2的13次方。

另外一个常考公式是存储器带宽带宽 = 工作频率 × 总线位宽 ÷ 8,单位是B/s。考试如果给频率和位宽,直接套公式,注意换算单位。

4. MIPS与MARS:期末实验和简答题的固定考点

4.1 为什么教学都选MIPS而不是x86

热搜里出现了“北航计算机组成原理课程设计 preproject-mips-mars”,说明MIPS和MARS这套组合已经成了国内高校计组实验的主流。咱们学校虽然没有北航那么硬核,但MIPS指令的教学和实验基本上也是跑不掉的。

这里先回答一个很多同学都会有的疑问:为什么都2025年了,教学还选MIPS这种“老古董”指令集,不教x86或者ARM?原因很简单,MIPS是教学用的“完美标本”,而不是工业界的“实用工具”。MIPS指令长度固定(32位),格式规整,寻址方式少,一条指令干一件事。相比之下,x86是可变长指令,一条指令能带好几个操作数,还带各种前缀和修饰符,作为工业品很强,但作为教学内容就是灾难。

所以期末复习MIPS时,不需要你变成一个汇编高手,但要做到三件事:看得懂MIPS指令、能写出简单的MIPS代码、知道指令在CPU里是怎么走完生命周期的。

4.2 MARS环境搭建与调试技巧

MARS是MIPS Assembler and Runtime Simulator,一个Java写的MIPS模拟器。使用它不需要安装,只需要两步:

  1. 确认电脑有Java运行环境。在命令行执行java -version,如果提示找不到命令,先去官网装一个JDK,这里推荐装Java 8或Java 11,太新的版本偶尔会有兼容问题。
  2. 下载MARS的jar文件,双击运行,或者在命令行执行java -jar MARS.jar

打开MARS后,界面分几个区域:左侧是代码编辑区,右侧是寄存器区、数据段区和指令执行区。默认显示的数字是十进制,调试浮点时记得把显示模式切到浮点。

实验中最常用的操作是单步执行。按F7执行当前指令,然后看右边寄存器值的变化。排查逻辑错误时,我习惯在关键位置设置断点(在代码行号上双击),然后按F5直接运行到断点,再逐句检查寄存器状态。这个过程就像Debug一样,一条指令对应一个寄存器变化,很容易定位错误。

有一个新手特别容易踩的坑:MARS的“设置→Assemble global”选项,如果代码里有main:之外的全局标签,必须勾选这一项,否则汇编会报错“label out of range”或者“invalid program counter value”。还有一个常见坑是数据段地址冲突,如果你用.data声明数据,但声明顺序和内存布局没规划好,运行时会覆盖到代码段。

4.3 MIPS指令的考试记忆主线

MIPS期末常考的指令其实不多,核心就是那三类:

  • 运算指令addsubaddi(立即数加法)、andorsll(逻辑左移)、srl
  • 数据传输指令lw(load word,从内存读32位)、sw(store word)、lb/sbla(加载地址)。
  • 分支跳转指令beq(相等则跳转)、bne(不等则跳转)、j(无条件跳转)、jal(跳转并保存返回地址,用于函数调用)、jr(跳转到寄存器中的地址,用于函数返回)。

记忆主线可以这样走:先说运算,再说访存,最后说控制流。考试如果出“将下面高级语言翻译成MIPS汇编”,大概率就是从这三类里挑组合。

翻译技巧也有规律。比如if (i == j) x = y + z;,对应的MIPS是:

add $t0, $s1, $s2 # $t0 = y + z bne $s3, $s4, L # 如果i不等于j,跳到L跳过赋值 add $s0, $zero, $t0 # x = $t0 L: ...

注意MIPS里没有if结构,一切都能用beq/bne加跳转标签实现。写的时候千万别漏了标签定义,一个缺失的标签在汇编时就会报错。

还有一个高频填空:MIPS的寻址方式,包括立即数寻址、寄存器寻址、基址寻址(lw $t0, 8($s1)里的8($s1))、PC相对寻址(分支指令)。这几个名字要能对号入座。

5. CPU组成与指令周期:背诵题的得分区

5.1 数据通路:从取指到执行的完整路径

CPU这块,期末简答题和综合分析题常考的角度是:给出某条MIPS指令(比如lw或者beq),让你描述它在CPU内的执行过程。这考察的是你对数据通路的理解。

lw $t0, 8($s1)为例,它的完整执行路径是:

  1. 取指周期:PC把指令地址送到指令存储器,取回指令,同时PC自增4(MIPS按字节寻址,一条指令4字节)。
  2. 译码/读寄存器周期:指令中的rs字段(这里是$s1)送到寄存器堆读出,同时控制信号被译码出来。注意MIPS的寄存器堆是两读一写,所以可以同时读两个源寄存器。
  3. 访存计算周期:ALU计算出“$s1的值 + 立即数8”作为内存地址,即有效地址。
  4. 访存周期:数据存储器根据这个地址读出对应的32位数据。
  5. 写回周期:读出的数据写回寄存器堆的rt字段(这里是$t0)。

期末如果让你写步骤,就按“取指→译码→执行→访存→写回”这个五段式顺序写,别跳步。有的题只要求说“执行了哪些微操作”,那就要把每一步里的关键动作写出来,比如“生成控制信号RegWrite=1”这种,说明你懂硬件的控制逻辑。

对比beq指令:取指后读rs和rt两个寄存器值,ALU做减法或比较,如果相等就跳转,PC改为“当前PC + 4 + 偏移量×4”。这里的偏移量是相对于PC+4的,不是当前PC,这是个经典扣分点。

5.2 硬布线控制器与微程序控制器的对比记忆

控制器的实现方式也是简答题的高频素材。题目一般是“比较硬布线控制器和微程序控制器的特点”。

硬布线控制器是“用数字电路直接实现控制逻辑”,优点:速度快,适合RISC和流水线;缺点:设计复杂,修改困难。微程序控制器是“把控制信号编码成微指令存放在控制存储器中”,优点:灵活,修改方便,适合复杂指令;缺点:速度慢,因为每条机器指令要执行多条微指令。

考试如果问“某机器采用微程序控制,一条机器指令的执行包括哪些步骤”,标准回答是:取微指令→译码→执行微操作→取下一条微指令,直到遇到“取机器指令”的微指令为止。

这个板块还有一个高频名词解释:流水线冒险。至少要知道三种:

  • 结构冒险:硬件资源冲突,比如同时要访问指令存储器和数据存储器。
  • 数据冒险:后面的指令需要前面指令还没算完的数据,典型的是add $t0, $s1, $s2后面紧跟add $s3, $t0, $s4
  • 控制冒险:分支指令还没判断出结果,后续指令不知道要不要执行。

期末如果考到这里,可能让你提出解决方案。数据冒险可以用转发(forwarding)解决,控制冒险可以用分支预测或者延迟槽解决。MIPS五段流水线里经典的延迟槽设计,就是让分支指令后面紧跟一条无论如何都会执行的指令。

6. 总线和I/O方式:高频简答题的“口诀化”整理

6.1 总线分类与带宽计算

总线这部分,内容相对独立,背了就有分。先记住总线的三个层次:片内总线(CPU内部寄存器之间)、系统总线(CPU与主存、I/O接口之间)、通信总线(计算机与外部设备之间)。

系统总线又分为数据总线(双向,位数等于字长)、地址总线(单向,位数决定寻址空间)、控制总线(传送控制信号,里面有些是单向有些是双向)。这个“三总线”是选择填空的常客,别搞混。

总线带宽的公式一定要背:

总线带宽 = bus宽度(字节) × 总线频率(每秒传送次数)

比如数据总线宽度为32位(4字节),总线频率为100MHz,则带宽是4B × 100M = 400MB/s

如果题目给你的是总线周期而不是频率,那就用“每个总线周期传送字节数 ÷ 总线周期时间”。比如一个总线周期传4字节,周期为200ns,带宽是4B / 200ns = 4B / (200×10⁻⁹s) = 20MB/s

6.2 三种I/O方式对比:程序查询、中断、DMA

I/O控制方式期末简答几乎每年都有,核心就三种:

  • 程序查询方式:CPU不断循环检查设备状态位,直到准备好才传输。优点是简单,缺点是CPU被“占死”了。
  • 中断方式:设备准备好后主动发中断请求,CPU暂时停下当前程序去处理I/O。提高了CPU利用率,但每次中断都要保护现场、恢复现场,开销不小。
  • DMA方式:直接存储器存取。DMA控制器接管总线,在内存和外设之间直接传数据,传输完才通知CPU。适合块设备(磁盘)的大批量数据传输。

考试最爱考的是中断处理流程,默写顺序:

  1. 关中断(保证现场保存不被中断)
  2. 保存断点(保存PC和程序状态字)
  3. 识别中断源、转到中断服务程序
  4. 保存通用寄存器现场
  5. 执行中断服务程序
  6. 恢复现场(恢复各寄存器的值)
  7. 开中断
  8. 返回断点(恢复PC,继续执行原来程序)

这个顺序不能乱。你可以这样记忆:先关门(关中断)→把当前位置记下来(保存断点)→找是谁来的电话(识别中断源)→放下手里的活(保存现场)→接电话(执行服务程序)→把活捡起来(恢复现场)→开门(开中断)→继续干活(返回断点)。用“关门—记位置—找电话—放活—接电话—捡活—开门—干活”这个生活场景,比死背强多了。

DMA的简答题常问与中断方式的区别:DMA是“硬件直接完成数据传送”,CPU只在块传输前后介入;中断是“CPU执行程序完成每次数据传输”,每次传一个字或字节都要CPU介入。另外DMA传送过程中CPU可以继续执行其他指令,只是让出总线使用权。

7. 期末冲刺节奏与考场细节

复习时间充裕的同学,建议按“三轮法”来走,别上来就背题。

第一轮(考前两周左右):过教材或PPT,建立知识树。不需要逐字读,重点看每章的小结、例题和公式。把课本和PPT里的课后习题做一遍,特别是数据表示、Cache、存储扩展这三章的例题,因为期末大题很多就是从这些例题改参数来的。

第二轮(考前一周):刷往届题和模拟题。做的时候严格掐时间,尤其是计算题,尽量手写步骤,不要用计算器。考试通常允许带计算器,但补码加减法的题其实用不上,手算还能防止按错键。做完对答案时,不要只看结果,要看步骤和结论文字,因为简答题是按点给分的。

第三轮(考前两天):背诵简答和名词解释,复习错题。这一轮就是背,把中断流程、硬布线vs微程序、三种I/O方式、Cache三种映射对比、补码溢出判断方法这些重点反复默写。很多同学觉得背书是在“死记硬背”,但在计组这门课上,不背的才是真傻,因为简答题的答案是相对固定的,考场上是没有时间现场组织的。

临场考试我还有几个小提醒:

一是控制时间。一般填空和选择题控制在30分钟内,计算和综合分析题留足60分钟,简答题20分钟,最后留10分钟检查。CUZK这种学校的期末题量一般不算特别大,但综合分析题(比如Cache的完整计算)特别耗时间,如果卡在一道题超过15分钟,先跳过,回头再做。

二是计算题必须写公式和中间步骤。即使最终结果算错了,步骤对了也会给分部分数。我见过太多同学直接在答案区写一个结果,算错就是零分,很吃亏。

三是画图题别用铅笔画太淡,老师批卷有时候看不清,白丢分。

四是名词解释、简答题尽量用教材上的表述。你背了王道或者网上笔记的版本也没问题,但关键术语和流程顺序不能错。比如“程序查询方式”你就不能说成“轮询”,虽然意思对,但术语不规范会被扣分。

复习到最后你会发现,计算机组成原理这门课并没有想象中那么不可捉摸。它有一个清晰的骨架:数据怎么表示、运算怎么做、存储怎么分级、指令怎么执行、CPU怎么控制、I/O怎么交互。每一条主线上的核心考点翻来覆去就那么几个,把计算题的套路练熟了,把简答题的框架背顺了,期末拿到一个体面的分数是完全可以做到的。

最后说句实在话,这门课的知识以后考研、做嵌入式、学操作系统都会反复用到。期末复习不只是应付考试,哪怕你考完就忘,大脑里留下的那条“数据通路”的模糊印象,也会在未来的某个专业课学习中被重新唤醒。所以,现在多花的时间,一点都不亏。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询