王道《计算机组成原理》核心考点讲义
面向零基础 / 跨考小白 · 配合《小白 21 天学完王道计算机组成原理日程表》使用
用法:每章先看 CodeBrick 动画建立画面(计组 Visual 总入口 roadmap ;计组 Blog 图文总入口 co-blog )→ 读王道对应节 → 做本节「习题精选」→ 用本讲义「自测」验收。
计组是 408 里最"硬核"的一门:它不像 OS 偏概念,而是处处要算(数制、补码、Cache、地址线、流水线)。本讲义把每个必会计算都点出来,照着练就能拿稳分。
第 1 章 计算机系统概述(地基,考频不低,拿分要稳)
1.1 计算机发展历程
核心考点
- 计算机发展的四代划分依据都是电子器件:电子管 → 晶体管 → 中小规模集成电路 → 大规模/超大规模集成电路。
- 摩尔定律:集成电路上可容纳晶体管数约每 18 个月翻一番(描述性能/集成度趋势,不是严格定律)。
- 冯·诺依曼机(存储程序思想)的六大特点:
- 采用二进制表示指令和数据;
- 存储程序控制(程序和数据放在同一存储器,按地址访问);
- 计算机由运算器、控制器、存储器、输入设备、输出设备五大部件组成;
- 指令由操作码 + 地址码组成,按顺序存放;
- 运算器为中心(早期冯氏结构,现代已改为存储器为中心);
- 指令和数据同等地位存于存储器,可按地址寻址。
- 现代计算机以存储器为中心,解决运算器 bottleneck。
易错警示
- 冯氏结构"运算器为中心"是历史原貌,考题若问"现代计算机"则以存储器为中心,二者别混。
- 存储程序 ≠ 存储数据:是指令和数据都可存储、都可被地址访问,这是"程序可在运行中修改自身"的根本原因(也是早期病毒/自修改代码的来源)。
CodeBrick 配合(直达链接):
自测:① 冯氏机六大特点能背几条;② 四代划分标志是什么;③ 现代计算机和冯氏原结构在"中心"上有何不同。
1.2 计算机系统层次结构
核心考点
- 计算机系统的多级层次(自下而上):微程序机器级(微指令)→ 传统机器级(机器指令/机器语言)→ 操作系统级(系统调用)→ 汇编语言级 → 高级语言级 → 应用层。
- 翻译 vs 解释:翻译(编译)一次性把源程序全变目标程序再执行;解释逐条翻译逐条执行(如 BASIC、Java 字节码常配解释器)。
- 编译型(C/C++)生成独立目标码;解释型边翻边跑。
- 硬件与软件在逻辑上等价:一条用软件实现的指令,原则上也能用硬件实现(固件 = 软件固化进 ROM/微程序)。
- 关键寄存器:MAR(存储器地址寄存器) 位数决定可寻址存储单元个数(2^MAR位数);MDR(存储器数据寄存器) 位数 = 存储字长(或一次读写的数据位数)。
- PC(程序计数器) 存下一条要执行指令的地址;IR(指令寄存器) 存当前正在执行的指令。
- 透明的概念:某些硬件对程序员"透明"(如 MAR、MDR、Cache、数据通路细节),高级语言程序员看不到。
易错警示
- MAR 决定"能编多少个地址"即主存容量上限;MDR 决定"每个存储字多少位"即存储字长。很多题给"地址线 20 根、数据线 16 根"就要立刻反应:2^20 单元 × 16 位/单元。
- "编译 vs 解释"容易记反:编译是"先翻完再跑",解释是"翻一句跑一句"。
- 透明性是高频考点:问"对汇编程序员透明的有哪些"——通常是 MDR、MAR、Cache、虚拟存储器、流水线寄存器,而通用寄存器、PSW、PC 不透明。
CodeBrick 配合(直达链接):
自测:① MAR/MDR 各管什么;② 编译和解释区别;③ 列举 3 个对汇编程序员透明的部件。
1.3 计算机的性能指标
核心考点
- 机器字长:CPU 一次能处理的二进制位数(通常 = 寄存器宽度 = 数据总线宽度),决定运算精度。
- 主频 / 时钟周期:主频 f(Hz),时钟周期 T = 1/f。
- CPI(Cycles Per Instruction):执行一条指令所需平均时钟周期数。
- CPU 执行时间 = 指令条数(IC) × CPI × 时钟周期 T = IC × CPI / f。
- MIPS = 指令条数 / (执行时间 × 10^6) = f / (CPI × 10^6)。
- FLOPS:每秒浮点运算次数(科学计算常用)。
- 吞吐量:单位时间完成的任务数;响应时间:从提交到完成的时间。
- 基准程序(benchmark)测性能,注意不能只看主频——CPI 和指令集效率同样关键("主频高≠跑得快")。
易错警示
- CPU 执行时间公式里三个量乘积关系,降低任何一个都能提速,但只堆主频没用(还要看 CPI 与 IC)。
- MIPS 越大越快,但比较 MIPS 必须同指令集架构才有意义;不同机器间直接比 MIPS 不公平。
- 注意区分时钟周期、机器周期(总线周期)、指令周期三者层次:指令周期 > 机器周期 > 时钟周期。
CodeBrick 配合(直达链接):
自测:① 写出 CPU 执行时间公式;② 给了 IC、CPI、f 能算执行时间;③ 为什么主频高不一定快。
视频关联(点关键词跳到对应集)
- 📺 知识点精讲(BV1ps4y1d73V):1(p4)、1.1(p3)、1.2(p4)、1.2.1(p4)、1.2.2(p5)、1.2.3(p6)、1.2.4(p7)、1.2.5(p8)、1.3(p9)
- 📺 选择题精讲(BV1Bh5Yz3EAJ):1(p1)、1.2(p3)、1.3(p7)
第 2 章 数据的表示和运算(408 计算题第一主力,必须拿满)
2.1 数制与编码
核心考点
- 进位计数制转换:R 进制 → 十进制用"按权展开"(如 (101.1)_2 = 1×2²+0+1×2⁰+1×2⁻¹ = 5.5);十进制 → R 进制"整数除基取余、小数乘基取整"。
- 二/八/十六进制互换:三位二进制 ↔ 一位八进制,四位二进制 ↔ 一位十六进制。
- 真值与机器数:真值是实际数值,机器数是存入机器的编码(含符号位)。
- 原码:符号位 0 正 1 负,数值位不变。范围(n 位机,含 1 位符号):-(2^{n-1}-1) ~ +(2^{n-1}-1),有 +0 和 -0 两种零。
- 反码:正数同原码;负数符号位 1、数值位按位取反。范围同原码。
- 补码:正数同原码;负数 = 反码 + 1(或"从右数第一个 1 及其右不变,其左取反")。范围 -2^{n-1} ~ +(2^{n-1}-1),只有一种零,且比原码多表示一个负数(如 8 位补码可表示 -128)。
- 移码:= 真值 + 偏移量(通常 2^{n-1}),只用于阶码。移码和补码数值位相同、符号位相反;移码便于比较大小(全 0 是最小真值)。
- 定点数:小数点位置固定。定点整数(纯整数)/ 定点小数(纯小数,小数点在符号位后)。
- BCD 码(8421):4 位二进制表示 1 位十进制,逢 9 加 6 修正(>9 或产生进位时 +6)。
- 字符与汉字:ASCII(7 位,128 个,最高位常作校验);汉字用 2 字节(GB2312 等)。
- 校验码:奇偶校验(1 位,只能检错不能纠错);海明码(可检 1 错纠 1 错,校验位数 r 满足 2^r ≥ k+r+1);循环冗余校验 CRC(多项式模 2 除,可检多位错)。
易错警示
- 原码/反码范围对称且有 ±0 两种零;补码多表示一个数(-2^{n-1}),这是选择题最爱考的点。8 位补码范围 [-128, 127],不是 [-127,127]。
- 移码只看阶码比较用,且0 的移码唯一(全 0),和补码不同(补码 0 唯一但移码是全 0 对应真值 -2^{n-1} 偏移)。记住:移码 = 补码符号位取反。
- 海明码校验位数 r 公式 2^r ≥ k+r+1 必须背;常考"k 位数据需要几位校验位"。
- 补码求负数真值:"按位取反加 1 回到原码"只对负数成立,正数补码即原码。
CodeBrick 配合(直达链接):
自测:① 8 位补码范围是多少、为什么比原码多一个负数;② 给十进制求 8 位补码;③ 16 位数据需要多少位海明校验位。
2.2 运算方法和运算电路
核心考点
- 补码加减:[A+B]_补 = [A]_补 + [B]_补;[A-B]_补 = [A]_补 + [-B]_补(变补:[−B]_补 = 对 [B]_补 连同符号位取反加 1)。符号位参与运算,结果自然得补码。
- 溢出判断(三种方法,必考):
- 双符号位法(模 4 补码):结果双符号位 01 正溢、10 负溢、00/11 正常;
- 单符号位:符号位进位 Cf 与最高数值位进位 C1 异或,V = Cf ⊕ C1(V=1 溢出);
- 符号位判别:两同号数相加结果异号即溢出。
- 一位乘法:原码一位乘(符号位异或、数值位逻辑移位相加);补码一位乘(Booth 算法,符号位参与,加减交替)。
- 一位除法:原码恢复余数法 / 加减交替法(不恢复余数法)。
- 运算电路:ALU 是核心,由加法器(全加器串行/并行进位) 构成;并行进位(先行进位/CLA) 提速;移位器、多路选择器配合。
- 标志位:运算后 CF(进位/借位)、OF(溢出)、SF(符号)、ZF(零)等,是条件转移依据。
- 补码求模 / 取负:[-X]_补 的求法(取反加 1),以及"补码左移补 0、右移补符号位"。
易错警示
- 溢出(OF)≠ 进位(CF):无符号数看 CF,有符号数看 OF。两正数相加得负(或两负数得正)才是溢出。选择题常给"有进位但没溢出"的陷阱。
- 补码加减统一用加法器;减法靠"变补"转加法,符号位参与运算,不需要单独判断。
- 移位:逻辑移位补 0;算术右移补符号位(保持符号),算术左移补 0 但要防溢出。
- 乘法 Booth 算法是 408 大题常客,记住规则:当前位与后一位组合(00 原样右移、11 原样右移、01 加[-A]、10 加[+A]),最后一步不右移。
CodeBrick 配合(直达链接):
自测:① 用双符号位判断溢出;② 写 [A-B]_补 的硬件做法;③ Booth 算法 01/10 分别加什么。
2.3 浮点数的表示与运算
核心考点
- 浮点数格式:N = r^E × M(r 基,E 阶码,M 尾数)。机器表示 = 符号位 S + 阶码 E + 尾数 M。
- IEEE 754 标准(必考):
- 单精度(32 位):1 位 S + 8 位阶码(偏移量 127)+ 23 位尾数(隐含最高位 1,实际 24 位精度);
- 双精度(64 位):1 位 S + 11 位阶码(偏移量 1023)+ 52 位尾数(隐含 1);
- 阶码 = 偏移码(移码),即 阶码字段值 = 实际指数 e + 偏移量;
- 规格化:尾数最高有效位为 1(隐含),即 1.M 形式,实数的尾数须满足 1 ≤ |M| < 2(基数 2)。
- 特殊值:阶码全 0 且尾数全 0 = ±0;阶码全 0 且尾数非 0 = 非规约数(subnormal,隐含位为 0,用于渐下溢);阶码全 1 且尾数全 0 = ±∞;阶码全 1 且尾数非 0 = NaN。
- 表示范围与精度:
- 单精度正数范围约 1.18×10⁻³⁸ ~ 3.4×10³⁸,精度(尾数)23+1=24 位 ≈ 7 位十进制有效数字;
- 双精度范围约 2.23×10⁻³⁰⁸ ~ 1.79×10³⁰⁸,精度 52+1=53 位 ≈ 16 位十进制。
- 浮点加减步骤(必会):① 对阶(小阶向大阶看齐,尾数右移,阶码+1);② 尾数加减;③ 规格化(左规/右规);④ 舍入(0 舍 1 入 / 恒置 1 / 截断);⑤ 溢出判断(看阶码是否上溢)。
- 浮点乘除:阶码加减、尾数乘除、规格化与舍入。
- 浮点溢出:尾数上溢/下溢经规格化可消化,真正的溢出看阶码是否超出表示范围。
易错警示
- IEEE754 偏移量:单精度 127、双精度 1023,不是 128/1024(注意是 2^{k-1}-1,k 是阶码位数)。
- 尾数隐含位 1 是规格化数的关键,算真值时 M = 1.尾数,阶码要减偏移:真值 = (-1)^S × (1.M) × 2^(E-偏移)。
- 对阶必须"小阶向大阶",尾数右移会损失低位精度,顺序反了会错。
- 浮点运算溢出看阶码而非尾数;规格化是"1.M"形式,阶码全 0 时变成非规约数(隐含位 0),这是考细节的点。
- 精度位数:单精度 24 位尾数(23+隐含1)、双精度 53 位(52+隐含1),常考"能精确表示几位十进制"。
CodeBrick 配合(直达链接):
自测:① 写出 32 位浮点某十六进制码对应的十进制真值;② 浮点加减五步;③ 单精度偏移量是多少、为什么尾数有 24 位精度。
视频关联(点关键词跳到对应集)
- 📺 知识点精讲(BV1ps4y1d73V):2(p10)、2.1(p10)、2.1.1(p10)、2.1.2(p12)、2.1.4(p14)、2.2(p15)、2.2.1(p18)、2.2.2(p19)、2.2.3(p22)、2.2.4(p28)、2.3(p29)、2.3.1(p32)、2.3.2(p36)、2.3.4(p37)
- 📺 选择题精讲(BV1Bh5Yz3EAJ):2(p8)、2.1(p14)、2.2(p21)、2.3(p30)
第 3 章 存储系统(分值大、计算多,层次结构是核心思想)
3.1 存储器概述
核心考点
- 存储器的分类:
- 按介质:半导体(RAM/ROM)、磁表面(磁盘/磁带)、光(CD);
- 按存取方式:RAM(随机,按地址,存取时间与位置无关)、SAM(顺序,如磁带)、DAM(直接,如磁盘);
- 按读写:RAM(可读写,掉电丢,主存)、ROM(只读/可改写,掉电不丢,BIOS);
- SRAM(触发器,快、贵、耗电,做 Cache)vs DRAM(电容,慢、便宜、需刷新,做主存)。
- 存储器层次结构(速度↑成本↑容量↓):寄存器 → Cache → 主存 → 磁盘 → 磁带。核心思想 = 局部性原理(时间局部性 + 空间局部性)。
- 性能指标:存储容量、存取时间、存取周期(≥存取时间,含恢复)、带宽(= 数据量/时间)、价格。
- 相联存储器(CAM):按内容寻址,Cache 的 TLB/快表、相联查找用。
- ROM 种类:MROM、PROM、EPROM、EEPROM、Flash(闪存)。
易错警示
- SRAM 用触发器不需刷新、速度快,用于 Cache;DRAM 用电容需定期刷新,用于主存。常考"为什么主存用 DRAM、Cache 用 SRAM"。
- 存取周期 ≠ 存取时间,周期更长(含下一次访问前的恢复/充电时间)。
- 层次结构的"金字塔"必须靠局部性才能有效——Cache 命中率高不是偶然,是程序的局部性保证的。
CodeBrick 配合(直达链接):
自测:① SRAM 与 DRAM 区别;② 存储层次从高到低列一遍;③ 局部性原理两大类型。
3.2 主存储器
核心考点
- 主存由存储体 + MAR + MDR + 读/写控制电路组成;地址译码器把地址译成选通行。
- 存储元 → 存储单元 → 存储体:一个地址对应一个存储单元(存储字),字长 = MDR 位数。
- 半导体存储芯片:地址线(决定单元数)、数据线(决定字长)、片选/CS、读/写(WE、OE)。
- 容量计算:容量 = 单元数 × 字长 = 2^(地址线条数) × 数据线条数(按位)。按字节编址时,地址线数 = log₂(字节数)。
- 刷新:DRAM 必须刷新(电容漏电)。集中刷新(死时间/死区)、分散刷新(每次存取顺带刷,无死区但慢)、异步刷新(每行在 2ms 内刷一次,折中)。
- 多体并行存储器:低位交叉编址(地址按模 m 分散到 m 个存储体,可流水连续访问,提高带宽)/ 高位交叉(扩展容量)。
易错警示
- 按字节编址 vs 按字编址:地址线数相同但"一个地址对应多少位"不同。408 题常给"按字节编址、字长 32 位",则一次访存取 4 字节,地址线算的是字节数。
- 低位交叉编址用于提速(流水线访问),高位交叉用于扩容量,别混用途。
- 刷新和"重写/再生"不是同一回事:刷新是 DRAM 定时充电防漏电,与读操作无关但常借用读周期。
CodeBrick 配合(直达链接):
自测:① 给了地址线 14、数据线 8,算容量;② DRAM 三种刷新方式;③ 低位/高位交叉编址分别解决什么。
3.3 主存储器与 CPU 的连接
核心考点
- 地址译码:CPU 地址线分三部分——片内地址(指向芯片内存储单元)+ 片选译码(选哪一片/组)。
- 位扩展:增加字长(数据线不够),多片并联,地址线/片选共用,数据线分高低位。芯片数 = 目标字长 / 单片字长。
- 字扩展:增加单元数(地址空间不够),多片地址线/数据线共用,靠片选信号区分。芯片数 = 目标单元数 / 单片单元数。
- 字位同时扩展:两者都缺,行列组合。
- 片选信号生成:线选法(一根线选一片,简单但地址不连续、扩展受限)、译码片选法(用译码器如 74LS138,地址连续、充分利用)。
- 地址分配与片选逻辑:给定地址范围(如 C000H~C7FFH),反推用几片、译码怎么接。
- 存储器与 CPU 速度匹配:插入等待周期(READY 信号握手);Cache 缓解速度差。
易错警示
- 先算"需要多少片":分别看字扩展倍数(地址空间)和位扩展倍数(数据宽度),总片数 = 二者乘积。这是 408 大题固定题型。
- 地址线分段:低位给片内,高位给片选译码,顺序不能反。给地址范围写片选逻辑时,要把该范围的二进制高位提取出来做译码输入。
- 线选法地址不连续(片选线独占到 1 才有信号),译码片选法才连续,选择题常考"哪种编址地址空间连续"。
CodeBrick 配合(直达链接):
自测:① 用 1K×4 芯片组成 4K×8 存储体,需要多少片、怎么扩展;② 给地址范围画片选译码;③ 线选法与译码法地址是否连续。
3.4 外部存储器
核心考点
- 磁盘:结构 = 盘面/磁道/扇区/柱面。记录密度:道密度、位密度(内道位密度最大)、面密度。
- 磁盘性能指标:容量、转速 RPM、平均寻道时间、平均旋转延迟(= 半圈时间 = 1/(2×RPM/60))、传输时间、平均存取时间 = 寻道 + 旋转延迟 + 传输。
- 磁盘地址:驱动器号 + 柱面(磁道)号 + 盘面号 + 扇区号。
- RAID(独立磁盘冗余阵列):
- RAID 0:条带化,无冗余,提速;
- RAID 1:镜像,100% 冗余,高可靠;
- RAID 2/3/4:少用;
- RAID 5:条带 + 分布式奇偶校验,允许坏 1 块;
- RAID 6:双重校验,允许坏 2 块;
- RAID 10 = RAID 1+0(镜像+条带)。
- 光盘 / SSD:SSD 用闪存,无机械、随机访问快、需磨损均衡(写前擦除、有写入寿命)。
易错警示
- 平均旋转延迟 = 半圈(不是一整圈),即 60/(2×RPM) 秒。很多人算成一整圈。
- RAID 级别特性常考:RAID 0 无冗余、RAID 1 镜像、RAID 5 分布式奇偶(1 块冗余)、RAID 6(2 块冗余)、RAID 10 先镜像再条带。
- 磁盘容量计算要分清"格式化容量 vs 非格式化容量",格式化后可用容量略小。
CodeBrick 配合(直达链接):
自测:① 给转速算平均旋转延迟;② RAID 5 与 RAID 1 冗余区别;③ 磁盘地址由哪几部分组成。
3.5 高速缓冲存储器(Cache,计算大题常客)
核心考点
- Cache 基本原理:利用局部性,把主存部分块拷入高速 SRAM;访问先查 Cache,命中则快,未命中去主存并可能替换。
- 主存地址结构(按映射方式不同):主存地址 = 标记 Tag + 索引(组号/Cache行号) + 块内偏移。
- 三种映射方式(必考对比):
| 映射方式 | 主存块放哪 | 标记位 | 特点 |
|---|---|---|---|
| ---------- | ----------- | -------- | ------ |
| 直接映射 | 固定唯一的 Cache 行(i = j mod C) | 主存字块标记 + 行号 | 冲突率高、电路简单、无需替换算法 |
| 全相联映射 | 任意 Cache 行 | 只主存块标记 | 冲突最低、查找慢(需相联存储器)、贵 |
| 组相联映射 | 固定组内的任意行(组间直接、组内全相联) | 标记 + 组号 | 折中,最常用(如 8 路组相联) |
- Cache 容量计算:Cache 总容量 = 行数 ×(每行数据块大小 + 标记位数 + 有效位 + 一致位/脏位)。注意算容量时要算上标记阵列(Tag + 有效位 + 脏位)。
- 命中率 H、缺失率 = 1-H;平均访问时间(先 Cache):T = H×t_cache + (1-H)×t_main(或含写回的变体)。
- 写策略:写命中——写直达(Write Through,同时写主存) vs 写回(Write Back,仅写 Cache,换出时写回);写不命中——写分配(调入再写) vs 非写分配(直接写主存)。
- 替换算法:随机、FIFO、LRU(最近最少用,最常用)、LFU。
- Cache 一致性:多核/IO 与 Cache 一致(写直达、写无效/写更新协议)。
易错警示
- 组相联地址字段:主存地址 = Tag + 组索引(Set) + 块内偏移。组数 = Cache 容量 /(相联度 × 块大小)。算组索引位数 = log₂(组数)。这是 408 计算高频。
- Cache 容量别忘了标记位:很多人只算数据块,漏了 Tag + 有效位(每行的标记位数 = 主存地址位数 - 组索引位 - 块内偏移位 + 1 有效位 + 1 脏位)。
- 直接映射无需替换算法(冲突就覆盖),全相联/组相联才需要 LRU 等。
- 写回 vs 写直达:写回效率高但要脏位;写直达简单但访存多。常考"采用写回时需不需要脏位"——需要。
- 平均访问时间有的题写成 T = t_cache + (1-H)×t_main(默认命中无额外),注意题目给的是命中时间还是命中+缺失代价,别套错公式。
CodeBrick 配合(直达链接):
自测:① 主存地址三段各是什么;② 给 Cache 容量/块大小/相联度算标记总位数;③ 写回与写直达区别、需不需要脏位。
3.6 虚拟存储器
核心考点
- 虚拟存储器:主存 + 辅存,以页/段为单位,提供比实际主存更大的逻辑地址空间;基于局部性。
- 页式虚拟存储:逻辑地址 = 页号 + 页内偏移;页表存"页号→页框号"映射 + 状态位/访问位/修改位/保护位。缺页时从磁盘调入。
- 段式:按逻辑段(代码/堆/栈),逻辑地址 = 段号 + 段内偏移,段长可变;有外部碎片。
- 段页式:先分段再分页,地址 = 段号 + 页号 + 页内偏移(三次访存)。
- 快表 TLB:放常用页表项,命中则省一次访存(逻辑地址→物理地址:TLB 命中直接得页框,未命中查页表)。
- TLB vs Cache 区别(高频):
- TLB 缓存的是页表项(地址映射),解决"地址翻译慢";
- Cache 缓存的是主存数据/指令,解决"主存访问慢";
- 二者可同时命中,也可独立缺失;TLB 缺失不一定 Cache 缺失。
- 多级页表:解决页表本身太大问题(如 64 位地址),二级/多级页表分级存放。
- 页面置换:缺页时选页换出(OPT/FIFO/LRU/Clock),与 OS 内存管理重合,置换算法同第 3 章 OS 部分。
易错警示
- TLB 和 Cache 不是一回事:TLB 加速"地址翻译"(存映射),Cache 加速"数据访问"(存内容)。选择题常把二者混着考。TLB 缺失代价比 Cache 缺失大得多(可能触发缺页)。
- 虚地址(逻辑地址)→ 物理地址:先查 TLB/页表翻译,再用物理地址去 Cache/主存取数,这是两级独立的操作。
- 多级页表节省的是页表占用的主存,不是访问时间(多级页表反而增加访存次数,靠 TLB 弥补)。
CodeBrick 配合(直达链接):
自测:① 页式逻辑地址怎么划分;② TLB 与 Cache 本质区别;③ 多级页表解决的什么问题。
视频关联(点关键词跳到对应集)
- 📺 知识点精讲(BV1ps4y1d73V):3(p39)、3.1(p38)、3.2(p39)、3.2.1(p40)、3.2.2(p41)、3.2.4(p42)、3.3(p43)、3.4(p44)、3.4.1(p44)、3.4.2(p45)、3.5(p46)、3.5.1(p46)、3.5.3(p47)、3.5.4(p48)、3.5.5(p49)
- 📺 选择题精讲(BV1Bh5Yz3EAJ):3(p31)、3.1(p33)、3.2(p42)、3.3(p45)、3.4(p49)、3.5(p56)、3.6(p60)
第 4 章 指令系统(考试偏概念 + 一道操作码扩展大题)
4.1 指令系统
核心考点
- 指令格式 = 操作码(Opcode)+ 地址码(Addr)。操作码指出"做什么",地址码指出"操作数在哪"。
- 地址码个数:零地址、一地址、二地址、三地址、四地址。二地址最常见:(A1) OP (A2) → A1。
- 指令长度:定长指令字(取指快、规整)/ 变长指令字(紧凑、灵活,如 x86)。指令长度常是机器字长整数倍(半字/单字/双字)。
- 定长操作码 vs 扩展操作码(不定长):定长译码简单;扩展操作码在高地址数指令中用短操作码、低地址数指令中"借用地址字段"扩展出更多操作码(如 15/15/15 扩展)。
- 操作数类型:地址、数字、字符、逻辑数。
- 操作类型:数据传送、算术逻辑运算、移位、转移(无条件/条件)、调用/返回、陷阱/中断、输入输出、停机。
易错警示
- 扩展操作码设计是 408 固定大题:规则是"短操作码不能是长操作码的前缀"。如 4 位操作码段,留 1111 作扩展前缀可再扩 16 个 8 位码。设计时要数清"还剩多少编码空间"。
- 指令字长不一定等于机器字长;变长指令字常见(CISC 如 x86),RISC 通常定长。
- 二地址指令中两个操作数可能"一个源一个目的"或"两个都源、结果放别处",看寻址方式。
CodeBrick 配合(直达链接):
自测:① 指令由哪两段组成;② 给约束设计扩展操作码(算最多支持几条三地址指令);③ 定长 vs 扩展操作码优劣。
4.2 寻址方式
核心考点
- 指令寻址(下一条指令在哪):顺序寻址(PC 自增)、跳跃寻址(转移指令改 PC)。
- 数据寻址(操作数在哪):形式地址 A + 寻址特征位,经寻址方式算出有效地址 EA。常见方式:
| 方式 | 有效地址 EA | 特点 |
|---|---|---|
| ------ | ------------ | ------ |
| 立即寻址 | 操作数在指令中(A 即数) | 快,数受限,不能修改 |
| 直接寻址 | EA = A(地址码即主存地址) | 简单,寻址范围受 A 位数限 |
| 间接寻址 | EA = (A)(A 指向的单元存地址) | 范围大,多次访存 |
| 寄存器寻址 | EA = Ri(操作数在寄存器) | 快,无需访存 |
| 寄存器间接 | EA = (Ri) | 寄存器存地址 |
| 隐含寻址 | 操作数隐含(如 ACC) | 省地址码 |
| 基址寻址 | EA = (BR) + A | 面向系统,程序浮动、扩大寻址 |
| 变址寻址 | EA = (IX) + A | 面向用户,循环/数组,IX 变 |
| 相对寻址 | EA = (PC) + A | 转移用,与位置无关、可浮动 |
| 堆栈寻址 | EA = SP 指向 | 进栈出栈 |
- 基址 vs 变址:基址寄存器(BR)内容不变、A 变(程序重定位);变址寄存器(IX)内容变、A 是首址(遍历数组)。
- 偏移量 A 可正可负(补码)。
易错警示
- 基址与变址最容易混:基址是"程序整体偏移、寄存器固定"(系统用,实现浮动),变址是"数组首址固定、变址寄存器变"(用户遍历数组用)。口诀:基址定程序位置、变址定数据位置。
- 相对寻址 EA = PC + A,注意 PC 是"当前指令下一条"的地址还是"当前",不同教材约定不同,408 通常以取指后 PC 已指向下一条为准,算跳转距离注意 +1 偏移。
- 寄存器寻址(操作数在寄存器)和寄存器间接寻址(寄存器里是地址)差一次访存,别看错。
CodeBrick 配合(直达链接):
自测:① 列 5 种数据寻址并说 EA 怎么算;② 基址与变址区别;③ 相对寻址为什么利于程序浮动。
4.3 程序的机器级代码表示
核心考点
- 机器指令是二进制,汇编是助记符;一条 C 语句常对应多条机器指令。
- x86 汇编两种语法:AT&T(GNU,源在操作数2、寄存器加 %、立即数加 $) vs Intel(目的在操作数1、无前缀)。
- 常用指令:mov(传送)、add/sub(加减)、lea(取有效地址)、push/pop(栈)、call/ret(调用返回)、jmp/jcc(跳转)、cmp/test(比较测试)。
- 过程调用(函数):调用者把参数入栈/寄存器,call 压返回地址,被调用者建栈帧(push %ebp; mov %esp,%ebp),返回前 leave/ret 恢复。
- PC 相对寻址在机器码里很常见:跳转目标是"相对当前 PC 的偏移"。
- 数据在内存的对齐:按字/半字对齐访问更快;结构体有对齐填充。
易错警示
- AT&T 和 Intel 语法操作数顺序相反(AT&T 是 `mov %eax, %ebx` 源在前;Intel 是 `mov ebx, eax` 目的在前),读别人反汇编要认清语法。
- 函数调用约定(调用者保存 vs 被调用者保存寄存器)影响栈帧,408 大题偶尔考栈的增长方向与返回地址位置。
- 机器级看 `lea` 不是"取内存内容"而是"算地址",常用于高效算 (a+i) 之类表达式。
CodeBrick 配合(直达链接):
自测:① AT&T 与 Intel 语法操作数顺序区别;② call 指令压的是什么;③ lea 和 mov 取数区别。
4.4 CISC 和 RISC
核心考点
- CISC(复杂指令集,如 x86):指令数目多、长度可变、寻址方式多、指令可访存(内存-内存操作)、微程序控制、执行周期长。
- RISC(精简指令集,如 MIPS/ARM/RISC-V):指令数目少、定长指令、Load/Store 架构(仅 load/store 访存,运算只在寄存器间)、大量通用寄存器、流水线易实现、以硬布线控制为主、靠编译器优化。
- 对比要点(高频简答):
| 维度 | CISC | RISC |
|---|---|---|
| ------ | ------ | ------ |
| 指令数 | 多 | 少 |
| 指令长度 | 变长 | 定长 |
| 寻址方式 | 多 | 少 |
| 访存指令 | 任意 | 仅 Load/Store |
| 控制方式 | 微程序为主 | 硬布线为主 |
| 寄存器 | 较少 | 大量通用 |
| 目标 | 缩小代码体积 | 提高执行效率 |
易错警示
- RISC 的 Load/Store 架构是核心特征:算术指令只能在寄存器之间运算,不能直接操作内存数。这是和 CISC 最本质区别。
- RISC 不一定"指令少就快",它是靠规整 + 流水线 + 编译器取胜;别把"精简"误解为"功能弱"。
- 现代 x86 内部也把复杂指令译码成类 RISC 微操作(μop),但对外仍是 CISC 指令集。
CodeBrick 配合(直达链接):
自测:① RISC 三条核心特征;② Load/Store 架构什么意思;③ CISC 与 RISC 控制方式区别。
视频关联(点关键词跳到对应集)
- 📺 知识点精讲(BV1ps4y1d73V):4(p50)、4.1(p50)、4.1.1(p50)、4.1.4(p51)、4.2(p52)、4.2.1(p52)、4.2.2(p55)、4.3(p56)、4.3.1(p58)、4.3.2(p59)、4.3.3(p60)、4.3.4(p64)、4.4(p65)
- 📺 选择题精讲(BV1Bh5Yz3EAJ):4(p61)、4.1(p64)、4.2(p71)、4.3(p74)、4.4(p76)
第 5 章 中央处理器(408 最重一章,数据通路 + 流水线是大头)
5.1 CPU 的功能和基本结构
核心考点
- CPU 功能:指令控制(取指顺序)、操作控制(发控制信号)、时间控制(时序)、数据加工(ALU 运算)、中断处理。
- CPU 基本结构 = 运算器 + 控制器 + 寄存器 + 内部总线:
- 运算器:ALU、ACC(累加器)、通用寄存器组、PSW(程序状态字)、移位器、多路选择器;
- 控制器:PC(程序计数器)、IR(指令寄存器)、MAR、MDR、CU(控制单元/微操作信号发生器);
- 寄存器:用户可见(通用寄存器、PC、PSW)与用户不可见(MAR、MDR、IR)。
- 数据通路:CPU 内部各部件之间传送信息的路径(总线 / 多路开关)。
- CPU 内部工作过程:取指 → 译码 → 取操作数 → 执行 → 写回。
易错警示
- PC 不一定是"通用寄存器"对用户可见——对汇编程序员可见(可跳),但 MAR/MDR/IR 对用户透明。
- 运算器里的 ACC、通用寄存器、PSW 与控制器里的 PC、IR、MAR、MDR、CU 要分清楚归属,选择题常把部件归类。
- 注意"CPU 五大功能"里中断处理容易被漏掉。
CodeBrick 配合(直达链接):
自测:① CPU 五大功能;② 运算器和控制器各含哪些关键部件;③ PC、IR、MAR、MDR 是否对用户透明。
5.2 指令执行过程
核心考点
- 指令周期 = 取出并执行一条指令的全部时间,含若干机器周期(CPU 周期/总线周期),机器周期含若干时钟周期(节拍)。层次:指令周期 > 机器周期 > 时钟周期。
- 典型指令周期阶段:
- 取指周期:PC→MAR→主存取指令→MDR→IR,PC+1;
- 间址周期(若有间接寻址):取操作数地址;
- 执行周期:真正运算;
- 中断周期:响应中断,保存断点(如 PC→堆栈),转中断向量。
- 数据流(各周期信息流向):取指时地址由 PC 给 MAR;执行时操作数经 MDR/寄存器到 ALU。
- 多周期 vs 单周期:单周期(一条指令一个长周期,慢)、多周期(不同指令用不同周期数,省时)。
易错警示
- 指令周期 vs 机器周期 vs 时钟周期三级一定分清:常考"一条指令至少几个机器周期、一个机器周期几个节拍"。
- 间址周期不是每条指令都有,只有间接寻址的指令才走;中断周期在每指令结束查中断请求。
- 取指周期 PC 自增的步长是"一条指令的长度(按字节)",变长指令下取指后 PC 增量不同。
CodeBrick 配合(直达链接):
自测:① 指令周期包含哪几个阶段;② 取指周期数据流;③ 三级时序层次关系。
5.3 数据通路
核心考点
- 数据通路指 CPU 内数据流动路径,分CPU 内部总线方式(多部件挂总线,需暂存寄存器)和专用通路方式(点对点,快但复杂)。
- 寄存器之间的数据传送:通过总线 + 控制信号(如 R0out, R1in)。
- 单总线结构:所有部件连一条总线,同一时刻只能传一个数据,需暂存寄存器(如 Y、Z)配合。
- 运算类指令的数据通路:取操作数到 ALU 输入(如 R0→Y, R1→ALU),ALU 结果经 Z→目的寄存器。
- 取数/存数(Load/Store)数据通路:地址送 MAR→主存→MDR→寄存器(取);寄存器→MDR→主存(存)。
- 微操作序列:每个阶段拆成若干微操作(如 PCout, MARin, MemRead, MDRin, IRin)。数据通路分析就是排这些微操作的先后顺序。
易错警示
- 单总线结构不能同时传两个数:ALU 两路输入若都来自总线就要"分时",所以要有 Y 暂存器先把一个操作数锁住。这是分析单总线数据通路的关键。
- 数据通路题要画"信息流向",别漏掉控制信号(哪些寄存器输出 out、哪些输入 in),这是 408 大题给分点。
- 专用通路快但硬件复杂,总线结构简单但带宽受限,二者权衡。
CodeBrick 配合(直达链接):
自测:① 单总线为什么要暂存寄存器;② 画一条 add R1,R2 的微操作序列;③ Load 指令数据通路经过哪些寄存器。
5.4 控制器
核心考点
- 控制器功能:从 IR 取出操作码→译码→按时序发微操作控制信号,指挥全机。
- 硬布线控制器:操作码 + 时序信号经组合逻辑电路直接产生控制信号。优点:快;缺点:设计复杂、难修改、适合 RISC。
- 微程序控制器:每条机器指令对应一段微程序(存于控制存储器 CS),微程序由微指令组成,微指令含微操作字段 + 顺序控制字段;执行靠μPC(微程序计数器) 顺序/转移。
- 微指令编码:水平型(一位一操作,并行度高、长)、垂直型(类似机器指令,紧凑、慢)、混合型。
- 微命令 vs 微操作:微命令是控制信号的"位",微操作是被控部件的动作。相容性微命令(可同时)/ 互斥性微命令(不可同时)。
- 硬布线 vs 微程序对比:硬布线快、不占 CS;微程序灵活、易改、慢(多访存 CS 一级)。
易错警示
- 控制存储器(CS)是微程序控制器的专属,存微程序,通常 ROM 实现、在 CPU 内部。硬布线没有 CS。
- 水平型微指令"一位对应一个微命令",并行能力强但字长长;垂直型短但串行。
- 微程序控制器执行一条机器指令要"取微指令→执行"若干次,所以比硬布线慢,这是它主要缺点。
CodeBrick 配合(直达链接):
自测:① 硬布线与微程序各优缺点;② 控制存储器干什么用;③ 水平型与垂直型微指令区别。
5.5 异常和中断机制
核心考点
- 异常(内中断)vs 中断(外中断):
- 异常来自 CPU 内部(指令执行引发):故障(Fault,如缺页、除零,可恢复、返回原指令)、陷阱(Trap,如断点/系统调用,返回下一条)、终止(Abort,如硬件故障,不可恢复);
- 中断来自 CPU 外部(I/O 完成、时钟、键盘),与当前指令无关。
- 中断向量:存放中断服务程序入口地址(或跳转到入口的指令) 的内存单元;所有中断向量构成中断向量表(首址固定,如 x86 的 0 号开始)。
- 中断响应过程:关中断 → 保存断点(PC 入栈/存固定单元)→ 引出中断服务程序(取中断向量)→ 开中断 → 执行 ISR → 恢复现场 → 关中断 → 中断返回(IRET)。
- 中断屏蔽与优先级:每个中断源有屏蔽字;高优先级可嵌套低优先级(多重中断),同级/低级的被屏蔽;有中断优先级仲裁(硬件排队器/链式)。
- 区分"中断"与"异常":异常同步(由指令引起、精确)、中断异步(外部、打断)。
易错警示
- 中断向量 ≠ 中断服务程序入口,而是"存放入口地址的那个存储单元";但口语常把"向量表项"也叫向量,考时要注意它存的是地址。
- Fault 返回到"出错指令"重执行(如缺页处理完再跑那条指令),Trap 返回"下一条",终止不返回。这个区分选择题常考。
- 多重中断必须"开中断 + 有屏蔽字"才允许嵌套;单重中断全程关中断。优先级高者能打断低者。
- 异常是同步的(和当前指令绑定、能精确定位到指令),中断是异步的,别混。
CodeBrick 配合(直达链接):
自测:① 异常与中断来源区别;② 中断响应步骤;③ 故障 Fault 与陷阱 Trap 返回点有何不同。
5.6 指令流水线(计算大题主力,时空图必会)
核心考点
- 流水线思想:把指令执行分成若干流水段(如取指 IF、译码 ID、执行 EX、访存 MEM、写回 WB),各段并行处理不同指令,提高吞吐。
- 吞吐率 TP = 单位时间完成的指令数。n 条指令、k 段、每段 Δt:
- 理想 TP = 1/Δt;
- 实际 TP = n / ( (k + n - 1) × Δt )(有装入/排空时间)。
- 加速比 S = 非流水线时间 / 流水线时间 = k×n / (k+n-1)(最大趋近 k)。
- 效率 E = 设备利用率 = 有效工作时空 / 总时空 = (k×n) / (k×(k+n-1))(理想 1/k 起步)。
- 时空图:横轴时间、纵轴流水段,画出每段每拍在做什么,用于数"完成时间、吞吐"。
- 三类相关(冒险)(必考):
- 数据相关(RAW 写后读最常见):后面指令用到前面指令还没写回的结果 → 用转发/旁路(Forwarding) 或暂停(stall/气泡);
- 结构相关:硬件资源冲突(如单端口存同时取指和访存)→ 增加资源或暂停;
- 控制相关:转移指令改变 PC,后续指令可能白做 → 分支预测(静态/动态)、延迟槽。
- 冒险处理:数据冒险用旁路 + 必要时停顿;控制冒险用预测/冲刷流水线。
- 超标量 / 超流水 / 双核是提高并行度的扩展。
易错警示
- 吞吐率公式实际值分母 `(k+n-1)Δt`:k 段、n 条指令,总拍数 = k + n - 1。很多人忘加"排空"的 k-1 拍。
- 加速比最大 = k(段数),不是 n。效率在 n 很大时趋近 1。
- RAW/WAR/WAW:只有 RAW(写后读)是真正的数据依赖必须处理;WAR/WAW 在乱序/写回时可能出现,靠寄存器重命名消除。
- 结构相关常因"单端口存储器"同一拍既要取指又要访存,解决办法是分离指令/数据 Cache(哈佛结构思想)。
CodeBrick 配合(直达链接):
自测:① 吞吐率/加速比/效率公式;② 画 5 段流水线时空图算完成时间;③ 数据相关的三种类型,哪种必须处理。
5.7 多处理器
核心考点
- Flynn 分类法(按指令流/数据流):
- SISD(单指令单数据,传统单核串行);
- SIMD(单指令多数据,向量/阵列处理,GPU 类);
- MISD(多指令单数据,罕见);
- MIMD(多指令多数据,多核/多机,主流)。
- 硬件多线程:细粒度、粗粒度、同时多线程 SMT(如超线程,一个核多个线程上下文)。
- 多核处理器:一个芯片多核,共享/私有 Cache 层次。
- 共享内存 vs 分布式内存:集中式共享内存(UMA)vs 分布式(NUMA,访问本地快);消息传递(MPP/集群)。
- 一致性问题:多核各自 Cache 需Cache 一致性协议(如 MESI:修改/独占/共享/无效)。
易错警示
- Flynn 分类里 SISD/SIMD/MIMD 最常见,MISD 基本只作概念;现代多核属 MIMD。
- 超线程(SMT) 是一个物理核"假装"两个逻辑核,共享执行单元,不是真双核;提速有限(主要靠隐藏访存延迟)。
- MESI 协议的四个状态要能说出含义,多核 Cache 一致性大题常考。
CodeBrick 配合(直达链接):
自测:① Flynn 四类各举例子;② 超线程和真多核区别;③ MESI 是干什么的。
视频关联(点关键词跳到对应集)
- 📺 知识点精讲(BV1ps4y1d73V):5(p71)、5.1(p67)、5.2(p68)、5.3(p70)、5.4(p71)、5.4.1(p71)、5.4.2(p72)、5.4.3(p73)、5.4.4(p74)、5.6(p77)、5.7(p79)
- 📺 选择题精讲(BV1Bh5Yz3EAJ):5(p77)、5.1(p81)、5.2(p84)、5.3(p88)、5.4(p94)、5.5(p97)、5.6(p104)、5.7(p107)
第 6 章 总线(分值不大但概念清晰,拿分稳)
6.1 总线概述
核心考点
- 总线 = 连接多个部件、分时共享的公共传输线(地址/数据/控制)。
- 分类:
- 按功能层次:片内总线(芯片内部)、系统总线(CPU-主存-IO 桥,含数据/地址/控制三总线)、通信总线(外总线)(机器间,如 USB、PCIe);
- 按传输:串行(一位位,抗干扰、远距离,如 PCIe/SATA)vs 并行(多位同时,短距高速,如传统 PCI);
- 按时序:同步 vs 异步。
- 系统总线三要素:
- 数据总线(双向,位数=机器字长/一次传输量);
- 地址总线(单向,位数决定可寻址空间);
- 控制总线(读写/中断/总线请求等,双向混用)。
- 总线性能指标:总线宽度(一次传多少位)、总线带宽 = 宽度 × 总线频率(或工作频率,注意是否双倍/四倍速率如 DDR、PCIe 的 GT/s)、传输率。
- 带宽计算:若数据线 32 位、工作频率 33MHz、每周期传 1 次,则带宽 = 32/8 × 33M = 132 MB/s。
- 总线标准:ISA、PCI、PCIe、AGP、USB、RS-232 等。
易错警示
- 总线带宽计算:带宽(MB/s) = (总线宽度/8) × 有效传输频率。注意现代总线常"双倍/四倍数据率",频率要乘系数;DDR 是双倍、PCIe 用 GT/s 表示。
- 地址总线单向(CPU/主设备发),数据总线双向,控制总线方向视信号而定。
- 并行总线不一定比串行快:高频下并行线间串扰/等长要求使其受限,所以现代高速总线(PCIe、SATA、USB)多用串行。
CodeBrick 配合(直达链接):
自测:① 系统总线三类各传什么;② 给宽度和频率算带宽;③ 为什么现代高速总线多用串行。
6.2 总线事务和定时
核心考点
- 总线事务 = 主设备发起的一次完整总线操作(请求 → 仲裁 → 寻址 → 传送 → 结束),如存储器读、I/O 写。
- 总线仲裁(分配):决定哪个主设备获总线权:
- 集中式仲裁:链式查询(菊花链,优先级固定、近的优先、对故障敏感)、计数器定时查询(优先级可程序设定)、独立请求(各自请求线,响应快、线多);
- 分布式仲裁:各设备自带仲裁逻辑,自举决定。
- 总线定时(握手方式):
- 同步定时:统一的时钟信号控制(快、简单,但对慢设备不友好、时钟偏移敏感);
- 异步定时:用"请求/应答(Req/Ack)"握手,不依赖统一时钟(灵活、适应不同速度设备);分不互锁/半互锁/全互锁;
- 半同步:有时钟但可插入等待(READY/WAIT);
- 分离式通信:把总线事务拆成"请求-响应"两段,中间释放总线给别人用,提高效率。
- 总线复用:地址/数据线分时使用(如分时复用,省引脚)。
易错警示
- 三种集中仲裁对比:链式(简单、优先级固定、单点故障致命)、计数器查询(优先级可编程、需计数线)、独立请求(响应最快、控制线最多)。选择题考"哪种响应最快/最灵活"。
- 同步 vs 异步定时:同步靠时钟、强制节拍;异步靠握手、适配异速设备。别把"异步"当成"慢",它是为了兼容不同速度外设。
- 分离式通信不是"分两次发",而是主从设备解耦、中间释放总线,显著提升总线利用率——这点和普通事务不同。
CodeBrick 配合(直达链接):
自测:① 三种集中仲裁各特点;② 同步与异步定时区别;③ 分离式通信为什么效率高。
视频关联(点关键词跳到对应集)
- 📺 知识点精讲(BV1ps4y1d73V):6(p80)、6.1(p80)、6.1.1(p80)、6.1.5(p81)、6.2(p82)、6.2.1(p83)
- 📺 选择题精讲(BV1Bh5Yz3EAJ):6(p108)、6.1(p112)、6.2(p116)
第 7 章 输入/输出系统(好拿分,I/O 方式对比要熟)
7.1 I/O 系统基本概念
核心考点
- I/O 设备的组成:机械部分 + 电子部分(I/O 接口/控制器)。
- I/O 接口功能:数据缓冲(速度匹配)、差错控制、状态/控制、设备选择(地址译码)、数据格式转换。
- I/O 编址:统一编址(存储器映射 I/O,用普通访存指令,地址空间共享) vs 独立编址(I/O 端口单独地址空间,用 IN/OUT 专用指令)。
- I/O 软件层次:用户层 → 设备无关层 → 设备驱动层 → 中断处理层。
- I/O 性能瓶颈:CPU 与 I/O 设备速度悬殊,靠缓冲/中断/DMA 缓解。
易错警示
- 统一编址 vs 独立编址:统一编址把 I/O 寄存器当内存地址,无需专用指令但占内存空间;独立编址有专门 IN/OUT 指令、不占内存空间。x86 用独立编址(附部分统一),RISC 多用统一编址。
- 接口(I/O 接口)≠ 设备控制器(有时混用);接口主要做 CPU 与设备间的"翻译+缓冲"。
CodeBrick 配合(直达链接):
自测:① I/O 接口五大功能;② 统一编址与独立编址区别;③ 为什么需要 I/O 接口。
7.2 I/O 接口
核心考点
- 接口内部寄存器:数据寄存器(数据口)、状态寄存器(状态口,如"忙/就绪/错误")、控制寄存器(控制口,如启动/中断允许)。
- 端口:接口中可被 CPU 访问的寄存器编址单元;CPU 通过"端口地址"读状态、写控制、收发数据。
- 接口与外部信号:与主机侧连系统总线(数据/地址/控制),与设备侧连设备信号(机械动作、状态)。
- 可编程接口芯片(如 8255 并行口、8253 定时/计数器、8259 中断控制器)了解即可。
- 状态寄存器轮询:CPU 读状态位判断设备"就绪/忙",决定下一步。
易错警示
- 接口里的状态口(读)和控制口(写)地址常不同,CPU 读状态判断、写控制命令,别把方向搞反。
- "端口"是指接口里可寻址的寄存器,不是物理接口本身;统一编址下端口就是内存地址的一部分。
CodeBrick 配合(直达链接):
自测:① 接口里三类寄存器各干嘛;② 状态口和控制口访问方向;③ 端口是什么。
7.3 I/O 方式
核心考点
- 四种 I/O 方式(CPU 干预递减、效率递增):
| 方式 | CPU 干预 | 数据通路 | 特点 |
|---|---|---|---|
| ------ | ---------- | ---------- | ------ |
| 程序查询(轮询) | 最高(全程忙等) | CPU 直接经接口 | 简单但 CPU 大量空转 |
| 中断驱动 | 每次传输完成通知 | CPU 经接口 | CPU 可去做别的事,每次传送仍有中断开销 |
| DMA(直接存储器访问) | 仅起停/结束 | 设备↔主存直传,不经 CPU | 块传输极高效,DMA 控制器接管总线 |
| 通道(I/O 处理机) | 几乎不干预 | 通道执行通道程序 | 大型机,进一步解放 CPU |
- DMA 过程:CPU 设好 DMA 控制器(起始地址、传送字数、方向)→ 发启动 → DMA 向 CPU 申请总线(BR) → CPU 让出(BG)→ DMA 直传数据到内存 → 传完发中断通知 CPU。
- DMA 与中断的区别:中断是"每传送完一次(或一块)由设备打断 CPU",数据仍经 CPU;DMA 是"数据直接进内存、只在开始结束打扰 CPU",块传送不打断每条。
- DMA 传送方式:停止 CPU 访存、周期窃取(挪用,最常用)、透明/交替。
易错警示
- DMA 不经 CPU 传数据,但要抢总线:DMA 期间 CPU 仍可做不访存的操作(如寄存器运算),或进入周期窃取。别以为"DMA 时 CPU 完全停工"。
- DMA 与中断的关键区别:中断方式数据仍由 CPU 经接口挪进内存(每条/每块都打断 CPU);DMA 是控制器直接写内存,只在开头结尾中断一次。这是大题对比点。
- 四种方式按"CPU 干预程度"排序:程序查询 > 中断驱动 > DMA > 通道,考题常让排这个序。
CodeBrick 配合(直达链接):
自测:① 四种 I/O 方式按 CPU 干预排序;② DMA 为什么不经 CPU 还要申请总线;③ DMA 与中断驱动的本质区别。
视频关联(点关键词跳到对应集)
- 📺 知识点精讲(BV1ps4y1d73V):7(p85)、7.1(p85)、7.1.1(p85)、7.1.3(p86)、7.2(p87)、7.3(p88)、7.3.1(p88)、7.3.2(p91)、7.3.3(p92)
- 📺 选择题精讲(BV1Bh5Yz3EAJ):7(p117)、7.1(p117)、7.2(p121)、7.3(p132)
配套视频资源(Bilibili 补强)
下面两个都是分集合集,按王道小节逐集讲解,适合第一遍打底、卡壳处反复看、自测后对照练手(具体每集与本章对应点请用视频平台目录/章节标记自行定位)。
- 📺 知识点精讲:BV1ps4y1d73V · 计算机组成原理知识点精讲 — 92 集,按 1.2 / 2.1 / 3.5 等小节逐讲
- 📺 选择题精讲:BV1Bh5Yz3EAJ · 计算机组成原理选择题精讲 — 132 集,按 1.2选择 / 2.1选择 等逐题讲
用法建议:每天按《21 天日程表》推进一章 → 先看 CodeBrick 动画建立画面 → 读王道书 + 本讲义 → 做本节「习题精选」→ 用本讲义「自测」验收 → 用上方分集合集查漏补缺。
补充课程 / 工具(黄金组合)
王道是主线。组原零基础或觉得王道节奏快时,换湖科大教书匠讲得更细。
- 🧪 计组可交互可视化工具箱:本站嵌入页 — NandGame / Venus / WebRISC-V 流水线 / IEEE 754 / CPUlator 等国外现成交互课件已直接嵌入浏览器可玩,Cache 动画与桌面工具(Ripes)给了跳转入口,按王道章节整理。
- 🎓 湖科大教书匠 · 计算机组成原理微课堂:BV1qG41197E4(276 万播放,34 小时)— 组原公认扎实,原理讲得透,零基础友好。
- 📚 王道全部课程入口:space.bilibili.com/95228778 — 领学班 / 强化冲刺班 / 真题班都在这里。
高频考点速查(冲刺用)
计算大题主力(7 类,务必能手算): 1. 数制与补码运算(原/反/补/移码范围、补码加减溢出、补码求负) 2. IEEE754 浮点(偏移量 127/1023、隐含位、真值还原、加减五步、范围与精度) 3. Cache 映射与命中率(三段地址、标记位计算、直接/全相联/组相联、平均访问时间) 4. 主存容量与地址线/数据线计算、位/字/字位扩展、片选译码 5. 指令操作码扩展(扩展操作码设计、约束下最多指令数) 6. 流水线时空图与吞吐率/加速比/效率(相关冒险、转发与停顿) 7. 中断向量与优先级(向量表、多重中断屏蔽字、响应流程)
概念高频(简答/选择): 冯诺依曼结构 · MAR/MDR/PC/IR 作用与透明性 · 存储层次与局部性 · SRAM vs DRAM · Cache 三种映射与写策略 · TLB 与 Cache 区别 · 虚拟存储器页/段/段页式 · 寻址方式(基址/变址/相对)· CPU 数据通路与微操作 · 硬布线 vs 微程序 · 异常 vs 中断 · 指令流水线三类相关 · CISC vs RISC · 总线仲裁与定时 · I/O 四种方式(尤其 DMA 与中断区别)。
—— 日月明(2021 年 408 考 127 分 · 全栈程序员)
小白 21 天学完王道《计算机组成原理》日程表
适用对象:零基础 / 跨考小白,目标啃下王道 2026《计算机组成原理》并具备 408 应试基础。
核心方法:先动画建立直觉 → 再精读王道定义 → 立刻做本节习题 → 卡住真人答疑。
每日建议投入 2–3 小时。所有 CodeBrick 资源(计组 Visual / 计组 Blog)均免费。
工具链怎么配合
- 王道书:给精确定义 + 每节「习题精选 + 答案与解析」+ 章末「疑难点」。计组是 408 里最重计算的科目,习题务必亲手算。
- CodeBrick(codebrick.tech):
- 计组 Visual 总入口(roadmap,52 个可视化知识点):roadmap —— 数制转换、补码运算、Cache 映射、数据通路、流水线时空图等都有动画。
- 计组 Blog 图文总入口:co-blog —— 每个知识点配可视化图文讲解。
- 真人答疑(日月明):卡住 20 分钟就问,5 元/题按问日结,别堆问题。
阶段总览
| 阶段 | 天数 | 目标 |
|---|---|---|
| ------ | ------ | ------ |
| 1 入门直觉 | Day1–3 | 建立计组全局画面,第 1 章轻量过(发展历程/层次/性能指标) |
| 2 啃核心·数据表示与运算 | Day4–7 | 数制编码/补码运算/IEEE754(408 计算第一主力) |
| 3 啃核心·存储系统 | Day8–12 | 主存/Cache 三种映射/虚拟存储(计算大题重灾区) |
| 4 啃核心·指令与 CPU | Day13–17 | 指令格式/寻址/CPU 结构/数据通路/流水线(最重一章) |
| 5 扫尾章 | Day18–19 | 总线 + I/O 系统(抓大放小,DMA 与中断区别必会) |
| 6 真题闭环 | Day20–21 | 真题查漏 + 错题复习 + 总复盘 |
21 天明细
| 天 | 阶段 | 王道书(看哪节) | CodeBrick(做什么) | 当日任务 / 输出 | 自测(能答出来 = 真懂) |
|---|---|---|---|---|---|
| ---- | ------ | ------------------ | ---------------------- | ------------------ | -------------------------- |
| 1 | 入门直觉 | 1.1 计算机发展历程、1.2 计算机系统层次结构 | 计组 Visual 总入口通览 7 大模块 | 记冯氏机六大特点;弄清五大部件 | 能背冯氏机特点;现代计算机以什么为中心 |
| 2 | 入门直觉 | 1.2 层次结构(MAR/MDR/PC/IR、透明性)、1.3 计算机性能指标 | 计组 Blog 计算机组成图文 | 理解 MAR/MDR 作用;手算 CPU 执行时间;做 1.2/1.3 习题 | 能区分 MAR/MDR;会算 IC×CPI/f;列举透明部件 |
| 3 | 入门直觉 | 复习第 1 章 + 第 1 章疑难点 | 计组 Visual 再跑层次/性能指标动画 | 画「五大部件 + 数据流向」框架图;第 1 章习题总练 | 能画出计算机硬件组成框图;翻译 vs 解释 |
| 4 | 数据表示 | 2.1 数制与编码(进位制、原/反/补/移码、定点数) | 计组 Visual 数制与编码动画 | 数制互转;写 8 位补码范围;做 2.1 前半习题 | 8 位补码范围 [-128,127] 为什么;移码怎么求 |
| 5 | 数据表示 | 2.1 校验码(奇偶/海明/CRC)+ 2.2 运算方法和运算电路(补码加减、溢出) | 计组 Blog 补码运算图文 | 双符号位判断溢出;手算 [A-B]_补;做 2.1/2.2 习题 | 溢出 OF 与进位 CF 区别;补码加减怎么做减法 |
| 6 | 数据表示 | 2.2 乘除法(原码/Booth、原码除)、标志位 | 计组 Visual 运算电路动画 | 理解 Booth 规则;做 2.2 后半习题 | Booth 01/10 分别加什么;CF/SF/OF/ZF 含义 |
| 7 | 数据表示 | 2.3 浮点数(IEEE754、加减五步、范围精度) | 计组 Blog 浮点数图文 | 还原 32 位浮点真值;算单精度偏移;做 2.3 习题 | 单精度偏移 127、尾数 24 位精度;浮点加减五步 |
| 8 | 存储系统 | 3.1 存储器概述(分类、SRAM/DRAM、层次、局部性) | 计组 Visual 存储层次动画 | 列 SRAM/DRAM 区别;理解局部性;做 3.1 习题 | 为什么 Cache 用 SRAM、主存用 DRAM;层次靠什么有效 |
| 9 | 存储系统 | 3.2 主存储器(结构、容量计算、刷新、多体并行) | 计组 Blog 主存图文 | 给地址线/数据线算容量;区分三种刷新;做 3.2 习题 | 按字节/字编址区别;低位交叉用于提速还是扩容量 |
| 10 | 存储系统 | 3.3 主存与 CPU 连接(位/字/字位扩展、片选译码) | 计组 Visual 地址译码动画 | 用 1K×4 组 4K×8 算片数;写片选逻辑;做 3.3 习题 | 字扩展/位扩展分别扩什么;线选法地址是否连续 |
| 11 | 存储系统 | 3.4 外部存储器(磁盘指标、RAID) | 计组 Blog 磁盘与 RAID 图文 | 算平均旋转延迟;记 RAID 0/1/5/6/10 特性;做 3.4 习题 | 平均旋转延迟是半圈;RAID 5 与 1 冗余区别 |
| 12 | 存储系统 | 3.5 高速缓冲存储器(三种映射、容量、写策略、替换) | 计组 Visual Cache 映射动画 | 算组相联标记位数;手算平均访问时间;做 3.5 习题 | 主存地址三段;写回 vs 写直达;Cache 容量含不含标记位 |
| 13 | 存储系统 | 3.6 虚拟存储器(页/段/段页式、TLB) | 计组 Blog 虚拟存储图文 | 区分 TLB 与 Cache;手算多级页表;做 3.6 习题;第 3 章总练 | TLB 缓存什么、Cache 缓存什么;虚地址怎么转物理地址 |
| 14 | 指令与 CPU | 4.1 指令系统(格式、操作码扩展)、4.2 寻址方式 | 计组 Visual 指令与寻址动画 | 设计扩展操作码;列 5 种寻址 EA 算法;做 4.1/4.2 习题 | 扩展操作码不能前缀冲突;基址 vs 变址区别 |
| 15 | 指令与 CPU | 4.3 机器级代码表示、4.4 CISC 和 RISC | 计组 Blog 汇编与 RISC/CISC 图文 | 看懂 AT&T vs Intel 语法;背 CISC/RISC 对比表;做 4.3/4.4 习题 | AT&T 操作数顺序;RISC 的 Load/Store 架构是什么 |
| 16 | 指令与 CPU | 5.1 CPU 功能与基本结构、5.2 指令执行过程 | 计组 Visual CPU 结构/指令周期动画 | 画 CPU 组成框图;写取指周期数据流;做 5.1/5.2 习题 | CPU 五大功能;指令周期含哪几阶段;三级时序层次 |
| 17 | 指令与 CPU | 5.3 数据通路、5.4 控制器(硬布线/微程序) | 计组 Blog 数据通路与微程序图文 | 画 add 指令微操作序列;对比硬布线/微程序;做 5.3/5.4 习题 | 单总线为什么需暂存寄存器;控制存储器干什么用 |
| 18 | 指令与 CPU | 5.5 异常和中断机制、5.6 指令流水线基础 | 计组 Visual 流水线与中断动画 | 写中断响应流程;背三类相关;做 5.5 习题 | 异常 vs 中断来源;Fault 与 Trap 返回点;中断向量存什么 |
| 19 | 指令与 CPU | 5.6 流水线计算 + 5.7 多处理器 | 计组 Visual 流水线时空图动画 | 画时空图算吞吐率/加速比;记 Flynn 四类;第 5 章总练 | 吞吐率公式分母 (k+n-1);RAW 必须处理;SIMD/MIMD 例子 |
| 20 | 扫尾章 | 6.1 总线概述、6.2 总线事务和定时 | 计组 Blog 总线图文 | 算总线带宽;背三种集中仲裁;做 6 章习题;7.1/7.2 I/O 基本概念 | 总线带宽怎么算;三种仲裁各特点;统一 vs 独立编址 |
| 21 | 真题闭环 | 7.3 I/O 方式 + 无新书按薄弱查漏 | 计机 Visual I/O 方式动画 + 错题二刷 | DMA 与中断对比;做 50–80 道真题标错因;列未懂清单 | 四种 I/O 按 CPU 干预排序;DMA 不经 CPU 为何还要抢总线;列 ≤5 个仍不懂点 |
使用说明
1. 每日顺序:先看 CodeBrick 动画/Blog 建立画面 → 再读王道对应节 → 做本节习题精选 → 对答案与解析 → 自测栏答不出就回看。 2. 自测是硬指标:自测栏答不顺,当天内容就没真懂,别急着往后赶;计组尤其要"能算出来"才算懂。 3. 卡住就问:一道题卡 20 分钟以上,直接找日月明真人答疑(5 元/题),保持节奏比硬磕重要。 4. 重高频轻低频:Day20–21 把力气压在数据表示、Cache、指令流水线、数据通路这些高频计算区;总线/I/O 抓大放小即可。
—— 日月明(2021 年 408 考 127 分 · 全栈程序员)