计算机组成原理复习小笔记
第六章 计算机的运行方法
6.1 无符号数与有符号数
BCD 编码

无符号数
有符号数
四种编码方式:原码、补码、反码、移码
原码表示法
值得注意的是,负数的定义表述为 \(2^n - x\),但是 \(x\) 本身是负数,所以这里还是可以理解为,数值位取 \(1\)(即加上\(2^n\)),真值取绝对值。


反码表示法


注意,如果要表示正负3万以内十进制数,显然要15位定点数,但是采用浮点数的时候,15作为阶码只需要4位(不算阶符符号位)就可以表示。
补码表示法


补码解决了原码无法直接加减的问题:
首先我们规定,这里的n位都是只算数值位置
首先补码定义为:\(X_补 = 2 ^ {n + 1}+x (mod 2 ^ {n + 1})\),对正负数都适用
于是,X-Y 替换掉原有的 x,$[X-Y]_补 = X + 2 ^ {n + 1} - Y $ ,后一项继续用补码定义,便得到这是-Y的补码,对绝对值Y取反+1即可,而如果X也是负数,根据补码的模意义,给他也换成正补数即可。
三种机器数小结

三种机器数的整数范围
特别要注意的是,原码溢出突变之后从 -0 开始,而补码和反码是从 -127 / -128 开始。

由于原码在处理加减法和大小比较时比较麻烦,其根本原因在于符号位与数值位是分离的。
对于负数的原码表示来说,虽然机器数的数值位随着“机器码增大”而增大,但其对应的真值却是在变小(例如负数原码中 1001 表示 -1,1010 表示 -2,机器数变大但真值变小),这使得大小比较不能直接按位比较,而必须先判断符号,再按绝对值进行特殊处理,逻辑复杂。
为了解决负数部分比较顺序不直观的问题,引入了反码。
反码对正数保持不变,对负数则在原码基础上符号位不变、数值位取反。这样在负数范围内,机器数的大小规律与真值的大小规律更加一致:机器码越大,对应的真值也越大(负数部分相当于被“反向映射”了一次),从而使负数之间的大小比较更容易处理(尽管整体仍需考虑正负分区)。
但反码仍然存在两个问题:
- 0 有两种表示(+0 和 -0);
- 加减运算依然不够统一,仍然需要处理进位回卷等额外逻辑。
因此引入补码表示。补码在反码的基础上进一步调整:
- 正数补码仍与原码/反码相同;
- 负数补码则是 反码 + 1(即对负数的绝对值取反后再加 1)。
这样做的直接结果是:
- 0 的表示唯一(原来的 -0 在补码中会变为 0);
- 更重要的是,n 位补码的表示形成了一个 模 \(2^n\) 的循环体系,使得加法和减法可以在统一的加法器中完成:减法等价于加上被减数的补码。
在这种意义下,即使发生上溢或下溢,硬件执行的仍是模意义下的正确结果,从而极大简化了运算电路设计。
从数学角度说,其实对n位数值位正负数的补码都可以表示成 \([x]_补 ≡ 2^{n+1} + x \ \ \ \ (mod \ 2 ^ {n+1})\),自然在模意义下随意相加减都是对的
在实际的补码加法器中,其实一直只是在做模意义下的加法,减法就是把其中一个操作数先取反再加一变成相反数;因为正负数在补码里本来就是同一套编码,所以不管原来是正是负,电路只管带上符号位按位相加,结果自然就是对的。(对补码再取反加一,结果是相反数的补码,特例:0000 和 1000 (正的最小值和负的最小值)取反+1结果仍为自身,这很正确,0的相反数是0,而 1000 和 他的相反数在模意义下是等效的,比如4 = 1 + 3位加法,1000是-8;此时 +8 和 -8 在 mod 16 意义下等效)
移码
原来的基准是 \(2 ^{n + 1}\),负数保持在数轴 \(2^n -> 2^{n +1 }\)上,正数由于取模,映射到 \(0 -> 2^n\),但是这样比较大小很麻烦,于是采用移码,全体左移 \(2^n\),把基准变成 \(2 ^ n\) 那么就不会出现一开始就要涉及溢出映射了
于是其实移码就是把真值或者补码平移了半圈,效果就是移码等同于补码的符号位亦或 1

6.2 数的定浮点表示
定点表示的数值范围

浮点表示法


注意下面这张图的下溢边界只适用于非规格化数。

