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

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

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

Lecture 1 什么是计算机

计算机定义

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

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

图灵机

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

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

详细介绍

通用图灵机

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

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

冯·诺依曼体系结构

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

存储程序架构

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

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

冯·诺依曼体系结构

冯·诺依曼执行周期

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

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

冯·诺依曼瓶颈

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

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

抽象

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

从抽象到具体

  1. 一份出版物
    1. 一份报纸
      1. 《旧金山纪事报》
        1. 《纪事报》5 月 18 日那一期
          1. 我那本《纪事报》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))这里以三个例子来进行解释,如下:

将0.9近似表示为二进制小数(使用8位数)

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

首先看整数位,对其进行2进制转换。本题整数位为6,,接着看小数部分,本题为0.625。采取乘2取整法

  • ,取整数部分1 ,剩余小数部分0.25
  • ,取整数部分0(剩余小数部分
  • ,取整数部分1将整数部分从上往下排列,小数部分的二进制为:101。

因此

对于

  • 小数点后第1位:
  • 第4位:
  • 第7位:

其余位为 0,求和:

0.5+0.0625+0.0078125=0.5703125

因此,

步骤如下:

  1. → 取整1(第 1 位,记为),剩余小数
  2. → 取整1(第 2 位,),剩余小数
  3. → 取整1(第 3 位,),剩余小数
  4. → 取整0(第 4 位,),剩余小数
  5. → 取整0(第 5 位,),剩余小数(开始循环)
  6. → 取整1(第 6 位,),剩余小数
  7. → 取整1(第 7 位,),剩余小数
  8. → 取整0(第 8 位,

凑齐 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。

将这三部分组合:

01000001010001100000000000000000

非数值数据表示

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

ASCII码对照表

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

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

布尔变量与运算符

布尔变量是只能取两个值的变量:/;或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
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之前整理出来。

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