【学习笔记】计算机组成原理前三讲核心知识点

发布于 2025-10-02 00:42 更新于 2025-11-03 16:40 3405 字 18 min read

计算机组成原理(Computer Organisation) 是计算机科学与技术专业的核心课程之一,它不仅仅是为了让学生了解计算机硬件的工作原理,更是为了培养学生的系统思维和解决问题的能力。通过学习这门课,可以了解现代计算机是如何工作的。 这门课要求我们系所有人到大礼堂共同听课,Lab课则由四位TA

计算机组成原理(Computer Organisation) 是计算机科学与技术专业的核心课程之一,它不仅仅是为了让学生了解计算机硬件的工作原理,更是为了培养学生的系统思维和解决问题的能力。通过学习这门课,可以了解现代计算机是如何工作的。

这门课要求我们系所有人到大礼堂共同听课,Lab 课则由四位 TA 老师负责,老师们讲的很快,因此想学好这门课不光要按时上课,课下也要整理总结。

Lecture 1 什么是计算机

计算机定义

一台现代计算机是一种电子的、数字的、通用的计算设备,它自动遵循一系列逐步的指令来解决问题。

计算机所遵循的这一系列逐步的指令也被称为计算机程序。

图灵机

图灵机(Turing Machine) 是由英国数学家艾伦·图灵开发的一种假设装置,它是所有计算机的抽象模型。 一个图灵机由

  • 一个分成单元格的磁带
  • 一个移动的读写头
  • 一个存储图灵机状态的寄存器
  • 一个有限的指令表

详细介绍

Turing Machine Simulator(图灵机模拟器)

通用图灵机

通用图灵机(Universal Turing Machine),能够模拟其他所有的图灵机。

  • 输入:数据 + 计算描述(图灵机)
  • 它是可编程的,因此它是一台计算机,指令是输入数据的一部分
  • 计算机就是一台通用图灵机

冯·诺依曼体系结构

冯·诺依曼体系结构(Von Neumann Architecture),也称为存储程序架构,数据和程序都存储在内存中

存储程序架构

  • 一个中央处理器(CPU)
    • 控制单元
    • 算术逻辑单元(ALU)
    • 寄存器
  • 主存
  • I/O 系统

主存储器和 CPU 之间的一条单一路径,称为冯·诺依曼瓶颈。

wenzhang5.2.jpeg
wenzhang5.2.jpeg

冯·诺依曼体系结构

冯·诺依曼执行周期

冯·诺依曼执行周期(Von Neumann Execution Cycle) 也称为获取-解码-执行周期,分成四步

  1. 控制单元从内存中获取下一条指令
  2. 指令被解码成 ALU 能够理解的语言
  3. 数据操作数从内存中获取到 CPU 内部的寄存器中
  4. ALU 执行指令并将结果放入寄存器或内存中

Von Neumann Machine Simulator(冯·诺依曼机器模拟机)

冯·诺依曼瓶颈

冯·诺依曼瓶颈(The Von Neumann Bottleneck)

  • CPU 和内存是分开的
  • 所有数据和代码都在内存中
  • CPU 通常比内存快
  • CPU 被迫等待需要的数据被传输到或从内存中

抽象

抽象(abstraction) 是通过识别一组个体中的共同特征,或忽略这些个体的时空方面来形成概念的过程,抽象的本质是在特定情境中保留相关信息,并忘记在该情境中无关紧要的信息。