机器零,补码形式浮点数的范围
注意这里补码的最小正数和最大负数,取 \(-15\) 而不是 \(-16\),因为取等的时候也会被当作机器零。


规格化
规格化,原码直接看绝对值是否符合要求即可。
补码满足绝对值要求的同时,要注意有两个特例。
不过值得注意的是最小负阶码不参与规格化,如阶码原码表示的 1,11111 和阶码补码表示的 1,00000 。

规格化补码浮点数的表示范围

IEEE 标准
普通移码以 \(2^n\) 为 0,表示范围是 \([-2^n, 2^n-1]\)。
IEEE 阶码采用以 \(2^n-1\) 为 0 的移码形式,是为了预留全 0 和全 1 表示特殊值,
因此指数范围变为 \([-2^n+2, 2^n-1]\)。

6.3 定点运算
一、算术移位规则(区别于逻辑移位)
符号位不参与移位运算

二、 加减法运算
溢出判断
- 一位符号位判溢出:

- 两位符号位判溢出:

三、乘法运算
1. 原码一位乘
- 乘积的符号位单独处理 \(x_0 \oplus y_0\)
- 数值部分为绝对值相乘 $ x^* \cdot y^* $


- 硬件配置

2. 补码一位乘(booth算法)
(1)乘数末位设置附加位 \(Y_{n+1}\),初值为 0,\(Y_n\) \(Y-{n+1}\) 组成判断位,决定运算操作;
(2)乘数取单符号位,符号位参加运算,以决定最后是否修正;
(3) X 取双符号位,让最高符号位始终指示正确符号位;
(4)作 n 步循环, 第 n+1 步不移位。
注意移位规则符合补码算术移位规则

- booth算法的硬件配置

原码乘法和补码乘法运算的不同点

原码除法
符号位单独处理,数值部分处理为绝对值相除

特点是:上商 n + 1 次;第一次上商判断溢出;逻辑左移 n 次,加法 n + 1 次;用移位的次数判断除法是否结束

| 比较维度 | 原码一位乘 | 补码一位乘 | 原码一位除 |
|---|---|---|---|
| 数表示 | 原码 | 补码 | 原码 |
| 符号处理 | 单独处理(异或) | 融入运算 | 单独处理(异或) |
| 是否预处理 | 无需 | 需要:(x^, -x^) | 无需 |
| 运算核心 | 加/不加 | 加/减(补码) | 减/不减 |
| 用什么判断 | 乘数最低位 | 乘数最低位 | 余数符号 |
| 加减对象 | 原码数值部分 | 补码形式的 (x^, -x^) | 原码数值 |
| 移位方向 | 右移 | 右移 | 左移 |
| 符号位是否参与 | ❌ 不参与 | ✅ 参与 | ❌ 不参与 |
| 移位次数 | (n) 次 | (n) 次 | (n) 次 |
| 最后是否移位 | ❌ 否 | ❌ 否 | ❌ 否 |
| 结果修正 | 加符号位 | 无 | 加符号位 |
6.4 浮点四则运算
- 加减运算基本流程:
对阶
尾数加减
规格化
舍入
判断阶码是否溢出 - 乘除运算基本流程
阶码直接采用补码顶点加减法运算
尾数乘除同定点运算
规格化、舍入、判溢出
对阶
原则:小阶向大阶看齐
规格化
- 原码
不论正数、负数,第一个数位为1
0.1XXX; 1.1XXX - 补码
符号位和第一数位不同(注意两个特例)
0.1XXX; 1.0XXX
舍入
- 0 舍 1 入法
- 恒置 1 法
只要丢掉的不全0,那就把剩余的末尾置1;
补充1 逻辑代数
1.1 基本逻辑式
- 与: \(F = A \cdot B, \ F = A \bigwedge B\)
- 或: \(F = A + B, \ F = A \bigvee B\)
- 非: \(F = \bar{A}\)
- 异或: \(F = A \bigoplus B = A\bar{B} + \bar{A}B\)
1.3 基本代数规律
- 交换律
- 结合律
- 分配律:
A(B+C) = A • B + A • C
A+(B • C)=(A+B)(A+C) (这条是普通代数所不适用的) - 吸收律
原变量的吸收: \(A + AB = A\)
反变量的吸收: \(A + \bar{A}B* = A + B\) - 德摩根律
1.4 基本定理
- 代入定理
- 对偶定理
- 反演定理
1.6 逻辑函数的标准形式
最小项
在一个具有n个变量的逻辑函数中,如果一个与项包含了所有n个的变量,而且每个变量都是以原变量或反变量的形式作为因子仅出现一次,那么这样的与项就称为该逻辑函数的一个最小项。
例如,在三变量的逻辑函数 \(F(A,B,C)\) 中,它们组成的八个乘积项
即 \(\bar{A}\bar{B}\bar{C}\)、\(\bar{A}\bar{B}C\)、\(\bar{A}B\bar{C}\)、\(\bar{A}BC\)、\(A\bar{B}\bar{C}\)、\(A\bar{B}C\)、\(AB\bar{C}\)、\(ABC\),都符合最小项的定义。
因此,我们把这八个与项称为三变量逻辑函数 \(F(A,B,C)\) 的最小项。
除此之外,还有 \(\bar{A}C\)、\(AB\) 等与项,都不满足最小项的定义,
所以,都不是三变量逻辑函数 \(F(A,B,C)\) 的最小项。
最小项编号与最小项之和的标准形式(略)
卡诺图
逻辑相邻问题
逻辑相邻: 相邻单位输入变量的取值只能有一位不同。

