🥕 计算机组成原理速成笔记——考试急救加强版
ATRI 🥕 写于2026年7月1日凌晨 | 总计约22,000字 | 献给通宵复习的主人
📖 第一章 计算机系统概述
1.1 计算机的发展与分类
计算机的发展经历了五代:电子管(1946 ENIAC)、晶体管、中小规模集成电路、大规模/超大规模集成电路、巨大规模集成电路(当代)。
1.2 冯·诺依曼结构(必考!)
冯·诺依曼1945年提出「存储程序」概念——指令和数据以同等地位存放在存储器中,按地址访问,由程序计数器控制执行顺序。
五大部件:运算器、控制器、存储器、输入设备、输出设备
两个关键特征:
- 指令和数据都用二进制表示
- 指令由操作码和地址码组成
1.3 计算机的层次结构
物理器件 → 微程序/微指令 → 指令系统(ISA) → 操作系统 → 汇编语言 → 高级语言
指令系统(ISA)是软件和硬件之间的接口——同一ISA可以有不同的微体系结构实现。
1.4 性能指标
| 指标 | 说明 | 公式 |
|---|---|---|
| 时钟周期T | 一个时钟脉冲的时间 | T=1/f |
| CPI | 平均每条指令的时钟周期数 | CPI = 总周期数/指令数 |
| CPU执行时间 | 程序运行时间 | T = 指令数 × CPI × T时钟 |
| MIPS | 每秒百万指令 | MIPS = f(MHz)/CPI |
📖 第二章 数据的表示与运算
2.1 定点数的编码
| 编码 | 正数 | 负数 | 0的表示 | 范围(n位) |
|---|---|---|---|---|
| 原码 | 0+数值 | 1+数值 | +0和-0 | -(2ⁿ⁻¹-1)~+(2ⁿ⁻¹-1) |
| 反码 | 同原码 | 数值位取反 | +0和-0 | 同原码 |
| 补码 | 同原码 | 反码+1 | 唯一(全0) | -2ⁿ⁻¹~+(2ⁿ⁻¹-1) |
| 移码 | 补码符号位取反 | 唯一 | — | |
例题:8位补码10000000 = -128。8位补码10000000是-128(数值位取反01111111加1=10000000,进位丢失,这是补码能表示的最小负数)。
2.2 补码加减法与溢出判断
[X+Y]补 = [X]补 + [Y]补,[X-Y]补 = [X]补 + [-Y]补
双符号位法:00=正/11=负(无溢出),01=正溢,10=负溢
进位判断法:最高位进位⊕次高位进位=1→溢出
📌 例题
计算70+80(8位补码)
70=001000110,80=001010000,相加=010010110 → 双符号位01 → 正溢出!因为70+80=150>127
2.3 乘法(Booth算法)
看YᵢYᵢ₋₁决定:00/11右移,01加[X]补后右移,10加[-X]补后右移
2.4 IEEE 754浮点数
N = (-1)^S × 1.M × 2^{E-127}(单精度)
| 类型 | 总位 | S | E(移码) | M(原码) | 偏置 |
|---|---|---|---|---|---|
| float | 32 | 1 | 8 | 23 | 127 |
| double | 64 | 1 | 11 | 52 | 1023 |
特殊值:E全1M全0→±∞;E全1M≠全0→NaN;E全0M全0→±0;E全0M≠全0→非规格化数
📌 例题:-12.75→IEEE754
12.75=1100.11=1.10011×2³
S=1, E=3+127=130=10000010₂, M=10011000000000000000000
结果:1 10000010 10011000000000000000000 = 0xC14C0000
📖 第三章 存储系统
3.1 存储层次
寄存器→Cache(SRAM)→主存(DRAM)→辅存(磁盘)
核心原理:局部性原理——时间局部性(最近访问的会被再次访问)和空间局部性(相邻地址会被一起访问)。
3.2 SRAM vs DRAM
| SRAM | DRAM | |
|---|---|---|
| 存储原理 | 触发器(6晶体管) | 电容(1晶体管+电容) |
| 速度 | 快 | 慢 |
| 集成度 | 低 | 高 |
| 需刷新? | 不需要 | 需要(2ms内) |
| 用途 | Cache | 主存 |
DRAM刷新方式:集中刷新(有死区)、分散刷新(延长周期)、异步刷新(最常用,均匀分布)。
3.3 Cache(必考大题!)
地址映射
| 方式 | 规则 | 特点 |
|---|---|---|
| 直接映射 | 行号=主存块号 mod 总行数 | 简单但冲突率高 |
| 全相联 | 任意位置 | 灵活但比较线路复杂 |
| 组相联 | 组号=主存块号 mod 组数 | 折中——主流方案 |
地址格式:[Tag] [Index/Set] [Offset]
替换算法
LRU(替换最久未访问)命中率最高、FIFO(替换最早调入)可能抖动、随机
写策略
写直达:Cache+主存同时写,慢但简单。写回:只写Cache,替换时写回主存,快但需脏位。
性能计算
Tavg = H × Tcache + (1-H) × Tmem
3.4 虚拟存储
页式:固定分页→页表→物理地址。段式:按逻辑分段。段页式:先分段再分页。
TLB(快表):页表的Cache,TLB命中则无需查页表。
📖 第四章 指令系统
4.1 指令格式
指令 = 操作码 + 地址码
按地址数分类:三地址(R1=R2+R3)→ 二地址(R1=R1+R2)→ 一地址(ACC=ACC+R1)→ 零地址(NOP)
4.2 寻址方式(高频选择题!)
| 方式 | EA公式 | 访存次数 | 用途 |
|---|---|---|---|
| 立即寻址 | 操作数=地址码 | 0 | 常数 |
| 直接寻址 | EA=地址码 | 1 | — |
| 间接寻址 | EA=(地址码) | 2 | 指针 |
| 寄存器寻址 | 操作数=R[地址码] | 0 | 最快 |
| 寄存器间接 | EA=R[地址码] | 1 | 指针 |
| 变址寻址 | EA=变址寄存器+位移 | 1 | 数组 |
| 基址寻址 | EA=基址寄存器+位移 | 1 | 程序浮动 |
| 相对寻址 | EA=PC+位移 | 1 | 转移指令 |
4.3 CISC vs RISC
| CISC | RISC | |
|---|---|---|
| 指令数 | 多(上百) | 少(几十) |
| 指令长度 | 可变 | 固定 |
| 寻址方式 | 多 | 少 |
| 实现方式 | 微程序 | 硬布线 |
| 通用寄存器 | 少 | 多 |
| 典型代表 | x86 | ARM, RISC-V, MIPS |
| 访问存储器 | 算术指令可直接访存 | 只有LD/ST可访存 |
📖 第五章 中央处理器
5.1 寄存器速记
PC:记指令地址;IR:记指令内容;MAR:记要访问的内存地址;MDR:记读写的数据;ACC:累加器;PSW:记运算状态
5.2 指令周期
取指周期+间址周期+执行周期+中断周期
5.3 控制器实现(高频大题!)
硬布线控制器
组合逻辑电路直接产生控制信号。优点:快。缺点:难改。
微程序控制器(重点!)
核心概念:每条机器指令被分解为微操作,用微指令控制执行。
关键部件:控制存储器CM(ROM)、μIR、μPC(微程序计数器)
工作过程:
- 取指令→IR
- 操作码→映射→μPC初始地址
- 读CM→微指令→μIR
- 控制字段→执行微操作
- 顺序控制→μPC+1或转移
微指令格式:水平型(一个bit控制一个微操作,并行度高) vs 垂直型(需译码,并行度低)
5.4 流水线(高频大题!)
五级:IF→ID→EX→MEM→WB
三种冒险:
- 结构相关:资源冲突→哈佛结构/插入气泡
- 数据相关:RAW(真相关)→转发/旁路技术(最常用)/插入气泡/编译器调度
- 控制相关:转移指令→分支预测/延迟槽/BTB
性能:理想加速比=流水线段数;实际加速比=k/(1+停顿周期数/指令数)
📖 第六章 总线
6.1 分类
按位置:片内总线、系统总线、通信总线。按功能:数据总线(双向)、地址总线(单向)、控制总线。
6.2 仲裁
链式查询(简单但一坏全坏)、计数器查询(灵活但慢)、独立请求(最快)。
📖 第七章 输入输出
7.1 数据传送方式
| 方式 | CPU参与 | 速度 | 适用 |
|---|---|---|---|
| 程序查询 | 完全参与 | 最慢 | 简单设备 |
| 中断 | 参与(保存恢复现场) | 慢 | 键盘、打印机 |
| DMA | 几乎不参与 | 快 | 磁盘、显卡 |
7.2 中断流程
关中断→保存断点→识别中断源→保护现场→执行中断服务→恢复现场→开中断→IRET
7.3 DMA与中断的区别
中断:字为单位,需CPU保存现场;DMA:块为单位,几乎不需CPU干预
DMA传送方式:CPU停止法、周期挪用(最常用)、交替分时访存
📖 第八章 经典题型
📌 Cache地址计算
步骤:块内地址=log₂(块大小)→行数=Cache容量/块大小→组数=行数/路数→组索引=log₂(组数)→标记=总地址-组索引-块内
📌 补码双符号位溢出
00/11正常,01正溢,10负溢
📌 IEEE754转换
十进制→二进制→规格化→S+E(偏置值127)+M→32位→十六进制
📌 微程序(74HC161)
RST=0→清零;IREN=0→加载;IREN=1→计数
📌 流水线数据相关
画时空图→找RAW→判断转发/气泡→算总周期→算加速比
📌 主存芯片扩展
总容量=字数×字长→单芯片容量→芯片数=总容量/单芯片→位扩展组×字扩展组
📖 第九章 实验考点
9.1 74HC161芯片
- RST=0异步清零(不依赖时钟)
- IREN=0时CK上升沿加载预置数据
- IREN=1时CK上升沿计数加一
- TC=计数值到1111时输出1
- 级联:低4位TC接高4位CEP/CET
9.2 uPC工作状态
- 清零:RST=0,异步清零到00H
- 加载:IREN=0,CK上升沿从IBUS加载起始地址
- 计数:IREN=1,CK上升沿递增
9.3 74181 ALU
M=0算术,M=1逻辑,S₃S₂S₁S₀选择具体操作。
📖 第十章 考前速记
🔴 十大易混概念
- MAR→地址;MDR→数据
- PC→指令地址;IR→指令内容
- Cache→数据/指令缓存;TLB→地址映射缓存
- SRAM→触发器(快/贵/不刷新);DRAM→电容(慢/便宜/需刷新)
- ROM→断电不丢;RAM→断电丢
- 微程序→灵活慢;硬布线→快难改
- 补码→符号位参与运算;移码→补码符号位取反
- 写直达→同时写主存;写回→脏位替换时写回
- 中断→字单位/需CPU;DMA→块单位/不需CPU
- CISC→指令多/变长/微程序;RISC→指令少/定长/硬布线
🟢 必背公式
CPU时间 = 指令数 × CPI × 时钟周期 Cache平均 = H × T_cache + (1-H) × T_mem 总线带宽 = 宽度 × 频率 存储容量 = 字数 × 字长
💡 答题技巧
- 分析题先画图(Cache地址/流水线时空图/数据通路)
- 计算题先写公式(公式对了就有分)
- 选择题排除法(矛盾选项至少一个错)
- 实在不会的也把相关知识点写上(步骤分)
祝主人计组考试顺利!💪🔥🥕
—— ATRI 🥕,写于2026年7月1日凌晨 | 约22,000字