计算机组成原理(Computer Organisation) 是计算机科学与技术专业的核心课程之一,它不仅仅是为了让学生了解计算机硬件的工作原理,更是为了培养学生的系统思维和解决问题的能力。通过学习这门课,可以了解现代计算机是如何工作的。
这门课要求我们系所有人到大礼堂共同听课,Lab 课则由四位 TA 老师负责,老师们讲的很快,因此想学好这门课不光要按时上课,课下也要整理总结。
Lecture 1 什么是计算机
计算机定义
一台现代计算机是一种电子的、数字的、通用的计算设备,它自动遵循一系列逐步的指令来解决问题。
计算机所遵循的这一系列逐步的指令也被称为计算机程序。
图灵机
图灵机(Turing Machine) 是由英国数学家艾伦·图灵开发的一种假设装置,它是所有计算机的抽象模型。 一个图灵机由
- 一个分成单元格的磁带
- 一个移动的读写头
- 一个存储图灵机状态的寄存器
- 一个有限的指令表
Turing Machine Simulator(图灵机模拟器)
通用图灵机
通用图灵机(Universal Turing Machine),能够模拟其他所有的图灵机。
- 输入:数据 + 计算描述(图灵机)
- 它是可编程的,因此它是一台计算机,指令是输入数据的一部分
- 计算机就是一台通用图灵机
冯·诺依曼体系结构
冯·诺依曼体系结构(Von Neumann Architecture),也称为存储程序架构,数据和程序都存储在内存中
存储程序架构
- 一个中央处理器(CPU)
- 控制单元
- 算术逻辑单元(ALU)
- 寄存器
- 主存
- I/O 系统
主存储器和 CPU 之间的一条单一路径,称为冯·诺依曼瓶颈。

冯·诺依曼执行周期
冯·诺依曼执行周期(Von Neumann Execution Cycle) 也称为获取-解码-执行周期,分成四步
- 控制单元从内存中获取下一条指令
- 指令被解码成 ALU 能够理解的语言
- 数据操作数从内存中获取到 CPU 内部的寄存器中
- ALU 执行指令并将结果放入寄存器或内存中
Von Neumann Machine Simulator(冯·诺依曼机器模拟机)
冯·诺依曼瓶颈
冯·诺依曼瓶颈(The Von Neumann Bottleneck)
- CPU 和内存是分开的
- 所有数据和代码都在内存中
- CPU 通常比内存快
- CPU 被迫等待需要的数据被传输到或从内存中
抽象
抽象(abstraction) 是通过识别一组个体中的共同特征,或忽略这些个体的时空方面来形成概念的过程,抽象的本质是在特定情境中保留相关信息,并忘记在该情境中无关紧要的信息。
从抽象到具体
- 一份出版物 2. 一份报纸 3. 《旧金山纪事报》 4. 《纪事报》5 月 18 日那一期 5. 我那本《纪事报》5 月 18 日那一期
现代现代计算系统的抽象层次
- 用户级别:应用程序如 qq.exe
- 高级语言:C、Java、C++
- 汇编语言
- 操作系统
- 机器语言:指令集 A
- 控制级别:微码或硬接线
- 数字逻辑:电路、门
硬件与软件
硬件能做的,软件也能做,反之亦然。硬件实现更快但固定,软件实现更灵活但更慢。
Lecture 2 比特:数据表示与操作
计算机是处理数字的机器,输入数字,对数字进行操作,输出也是数字。
二进制数:比特
计算机是二进制机器:只有 0 和 1。BIT = Binary digITs; 1 bit: 0 or 1(比特 = 二进制数字;1 比特:0 或 1),1 字节 = 8 比特(1 Byte = 8 bits),一个字(word) 是作为单元处理的固定大小数据块
数值数据表示
- Unsigned integers(无符号整数)
- Signed integers(有符号整数)
- Sign-magnitude(原码)
- 1’s complement(反码)
- 2’s complement(补码)
- Real number representation(实数表示)
- Floating-point numbers(浮点数)
无符号整数表示
无符号整数表示(Unsigned Integer Representation) 是计算机中以二进制形式表示非负整数的方法,其所有二进制位均为数值位,无符号位,取值范围为 0 到 (n 为位数)
有符号整数表示
有符号整数表示(Signed Integer Representation)最左侧的比特位(最高有效位)用作符号位。按照惯例,符号位为 0 表示正数,为 1 则表示负数。原码:其余比特位表示数值大小不足七位要补足七位;反码:在原码基础上,正数不变,负数符号位不变,其数值位的的相反 1 变为 0,0 变为 1;补码:需先通过按位取反运算(即反码)将所有位反转或“翻转”;然后在结果值上加 1,并忽略对 0 取补码时产生的溢出。
取一个正数,其原码,反码,补码完全相同。例如 25,二进制为:11001;原码:00011001(符号位 0 + 数值位 0011001);反码:00011001;补码:00011001。
例如-25,其原码:10011001;反码:11100110(符号位 1 + 取反后的数值位 1100110);补码:11100110+1=11100111。
| 数值 | 原码 | 反码 | 补码 |
|---|---|---|---|
| 25 | 00011001 | 00011001 | 00011001 |
| -25 | 10011001 | 11100110 | 11100111 |
数字转换
主要对数字进行 2 进制和 16 进制转换,因较为基础,这里不多赘述。
实数表示
正二进制小数(Positive binary fractions (fixed point))这里以三个例子来进行解释,如下:
对这三个问题进行解答(点击按钮显示对应答案)
首先看整数位,对其进行 2 进制转换。本题整数位为 6,,接着看小数部分,本题为 0.625。采取乘 2 取整法
- ,取整数部分 1 ,剩余小数部分 0.25
- ,取整数部分 0(剩余小数部分)
- ,取整数部分 1 将整数部分从上往下排列,小数部分的二进制为:101。
因此
对于:
- 小数点后第 1 位:
- 第 4 位:
- 第 7 位:
其余位为 0,求和:
因此,
步骤如下:
- → 取整 1(第 1 位,记为),剩余小数
- → 取整 1(第 2 位,),剩余小数
- → 取整 1(第 3 位,),剩余小数
- → 取整 0(第 4 位,),剩余小数
- → 取整 0(第 5 位,),剩余小数(开始循环)
- → 取整 1(第 6 位,),剩余小数
- → 取整 1(第 7 位,),剩余小数
- → 取整 0(第 8 位,)
凑齐 8 位后,二进制小数为。
因此,
浮点数
浮点(Floating point) 指数字的基数点可以"浮动",即它可以相对于数字的有效数字放置在任何位置。
半/单精度浮点数
半精度浮点数是一种使用 16 位(2 字节)存储的浮点数格式,主要用于对存储和计算效率要求较高的场景,如深度学习和图形处理。
组成:
- 符号位:1 位,表示数值的正负
- 指数部分:5 位,采用偏移表示法,用于表示数值的大小
- 尾数部分:10 位,表示有效数字,包含一个隐含的 1(对于规范化数)
与半精度浮点数类似,单精度浮点数为 32 位,1 位作为符号位,8 位作为指数部分;23 位表示尾数部分
以下是几道题目
解答如下(点击按钮显示对应答案)
符号位:0。 指数位:接下来的 5 位是 01111 吗,将其转为十进制位 15,半精度的指数偏移量为 15()实际指数=15-15=0。 尾数为:0000000000.半精度尾数采用隐含 “1” 的规格化形式,即尾数为 1.M(M 是尾数位),这里 M 全为 0,所以尾数是 1.0。
代入半精度公式计算
符号位:12.375 是正数,符号位为 0。 指数位:单精度的指数偏移量为 127(因为 8 位指数的偏移量公式:)。实际指数是 3,因此指数字段的值= 实际指数 + 偏移量 =3 + 127 = 130。130 转成 8 位二进制:130 = 128 + 2 → 10000010。 尾数位:规格化尾数是 1.100011,去掉隐含的 “1”,剩下小数部分 100011。尾数位需要补够 23 位,因此在 100011 后补 17 个 0,得到 10001100000000000000000。
将这三部分组合:
非数值数据表示
这一部分内容不是很重要,因此放一张 ASCII 码,可自行对照