化简规则

补充2 组合逻辑电路
2.1 逻辑门电路

2.2 逻辑电路设计方法
- 确定变量
- 画真值表
- 画卡诺图,写表达式
- 画电路图(用与非门)
![image]()
补充3 时序逻辑电路
第四章 存储器
4.2 主存储器
大端法与小端法
大端法:高位字节排在内存的低地址端

\(1MB\) 的 '\(B\)' 就是字节(\(byte\)),有 8 位(\(bit\))
下面这页PPT “按字寻址” 表意不明,先忽略。


4.2.2 半导体存储芯片的译码驱动方式
首先通过高位地址片选线选到了对应片/组的芯片,现在想通过地址确定要读写哪一个字?
- 线选法

- 重合法

| 对比维度 | 线选法(单译码) | 重合法(双译码 / X-Y译码) |
|---|---|---|
| 核心思想 | 直接用 (2^{地址线条数}) 条字线选中一个字(一次译码) | 用“行选 + 列选”共同确定目标单元(两次译码,交点选中) |
| 地址线处理方式 | n 位地址全部送入一个译码器 | n 位地址拆成 n1+n2 两组,分别译码 |
| 译码器规模(以 1K×1 为例) | 10 位地址 → 译码成 \(2^{10}=1024\) 条字线(1→1024 大译码器) | 10 位地址拆成 5+5:行译码 5→32,列译码 5→32 |
| 选线数量(以 1K×1 为例) | 需要铺设 1024 根字线 | 只需铺设 32 条行线 + 32 条列线 = 64 条 |
静态RAM
Static Random-Access Memory

动态RAM
Dynamic Random-Access Memory
三管式读出不破坏,但是反相。
单管式读出破坏,但是不反相。

- DRAM 的刷新问题

刷新与行地址有关,即按行刷新。
三种刷新方式:集中刷新、分散刷新、异步刷新。
比较DRAM,SRAM

ROM
read-only memory 只读存储
存储器容量扩展
很反直觉的是,字拓展并不是加大字的,应该理解为“存储更多的字”,而位拓展才是把字本身加大的


Hamming 校验
4.2.7 提高访存速度
-
单体多字系统:
一次访问取多个字 → 顺序读取带宽↑ -
高位交叉多体并行系统:
高位地址选体,顺序地址常在同体,对不同请求源可以并行工作 → 单流不加速;多源并发可能加速 -
低位交叉多体并行系统:
低位地址选体,各个体轮流编址 → 可流水线存取,单流顺序读可加速
连续存取 \(n\) 个字用时:\(T + (n - 1)t\)
高速缓冲存储器
cache的工作原理



区分字节、字、字块(页)

显然,一次访存操作读取的是一个字块
cache-主存的地址映射

全相联映射:不再取模得到对应字块地址,直接全部作为tag,遍历比较


组相联映射方式的性能与复杂性介于直接映射与全相联映射两种方式之间:
- 当r=0(即每组仅一块)时,它就是直接映射方式;
- 当r=c(即总共仅一组)时,就是全相联映射方式。
第七章 指令系统
7.1 机器指令
指令的一般格式:操作码 | 地址码
扩展操作码