从抽象到具体

  1. 一份出版物 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 到 2n−12^n-1(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。

数值原码反码补码
25000110010001100100011001
-25100110011110011011100111

数字转换

主要对数字进行 2 进制和 16 进制转换,因较为基础,这里不多赘述。

实数表示

正二进制小数(Positive binary fractions (fixed point))这里以三个例子来进行解释,如下:

(6.625)10=(?)2(6.625)_{10} = ( ? )_2

$(0.1001001)_2 = (?)_{10}$
将0.9近似表示为二进制小数(使用8位数)

对这三个问题进行解答(点击按钮显示对应答案)

首先看整数位,对其进行 2 进制转换。本题整数位为 6,(6)10=(110)2(6)_{10}=(110)_2,接着看小数部分,本题为 0.625。采取乘 2 取整法

  • 0.625×2=1.250.625 \times 2 = 1.25,取整数部分 1 ,剩余小数部分 0.25
  • 0.25×2=0.50.25 \times 2 = 0.5,取整数部分 0(剩余小数部分0.50.5)
  • 0.5×2=1.00.5 \times 2 = 1.0,取整数部分 1 将整数部分从上往下排列,小数部分的二进制为:101。

因此

$(6.625)_{10} = (110.101)_2$

对于(0.1001001)2(0.1001001)_2:

  • 小数点后第 1 位:1×2−1=0.51 \times 2^{-1} = 0.5
  • 第 4 位:1×2−4=0.06251 \times 2^{-4} = 0.0625
  • 第 7 位:1×2−7=0.00781251 \times 2^{-7} = 0.0078125

其余位为 0,求和:

0.5+0.0625+0.0078125=0.5703125

因此,

$(0.1001001)_2 = (0.5703125)_{10}$

步骤如下:

  1. 0.9×2=1.80.9 \times 2 = 1.8 → 取整 1(第 1 位,记为b1=1b_1=1),剩余小数0.80.8
  2. 0.8×2=1.60.8 \times 2 = 1.6 → 取整 1(第 2 位,b2=1b_2=1),剩余小数0.60.6
  3. 0.6×2=1.20.6 \times 2 = 1.2 → 取整 1(第 3 位,b3=1b_3=1),剩余小数0.20.2
  4. 0.2×2=0.40.2 \times 2 = 0.4 → 取整 0(第 4 位,b4=0b_4=0),剩余小数0.40.4
  5. 0.4×2=0.80.4 \times 2 = 0.8 → 取整 0(第 5 位,b5=0b_5=0),剩余小数0.80.8(开始循环)
  6. 0.8×2=1.60.8 \times 2 = 1.6 → 取整 1(第 6 位,b6=1b_6=1),剩余小数0.60.6
  7. 0.6×2=1.20.6 \times 2 = 1.2 → 取整 1(第 7 位,b7=1b_7=1),剩余小数0.20.2
  8. 0.2×2=0.40.2 \times 2 = 0.4 → 取整 0(第 8 位,b8=0b_8=0)

凑齐 8 位后,二进制小数为0.1110011020.11100110_2。

因此,

$0.9_{10}$的 8 位二进制近似为$0.11100110_2$

浮点数

浮点(Floating point) 指数字的基数点可以"浮动",即它可以相对于数字的有效数字放置在任何位置。

半/单精度浮点数

半精度浮点数是一种使用 16 位(2 字节)存储的浮点数格式,主要用于对存储和计算效率要求较高的场景,如深度学习和图形处理。

组成:

  • 符号位:1 位,表示数值的正负
  • 指数部分:5 位,采用偏移表示法,用于表示数值的大小
  • 尾数部分:10 位,表示有效数字,包含一个隐含的 1(对于规范化数)

与半精度浮点数类似,单精度浮点数为 32 位,1 位作为符号位,8 位作为指数部分;23 位表示尾数部分

以下是几道题目

0.011110000000000=(?)100.011110000000000 = ( ? )_{10}

12.735=(?)212.735 = (?)_{2}

解答如下(点击按钮显示对应答案)

符号位:0。 指数位:接下来的 5 位是 01111 吗,将其转为十进制位 15,半精度的指数偏移量为 15(25−1−12^{5-1}-1)实际指数=15-15=0。 尾数为:0000000000.半精度尾数采用隐含 “1” 的规格化形式,即尾数为 1.M(M 是尾数位),这里 M 全为 0,所以尾数是 1.0。

代入半精度公式计算

(−1)(符号位)×(1.M)×2E(-1) ^ (符号位) \times (1.M) \times 2^E

带入具体数值得到

(−1)0×1.0×20=1×1×1=1(-1)^0 \times 1.0 \times 2^0=1 \times 1 \times 1=1

符号位:12.375 是正数,符号位为 0。 指数位:单精度的指数偏移量为 127(因为 8 位指数的偏移量公式:28−1−1=1272^{8-1} - 1 = 127)。实际指数是 3,因此指数字段的值= 实际指数 + 偏移量 =3 + 127 = 130。130 转成 8 位二进制:130 = 128 + 2 → 10000010。 尾数位:规格化尾数是 1.100011,去掉隐含的 “1”,剩下小数部分 100011。尾数位需要补够 23 位,因此在 100011 后补 17 个 0,得到 10001100000000000000000。

将这三部分组合:

01000001010001100000000000000000

非数值数据表示

这一部分内容不是很重要,因此放一张 ASCII 码,可自行对照

ASCII.png
ASCII.png
ASCII码对照表

Lecture 3 布尔代数:从比特到逻辑

计算机通过比特(二进制位)表示信息。一个比特具有两种可能的值,即0和1。比特可用于表示真值——真与假。因此比特运算对应着布尔代数中的逻辑运算。

布尔变量与运算符

布尔变量是只能取两个值的变量:真/假;或1/0

布尔运算符

  • AND(A AND B , AB , A∧BA \wedge B)
  • OR (A OR B , A+B , A∨BA \vee B)
  • NOT ( NOT A , A’ , ¬A\neg 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),也可以称为布尔代数常用基本法则。由于打成表格太麻烦了,找了张图片

BooleanRules.png
BooleanRules.png

上述所有恒等式都可以通过真值表来证明。为此,你需要使用真值表展示等式两边的所有可能取值。若两者完全一致,则该恒等式成立。

规范形式

表示同一布尔表达式有多种方式。逻辑等价的表达式具有相同的真值表。例如,(X+Y)′=X′Y′(X+Y)^{'} = X^{'}Y^{'}。为避免混淆,设计者采用标准化或规范形式来表达布尔函数。主要有两种规范形式

  • 积之和(Sum-of-products)
  • 和之积(Product-of-sums)

积之和

来自输入的不同 “乘积” 项被 “相加” 在一起。这也被称为析取范式(Disjunctive Normal Form)。

和之积

来自输入的不同 “和项” 被 “相乘” 在一起。这也被称为合取范式(Conjunctive Normal Form)。

卡诺图

卡诺图(KM 或 K-map)是由莫里斯·卡诺(Maurice Karnaugh,1924 年~)于 1953 年提出的一种简化布尔代数表达式的方法。

K-map1.png
K-map1.png
K-map2.png
K-map2.png
K-map3.png
K-map3.png
K-map4.png
K-map4.png

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

花了三天时间终于写完了,由于课件全部是英文的,只能一点一点翻译出来 QAQ。有些地方翻译不当请见谅,本人实力实在有限。易造成歧义的关键词后已经加上了原单词,如果存在其他有错误的部分请在评论区指正,我收到后会及时更正~

喜欢的话,留下你的评论吧~