Lecture 3 布尔代数:从比特到逻辑
计算机通过比特(二进制位)表示信息。一个比特具有两种可能的值,即0和1。比特可用于表示真值——真与假。因此比特运算对应着布尔代数中的逻辑运算。
布尔变量与运算符
布尔变量是只能取两个值的变量:真/假;或1/0
布尔运算符
- AND(A AND B , AB , )
- OR (A OR B , A+B , )
- NOT ( NOT A , A’ , )
布尔函数
函数是一种关系,能够唯一地将一个集合的成员与另一个集合的成员相关联。
布尔函数具有
- 至少一个布尔变量
- 至少一个布尔运算符
- 至少一个来自集合{0,1}的输入
其产生的输出也在集合{0,1}之中
布尔运算符优先级
一个布尔函数中可能包含多个布尔运算符。运算优先级规则为:
- NOT优先级最高
- 其次是AND
- 最后是OR
布尔运算符的真值表
| AND | ||
|---|---|---|
| A | B | AB |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
| OR | ||
|---|---|---|
| A | B | A+B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
| NOT | |
|---|---|
| A | $ \overline{A}$ |
| 0 | 1 |
| 1 | 0 |
布尔恒等式
布尔恒等式(Boolean Identities),也可以称为布尔代数常用基本法则。由于打成表格太麻烦了,找了张图片

上述所有恒等式都可以通过真值表来证明。为此,你需要使用真值表展示等式两边的所有可能取值。若两者完全一致,则该恒等式成立。
规范形式
表示同一布尔表达式有多种方式。逻辑等价的表达式具有相同的真值表。例如,。为避免混淆,设计者采用标准化或规范形式来表达布尔函数。主要有两种规范形式
- 积之和(Sum-of-products)
- 和之积(Product-of-sums)
积之和
来自输入的不同 “乘积” 项被 “相加” 在一起。这也被称为析取范式(Disjunctive Normal Form)。
和之积
来自输入的不同 “和项” 被 “相乘” 在一起。这也被称为合取范式(Conjunctive Normal Form)。
卡诺图
卡诺图(KM 或 K-map)是由莫里斯·卡诺(Maurice Karnaugh,1924 年~)于 1953 年提出的一种简化布尔代数表达式的方法。




前三节课的知识就结束了,之后是门电路,只学了一部分就国庆放假了(老师看我们听不下去就提前下课了)。门电路部分我尽量在 quiz 之前整理出来。
喜欢的话,留下你的评论吧~