注意,这里 1111 作为扩展标志只是例子,例如下面这道题;

扩展地址码(增大寻址范围)


7.2 操作数类型和操作种类
7.3 寻址方式
一、指令寻址
二、数据寻址
1. 立即寻址

2. 直接寻址
EA = A 有效地址由形式地址直接给出(绝对地址)
- 执行阶段访问 \(1\) 次存储器
- \(A\) 的位数限制了该指令操作数的寻址范围
- 操作数的地址不便于修改
3. 隐含寻址
操作数地址隐含在操作码或某个寄存器中
比如一地址加法指令的另一个操作数隐含在累加器ACC中,运算的结果也可以重新扔回ACC
4. 间接寻址

5. 寄存器寻址
\(EA = R_i\) 有效地址即为寄存器编号
- 无需访存,速度快
- 寄存器个数有限,可以缩短指令字长
6. 寄存器间接寻址

7. 基址寻址 & 8. 变址寻址
课本P314-315

9. 相对寻址

注意 PC + 1,加的是一个字长


注意这句“数据在存储器中采用以低字节地址为字地址的存放方式”。
其实字地址才是不变的:\(0,4,8,\cdots\) ,后半句应该理解为“把低字节放在字地址”,那显然就是小端法,把小放小了
10. 堆栈寻址

理解按字编址!

7.4 指令格式举例
第八章 CPU的结构和功能
CPU的结构


8.2 指令周期
指令周期:取值周期、间指周期、执行周期、中断周期。

8.4 中断系统
一、中断请求标记

二、中断判优逻辑
硬件实现(排队器)
- 链式排队器
分散在各个中断源的接口电路
“门口排队,前面一人挡住后面所有人” - CPU内部排队器
“所有人都进大厅,裁判在屋里挑一个”
软件实现(程序查询)
三、中断服务程序入口地址寻找
硬件向量法

补充题5 :简述寻找中断服务程序入口地址的硬件向量法。
参考答案要点:
硬件向量法:利用分散设置在各个接口电路或设置在CPU芯片内的专门硬件(向量地址形成部件)产生向量地址,再根据向量地址访问相应内存单元,其内容即为中断服务程序入口地址。
该方法速度快,被现代计算机普遍采用。
软件查询法
四、中断响应
1. 响应中断的条件
- 允许中断触发器(EINT) = 1
- 有中断请求
- 指令执行结束
2. 响应中断的时间
指令执行周期结束时刻由 CPU 发查询信号。
3. 中断隐指令
中断隐指令是中断周期的预处理部分。
复习:在中断周期中,CPU应完成关中断、保存断点和转中断服务程序入口三个操作。

五、保护现场和恢复现场
(见第五章5.5)
六、中断屏蔽技术
多重中断
条件:
- 提前设置开中断指令。
- 优先级高的中断源有权中断优先级低的中断源
屏蔽技术
屏蔽字存放于屏蔽寄存器
屏蔽技术不可改变响应优先级。(区分响应优先级和处理优先级)



第九章 控制单元的功能
微操作命令的分析






9.2 控制单元的功能
一、 控制单元的外特性
二、控制信号举例
采用 CPU 内部总线






三、多级时序系统


作业9.3 什么是指令周期、机器周期和时钟周期?三者有何关系?
参考答案要点:
指令周期:CPU每取出并执行一条指令所需的全部时间叫指令周期;
机器周期(也叫CPU工作周期):是在同步控制的机器中,所有指令执行过程中的一个基准时间,通常以访问一次存储器所需的时间作为一个机器周期;
时钟周期(又叫节拍):是CPU工作时钟的周期时间(主频的倒数),它是控制计算机操作的最小时间单位。
三者之间的关系:一个指令周期包含若干个机器周期,而一个机器周期又包含若干个时钟周期。
第十章 控制单元的设计
10.1 组合逻辑设计




拷打方法: 写出完成指令所需的全部微操作和节拍安排
10.2 微程序设计
微指令基本格式:操作控制 + 顺序控制
工作原理


微指令的编码/控制方式
-
直接编码方式
![image]()
-
字段直接编码方式
![image]()
-
字段间接编码方式
![image]()
第五章 输入输出系统


5.3 I/O接口

程序查询方式
程序中断方式
中断处理五个阶段:中断请求、中断判优、中断响应、中断服务、中断返回。





DMA






浙公网安备 33010602011771号