计算机组成与体系结构期末复习指南:核心考点与避坑技巧 简介这份《西安电子科技大学-计算机组成与体系结构-期末总结》PDF面向正在备考该课程的本科生与考研复习者帮助梳理课程核心考点、建立章节知识框架。内容覆盖计算机系统分类、冯·诺依曼结构、软硬件逻辑等价性、体系结构定义、Amdahl定律及机器字长、MIPS等主要技术指标并延伸至定点与浮点表示、原码补码反码移码等数据表示重点适合期末冲刺与知识点查漏补缺。资源包共1个PDF文件约6.2MB单文件结构便于通读与打印。目前已有2165人学习下载说明其内容经过一定规模的使用检验。读者可借助这份总结快速回顾各章要点对照课堂笔记补齐遗漏尤其适合需要集中突破概念辨析与计算类题目的同学。1. 从一份期末总结说起计算机组成与体系结构到底该怎么复习很多人复习计算机组成与体系结构第一反应是翻教材、抄笔记结果抄完一遍还是不知道哪些是考点、哪些是理解性内容。这份期末总结 PDF 的价值在于它把第一章到第四章的核心概念按知识块重新组织了一遍从冯·诺依曼结构、数的机器码表示到存储系统、指令格式基本覆盖了期末考试的绝大多数出题方向。它适合正在准备期末的本科生也适合考研复习时拿来快速过一遍知识框架的从业者。我拿到这份材料后按章节拆了一遍发现它的组织逻辑是“概念定义 → 分类对比 → 计算规则 → 典型例题”这个顺序恰好和大多数高校的出题习惯吻合。下面按四个知识模块展开把每个模块里最容易翻车的地方标出来。2. 数据表示与运算从原码到浮点流水线的计算规则2.1 四种机器码的转换与取值范围数的机器码表示是第二章的起点也是后面补码加减法、溢出判断的基础。这份总结里把原码、补码、反码、移码的转换规则和取值范围列得很清楚但光看结论容易记混我建议按下面的逻辑重新推一遍。原码的符号位独立于数值位0 正 1 负所以有 0 和 -0 之分。8 位字长下范围是 -127 到 127。补码的核心规则是正数补码与原码相同负数补码从原码右数第一个 1 开始左边全部取反右边不变。补码没有正负零之分8 位范围是 -128 到 127。反码是负数原码除符号位外各位取反同样有正负零。移码最特殊它和补码的符号位互为相反数其余各位相同没有正负零。这里有一个容易翻车的点补码转原码时很多人直接对补码再求一次补就完事但如果补码是 1000 0000即 -128求补后得到的结果会溢出。正确做法是先判断是否为最小负数如果是则单独处理。def twos_complement_to_decimal(binary_str): 将二进制补码字符串转换为十进制整数 binary_str: 8位二进制字符串如 10000000 if binary_str[0] 0: # 正数直接转十进制 return int(binary_str, 2) else: # 负数先减1再取反最后加负号 # 注意-128 是特殊情况减1取反后得到 10000000即 128 inverted .join(1 if b 0 else 0 for b in binary_str) magnitude int(inverted, 2) 1 return -magnitude # 测试 print(twos_complement_to_decimal(10000000)) # -128 print(twos_complement_to_decimal(11111111)) # -1 print(twos_complement_to_decimal(01111111)) # 127这段代码的逻辑是正数补码直接按二进制转十进制负数补码先按位取反再加 1 得到绝对值最后加负号。参数就是一个 8 位二进制字符串返回对应的十进制整数。注意 -128 的情况取反后得到 01111111加 1 变成 10000000即 128加负号后正好是 -128不会溢出。2.2 补码加减法与溢出检测的两种方法补码加减法的公式很简洁[xy]补 [x]补 [y]补 (mod 2)[x-y]补 [x]补 [-y]补 (mod 2)。关键在于溢出判断这份总结给了两种方法。方法一是双符号位变形补码。用 Sf1 和 Sf2 表示两位符号位如果 Sf1 ≠ Sf2则发生溢出。Sf1Sf2 01 表示正溢10 表示负溢。方法二是单符号位看符号位产生的进位 Cf 和最高有效位产生的进位 C0如果 Cf ⊕ C0 1则溢出。我一般会让学生用双符号位法手算一遍再用单符号位法验证两种方法结果一致才放心。实际考试里双符号位法更直观不容易算错。2.3 浮点加减运算的五个步骤与规格化处理浮点加减运算是第二章里步骤最多的一类题总结里列了五个步骤零操作数检查、对阶、尾数加减、规格化、舍入与溢出判断。每一步都有坑。对阶的原则是小阶向大阶对齐尾数右移阶码增加。这里容易搞反方向记住“小向大看齐”就不会错。规格化分两种情况结果是 01.ф…ф 或 10.ф…ф 时需要右规尾数右移一位阶码加 1结果是 00.0…01… 或 11.1…10… 时需要左规尾数左移阶码减 1直到尾数最高位与符号位不同。舍入处理常用“0 舍 1 入”类似四舍五入。溢出判断看阶码阶码上溢表示结果超出最大正指数一般按 ∞ 或 -∞ 处理阶码下溢表示结果小于最小负指数按 0 处理。提示浮点运算题里对阶和规格化是最容易丢分的两步。建议每做一道题先把阶码和尾数分别列出来对阶后再动尾数不要跳步。2.4 流水线加速比的计算与“堵塞”问题浮点运算流水线是第二章的收尾内容也是考试里常出计算题的地方。一个 k 级流水线处理 n 个任务需要的时钟周期数是 k (n-1)所需时间 Tk [k (n-1)] × τ其中 τ 是时钟周期。顺序完成的时间 TL n × k × τ。加速比 S TL / Tk。这里有一个常见误解流水线的加速比不是固定的 k而是随着任务数 n 增大逐渐趋近于 k。当 n 远大于 k 时S ≈ k。另外流水线各段时间应该尽量相等否则会出现“堵塞”和“断流”实际加速比会低于理论值。3. 存储系统SRAM、DRAM、Cache 的选型与计算3.1 SRAM 与 DRAM 的核心区别存储系统是第三章的主体也是整份总结里篇幅最大的一块。SRAM 和 DRAM 的区别是必考内容总结里从存储原理、速度、容量、刷新需求几个维度做了对比。SRAM 的存储元是一个触发器具有两个稳定状态不需要刷新存取速度快但集成度低、功耗大、成本高适合做 Cache。DRAM 的存储元由一个 MOS 晶体管和电容器组成读出是破坏性的必须恢复存储位元中原存的 1因此需要刷新。DRAM 集成度高、功耗低、成本低适合做主存。刷新方式有两种集中式刷新和分散式刷新。集中式刷新把所有行集中在每个刷新周期的一段时间内刷新控制逻辑简单但有 1.024% 的时间不允许访存CPU 需要等待。分散式刷新把每一行的刷新插入到正常的读写周期中提高了效率但控制逻辑复杂。3.2 存储器容量扩展的两种方式存储容量扩充是第三章里计算量最大的题型总结里给了两种方式字长位数扩充和字存储容量扩展。字长位数扩充的例子是 1M×4 位扩展到 1M×8 位。地址线和控制线公用数据线单独分开连接。所需芯片数量 设计要求的存储器容量 / 选择芯片的存储器容量。字存储容量扩展的例子是 1M×8 位扩展到 2M×8 位。地址总线和数据总线公用控制总线中 R/W 公用但使能端 EN 不能公用它由地址总线的高位段译码来决定片选信号。# 计算所需芯片数量的通用公式 # 设计要求的存储器容量 目标字数 × 目标字长 # 选择芯片的存储器容量 芯片字数 × 芯片字长 # 所需芯片数量 设计要求的存储器容量 / 选择芯片的存储器容量 # 示例用 1M×4 位的芯片组成 1M×8 位的存储器 # 目标容量 1M × 8 8M bit # 芯片容量 1M × 4 4M bit # 所需芯片数 8M / 4M 2 片这个公式看起来简单但实际做题时容易把字和位搞混。我一般会先把目标容量和芯片容量都换算成 bit再相除这样不容易出错。3.3 Cache 的三种地址映射方式与替换策略Cache 是第三章的重点也是考试里出题频率最高的知识点之一。总结里把全相联、直接映射、组相联三种映射方式的映射方法、地址划分、优缺点都列了出来。全相联映射是多对多地址分为块号和字两部分内存块写入 Cache 时同时写入块号标记。优点是冲突概率小Cache 利用率高缺点是比较器难实现需要访问速度很快、代价高的相联存储器适用于小容量 Cache。直接映射是一对多映射公式是 i j mod m其中 i 是 Cache 行号j 是主存块号m 是 Cache 总行数。地址分为 tag、行号、字三部分。优点是硬件简单、成本低缺点是冲突概率高适用于较大容量的 Cache。组相联映射是前两者的结合Cache 分组组间采用直接映射组内采用全相联。组号 q j mod u其中 u 是 Cache 的组数。v 1 时退化为直接映射u 1 时退化为全相联。替换策略有三种LFU最不经常使用、LRU近期最少使用、随机替换。LFU 给每个被访问的行计数器加 1换值小的行但不能反映近期 Cache 的访问情况。LRU 给被访问的行计数器置 0其他计数器加 1换值大的行符合 Cache 的工作原理。随机替换就是从特定行位置中随机选一行换出。写操作策略也有三种写回法、全写法、写一次法。写回法是换出时判断修改位决定写回还是舍掉。全写法是写命中时 Cache 与内存一起写。写一次法与写回法一致但第一次 Cache 命中时采用全写法。3.4 Cache 命中率与平均访问时间的计算Cache 性能计算是必考题型。命中率 h Nc / (Nc Nm)其中 Nc 是 Cache 完成存取的总次数Nm 是主存完成存取的总次数。平均访问时间 ta h × tc (1-h) × tm其中 tc 是命中时的 Cache 访问时间tm 是未命中时的主存访问时间。访问效率 e tc / ta 1 / (r (1-r) × h)其中 r tm / tc 表示主存慢于 Cache 的倍率。这个公式在计算题里经常用到建议记住推导过程不要死记结论。注意Cache 命中率计算题里最容易出错的是把“访问次数”和“访问时间”搞混。Nc 和 Nm 是次数tc 和 tm 是时间代入公式前先确认单位一致。4. 指令系统与控制器从指令格式到执行流程4.1 指令格式的三种地址码类型指令系统是第四章的核心总结里从指令格式、操作码、地址码几个维度展开。指令字由操作码字段和地址码字段组成操作码表示指令应进行什么性质的操作地址码指定参与操作的操作数地址。地址码有三种类型三地址指令、二地址指令、一地址指令、零地址指令。三地址指令格式是操作码 θ、第一操作数 A1、第二操作数 A2、结果 A3。二地址指令是操作码 θ、第一操作数 A1、第二操作数 A2。从操作数的物理地址归结为三种类型SS存储器-存储器、RS寄存器-存储器、RR寄存器-寄存器。RR 类型最快SS 类型最慢。指令字长度等于机器字长的称为单字长指令等于半个机器字长的称为半字长指令等于两个机器字长的称为双字长指令。4.2 控制器的工作流程取指周期与执行周期控制器是计算机的指挥中心它的基本任务是按照一定顺序一条接一条取指令、指令译码、执行指令。控制器按照时序工作通常分为取指周期和执行周期。取指周期从内存读出的信息流是指令流它流向控制器。执行周期从内存读出的信息流是数据流它由内存流向运算器。这里有一个经典考题CPU 如何识别从主存取出来的二进制代码是指令还是数据答案是从时间来说取指令事件发生在取指周期取数据事件发生在执行周期从空间来说取出的代码是指令一定送往指令寄存器控制器取出的代码是数据一定送往数据寄存器运算器。4.3 CISC 与 RISC 的选型差异指令系统的发展分为两个方向复杂指令系统计算机CISC和精简指令系统计算机RISC。CISC 的指令数量多、格式复杂、寻址方式多典型代表是 Pentium 指令格式指令长度可变最短 1 个字节最长 12 个字节。RISC 的指令数量少、格式规整、寻址方式少适合流水线实现。指令系统的性能要求包括完备性、有效性、规整性、兼容性。完备性是指用汇编语言编写各种程序时指令系统直接提供的指令足够使用而不必用软件来实现。有效性是指利用该指令系统所编写的程序能够高效率地运行。规整性包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。兼容性是指系列机各机种之间具有相同的基本结构和共同的基本指令集。5. 避坑与排查复习这份总结时最容易翻车的五个地方5.1 补码转原码时忽略最小负数现象把 1000 0000 当作补码转原码时直接取反加一得到 1000 0000误以为结果是 -0 或溢出。原因补码的 -128 没有对应的原码表示取反加一后会回到自身形成循环。解决先判断补码是否为 1000 0000如果是则直接输出 -128不要走取反加一的流程。5.2 浮点对阶时搞反方向现象对阶时把大阶向小阶对齐导致尾数左移、阶码减小最终结果完全错误。原因记混了“小阶向大阶看齐”的原则或者把阶码比较和尾数移位搞反了。解决对阶前先把两个数的阶码写出来明确哪个大哪个小小阶的尾数右移每右移一位阶码加 1直到两个阶码相等。5.3 Cache 地址映射时混淆块号和行号现象直接映射计算时把主存块号直接当作 Cache 行号忽略了取模运算。原因没有理解 i j mod m 的含义m 是 Cache 总行数不是主存块数。解决做题时先把 Cache 行数 m 算出来再用主存块号 j 对 m 取模得到 Cache 行号 i。地址划分时tag 是主存块号的高位部分行号是低位部分。5.4 存储器扩展时字和位混淆现象计算所需芯片数量时把 1M×4 位当成 1M×4 字节导致结果差 8 倍。原因没有区分“字”和“位”的单位1 字节等于 8 位1M×4 位是 4M bit不是 4M 字节。解决统一换算成 bit 再相除。目标容量 目标字数 × 目标字长芯片容量 芯片字数 × 芯片字长两者单位一致后再相除。5.5 流水线加速比计算时忽略装入和排空时间现象直接用 k 作为加速比忽略了流水线需要装入时间和排空时间。原因没有理解 k 级流水线处理 n 个任务的实际周期数是 k (n-1)而不是 n × k。解决先算实际周期数 k (n-1)再算顺序完成周期数 n × k两者相除得到加速比。当 n 远大于 k 时加速比才趋近于 k。6. 把这份总结用出最大价值我的复习节奏与验证方法这份总结 PDF 的信息密度很高如果只是从头翻到尾很容易陷入“看了后面忘了前面”的循环。我自己的做法是分三轮走。第一轮用 30 分钟快速过一遍目录和每章的小标题把知识框架画出来。第一章是计算机系统概述第二章是数据表示与运算第三章是存储系统第四章是指令系统。四章之间的逻辑是先讲计算机整体结构再讲数据怎么表示和运算然后讲数据存在哪里最后讲指令怎么控制数据流动。第二轮按章节精读每读完一章就做三件事把公式抄一遍、把例题手算一遍、把易错点标出来。比如第二章的补码加减法和浮点运算我会用 Python 写一个小脚本验证手算结果。下面这个脚本可以验证补码加法的溢出判断。def twos_complement_add(a, b, bits8): 模拟补码加法并判断溢出 a, b: 十进制整数 bits: 字长默认8位 返回: (结果, 是否溢出, 溢出类型) mask (1 bits) - 1 # 转为补码二进制 a_bin a mask b_bin b mask # 相加 result (a_bin b_bin) mask # 判断溢出双符号位法 # 取符号位 sign_a (a_bin (bits - 1)) 1 sign_b (b_bin (bits - 1)) 1 sign_r (result (bits - 1)) 1 overflow (sign_a sign_b) and (sign_r ! sign_a) # 转回十进制补码解释 if result (1 (bits - 1)): result result - (1 bits) return result, overflow # 测试127 1 应该溢出 print(twos_complement_add(127, 1)) # (-128, True) # 测试-128 (-1) 应该溢出 print(twos_complement_add(-128, -1)) # (127, True) # 测试100 50 不溢出 print(twos_complement_add(100, 50)) # (150, False)这段代码的逻辑是先把两个十进制数转成补码二进制相加后取低 bits 位然后比较符号位判断溢出。参数 bits 可以改成 16 或 32验证不同字长下的溢出情况。注意 Python 的整数没有溢出概念所以需要用掩码模拟。第三轮是考前一周只看自己标注的易错点和公式不再从头翻。这时候这份总结的价值就体现出来了——它的结构足够清晰可以直接当速查表用。提示如果你手头有历年真题建议把真题里的计算题按章节分类对照这份总结的公式和例题逐一验证。计算题的分值通常占 40% 以上手算一遍比看十遍都管用。从那以后我每次复习这类偏计算的课程都会先找一份结构清晰的总结然后按“框架 → 公式 → 例题 → 易错点”四步走不再盲目抄笔记。希望帮到你。本文还有配套的精品资源点击获取