计组复习
数据表示与运算
进位计数制
要素:基数、权值/位权
eg:
$$
\begin{align}
(101010)_{2} =0\times{2^{0}}+1\times{2^{1}}+0\times{2^{2}}+1\times{2^{3}}+0\times{2^{4}}+1\times{2^{5}} \
对于这个二进制数,基数就是2,位权n就是以2为底的幂,2^n
\end{align}
$$
不同进制表示的后缀
- 二进制(B)
- 八进制(O)
- 十进制(D)
- 十六进制(H)

eg:十进制转换成二进制
$$
\begin{align}
(23.87){10} \
23%2=1 \
11%2=1 \
5%2=1 \
2%2=0 \
1%2=1 \
倒着排序,整数部分表示为:10111 \
小数部分:(0.87){10} \
0.87\times{2}=1.74 取整1\
0.74\times{2}=1.48 取整1\
0.48\times{2}=0.96取整0 \
0.96\times{2}=1.92 取整1\
0.92\times{2}=1.84 取整1 \
受限于精度,就写5位小数,小数部分为11011 \
(23.87){10}=(10111.11011){2}
\end{align}
$$
BCD码/8421码
核心思想:用4位二进制数来表示1位十进制数(0~9)
eg:$(123){10}转换成BCD码:(0001\ 0010\ 0011){2}$
带符号数的表示
原码表示
符号位:+:0 -:1
数值部分:绝对值的二进制表示
反码表示
将原码除符号位之外的二进制位按位取反
补码表示
正数:原反补相同
负数:反码+1
注意:补码的 $(1.0000){2}$ 表示 $(-1.0000){10}$
数的定点表示
定点整数
无符号数:

对于字长为n的计算机,无符号定点整数的表示范围是:$0-(2^n-1)$
有符号数:
对于字长为n的计算机,定点有符号整数的最高位为符号位,剩下的n-1位位数值部分
那么表示范围是:
原码表示的范围: $-(2^{n-1}-1)\ -\ (2^{n-1}-1)$
补码表示的范围: $-2^{n-1}\ -\ (2^{n-1}-1)$
==(补码不需要区分正负0,因此可以表示到 $-2^{n-1}$ ,比如$(1000\ 0000){2}$,用原码表示就是-0,用补码表示就是-128,因为0的补码是$(0000\ 0000){2}$)==
带符号的定点小数:
原码定点小数范围:$-(1-2^{-(n-1)})\ -\ (1-2^{-(n-1)})$
补码定点小数范围: $-1\ -\ (1-2^{-(n-1)})$

优缺点
优点:表达直观、简单、硬件成本低
缺点:
- 表达既有小数又有整数的数据,需要设置比例因子
- 表达范围和分辨率固定,会产生溢出
数的浮点表示
浮点表示法
浮点数的一般形式: $N=M\times R^E$
M 尾数 R 基数(取值2/8/16等) E 阶码
阶码E为有符号整数 M为有符号小数
浮点数格式

$E_{f}:阶符\ 阶码E:用补码和移码表示$
$M_{f}:尾数数符\ 尾数M:用补码或原码表示$
浮点数的规格化问题
尾数最高有效位为1
核心: $\frac{1}{2} \leq|M|<1$
- 原码规格化形式:
- 正数:0.1XXXXXXX (尾数最高有效位M1=1)
- 负数:1.1XXXXXXX
- 补码规格化形式:
- 正数:0.1XXXXXXX(尾数最高有效位M1=1)
- 负数:1.0XXXXXXX(尾数最高有效位M1=0,除-1/2外,-1/2的补码的M1=1)
IEEE 754
格式为:符号位+阶码+尾数的形式
- 数符:占1位,正数0负数1
- 阶码E(对于32位浮点数,长度为8,对于64位浮点数,长度为11):使用移码表示,移码=真值+偏置值($2^{阶码位数-1}-1$)
- 尾数M:原码表示,$0\leq|M|<1$,尾数中隐含了最高位(整数位)1,计算时需要添加上整数位1,让数值变成1.M
特殊值
上溢:无穷大(INF)
任何有限数 / 0=无穷大(INF)
无穷大+任何数=无穷大(INF)
无穷大/无穷大=NaN(Not a Number)
5种类型浮点数据:
- 阶码E和尾数M各位全0:表示±0
- 阶码E全0,尾数M不全0,此时表示非规格化数,阶码E的真值直接解析成-126,尾数真值为0.M不用+1
- 阶码E全1,尾数M全0,此时表示±INF
- 阶码E全1,尾数M不全0,此时表示NaN
表示范围
单精度规格化:
- 正数最小值:E=1,M=1.0,表示的浮点数 $1.0\times 2^{1-127}=2^{-126}$
- 正数次小值:E=1,M= $1+2^{-23}$,表示的浮点数为 $(1+2^{-23})\times 2^{-126}=2^{-126}+2^{-149}$
- 正数最大值:E=254,M=1.1111…,表示的浮点数: $(2-2^{-23})\times 2^{254-127}=2^{128}-2^{104}$
单精度非规格化: - 正数最小值:M=$2^{-23}$,表示的浮点数为 $2^{-23}\times 2^{-126}=2^{-149}$
- 正数最大值: M= $1-2^{-23}$,表示的浮点数为 $(1-2^{-23})\times 2^{-126}=2^{-126}-2^{-149}$
定点加减运算
(X + Y)补 = X补 + Y补
(X - Y)补 = X补 + (-Y)补=X补-Y补
注意:无论Y补正负,Y补->(-Y)补:连同符号位一起按位取反,末尾加1
eg:4补=00100 (-4)补=(11011 + 1)=11100
原码->补码表示不需要动符号位,变补则需要连着符号位一起取反
单符号数溢出检测
单符号数就是只用一位符号位
$C_{f}:符号位进位\ \ C_{n}:最高位进位$
$Overflow=C_{f}\ \ \ XOR\ \ \ C_{n}$
双符号位数溢出检测
单符号数就是只用2位符号位,符号位最高位永远表示正确的符号位
$第一位符号位f_{1};第二位符号位f_{2}$
$Overflow=f_{1}\ \ \ XOR\ \ \ f_{2}$
移位操作
逻辑移位
不涉及符号位,就当做无符号数进行移位
算数移位
规则:
- 数符不变(左移时,单符号:符号位不变 双符号:第一符号位不变)
- 左移空位补0,右移空位补符号位(右移时,单符号数:空位补符号位,双符号数:第二符号位移动至尾数最高位)
浮点运算
重点:对阶;就是让两个浮点数的阶码一致
- 对阶规则:小阶向大阶看齐
- 对阶操作:小阶阶码增大,尾数右移
步骤:
- 对阶
- 尾数相加减
- 规格化(补码:正数:0.1xxxx,负数1.0xxxx(注意-1/2是特例))
模型机
指令系统
指令是什么?答:能让计算机执行某种操作的命令
指令系统是什么?答:一台计算机能执行的所有指令
指令格式
基本格式:操作码+地址码
- 操作码:告诉计算机执行什么操作(egL:ADD/SUB/MUL/DIV/MOV….)
- 地址码:可分为显地址和隐地址
- 操作数或操作数地址
- 存放执行结果的地址
- 下一条指令的地址(通常隐含)
四地址
1 | OP A1,A2,A3,A4 |

很少用,因为一般下一条指令地址位于PC+n,由操作系统控制的;A4通常不需要手动指定
三地址

比如:
1 | ADD A1,A2,A3 <=> (A1)+(A2)->A3;(PC)+n -> PC |
二地址
1 | OP A1,A2 <=> (A1)OP(A2) -> A1;(PC)+n -> PC |
A1称为目的操作数地址,A2称为源操作数地址;指令执行后,A1中原本的内容会被覆盖
单地址
根据有没有隐含操作数,可分为单操作数单地址指令和双操作数单地址指令
1 | OP A1 |
对于单操作数
1 | <=> OP(A1) -> A1;(PC)+n -> PC |
对于双操作数
引入一个隐含的操作数:累加寄存器ACC(也就是x86下的EAX)
1 | <=>(ACC) OP (A1) -> ACC;(PC)+n -> PC |
零地址
本身不需要操作数的指令,比如NOP,INT
隐含了单操作数:累加器ACC
一些堆栈的指令
操作码格式
可分为操作码定长和不定长


eg:
由题意得,X,Y,Z占的字长都是4位
对于三地址指令,OP的字长为4 OP可以从0000到1110(预留1111给二地址指令)
对于二地址指令,OP的长度为8,OP从1111 0000到1111 1110(预留1111 1111给单地址指令)
对于单地址指令,OP的长度为12,OP从1111 1111 0000到 1111 1111 1110(预留1111 1111 1111给零地址指令)
对于零地址指令,OP的长度为16,OP从1111 1111 1111 0000到 1111 1111 1111 1111
eg:
对于双操作数,OP占4位,双操作数指令最多有 $2^4$ 条,但是现在只占用了K条,也就是说还有 $2^4-K$ 条指令供其他操作数指令使用(或者这么说,前4位还可以组合出 $2^4-K$ 种情况)
对于单操作数,OP占10位,前4位还有 $2^4-K$ 种情况,后6位可以组合出最多 $2^6$种,也就是说单操作数指令最多有
$(2^4-K)\times 2^6$ 条,假设单操作数指令有X条,那么还能有 $(2^4-K)\times 2^6 -X$ 条指令供无操作数指令使用
无操作数指令最多有 $((2^4-K)\times 2^6 -X)\times 2^6$ 条,也就是说 $((2^4-K)\times 2^6 -X)\times 2^6 \geq L$
解得X
指令字长

寻址方式
什么是寻址方式?形式地址(指令中的地址) -> 有效地址(物理地址)
立即寻址 I
要访问的内存单元地址直接在指令中指出
1 | OP Ri,立即数 |
所需的操作数直接由指令给出
寄存器直接寻址 R
寄存器中存放着操作数
寻址过程:寄存器号->操作数
直接寻址 A
在指令中直接给出操作数在主存中的地址
OP A
操作数是(A)
寻址过程:操作数地址–>操作数

间接寻址 @A
就是指针其实
指令中的地址是存放操作数内存单元的地址,即间址地址
寻址过程:间址地址->操作数地址->操作数
寄存器间接寻址 @R
注意汇编助记符是(R)而不是((R)),R就相当于取出寄存器中的值即地址了
寄存器中存放的是操作数的地址,相当于把寄存器当做指针
寻址过程:寄存器->操作数地址->操作数
变址寻址 X(R)
变址量由用户决定
使用通用寄存器作为变址寄存器(需在指令里显式指出)
D称为形式地址,形式地址不变
使用特定寄存器(隐含)
基址选址
与变址寻址相反,不变的地址存在寄存器中
形式地址D可变,R的内容不变
基址加变址
基址寄存器(不变)+变址寄存器(可变)+形式地址D(可变)
相对寻址X(PC)
寻址地址位于(PC)±n,n用补码表示

堆栈寻址
PUSH和POP,栈顶指针SP,栈底指针BP
指令分类
复杂指令集CISC和简单指令集RISC
RISC用的多而且有点多
- 省代码空间
- 选用使用频率高的简单指令组合而成
- 复杂指令功能由多条简单指令组合而成
MIPS指令集
符号扩展
在高位补上符号位

MIPS寄存器
重点是记住0号寄存器,里面的值全0,记作$0 或者 $zero,在用add指令的时候会用到
MIPS指令类型
分为R型、I型、J型
其中R型指令 $2^6$ 条,I型指令与J型指令一共 $2^6 - 1$ 条
R型指令

注意:R型指令的OP全为0,区分R型指令通过func字段
I型指令

注意beq指令:如果rs与rt中的值相等,那么就跳转到beq下一条指令(PC中的地址)+符号扩展(imm)<<2
1 | Ext(imm) << 2 主要是为了模4地址 |
还有内存读/写指令
lw:load,即从内存中读
读取[rs+imm]中的内容到rt中
1 | rt <- [rs+imm] |
sw:store,把rt的数据存到内存[rs+imm]中
1 | rt -> [rs+imm] |
J型指令
jal比较特殊,跳转之前先保存断点到专用的寄存器$ra,类似call
1 | $ra <- PC+4 //PC是jal指令的地址 |

CPU主要寄存器

数据通路

三态门:就相当于在数据传输的路上设了一道阀门,输出使能OE有效时就通过,无效时呈现高阻抗状态Z,数据无法通过
在数据通路上就表现为数据流需要受时钟信号CLK控制
一些特殊的控制信号:
$$
\begin{align}
DRE_{in}: 从内存中加载数据到DR中\
DRE_{out}: 把DR中的数据写入内存中\
IR(A){out}:控制输出指令中偏移地址部分 \
IR(I){out}:控制输出指令中立即数部分
\end{align}
$$
取指令数据通路
时钟上升沿为时钟触发


微程序控制器
与组合逻辑控制器的区别:
- 微命令产生:组合逻辑控制器的微命令产生由硬布线逻辑电路产生,微程序控制器的微命令由微程序产生
- 性能:组合逻辑控制器设计简单,速度快,但是不易修改,扩展性差;微程序控制器设计较复杂,成本较高,但是易于修改,更加灵活
用软件思想设计硬件
微指令构造
- 操作控制字段
- 每一位对应一个控制信号,也称为微命令,可以同时给出多个
- 顺序控制字段
- 判别逻辑为0,下一条微指令地址从下址字段获取,否则按约定规则生成
微命令编码
直接表示法
把所有的控制信号都列举出来排成一列

很直观,但是微指令太长了
分组编码表示法
把互斥的指令放在一组,再加一个译码器,比如互斥微命令有8个,微指令的控制字段可以只用3位,产生$2^3=8$种,可以对应8个互斥的微命令
微指令格式

后续微地址形成

微程序控制器组成
控制存储器CM
类比主存Memory,存放微指令$\mu I$ ,是只读存储器ROM
微地址寄存器 $\mu AR$
作用是存放要取的微指令的地址,类比地址寄存器AR
微指令寄存器 $\mu IR$
存放当前执行的微指令,类比指令寄存器IR
微地址形成电路/地址转移逻辑

存储器
层次结构

分类
- 随机存取存储器RAM:可读可写,断电丢失
- 静态: SRAM(适合用于缓存,读取快成本高)
- 动态: DRAM(适合用于主存)
- 只读存储器ROM:只可读,断电不丢失,固化特性
- 可编程ROM:PROM
- 可擦除ROM:EPPROM
- 顺序存取存储器SAM
- 直接存取存储器DAM
指标
存储器带宽Bm
$$
Bm\ =\ 工作频率\times位宽
$$
eg:
$Bm=\frac{1}{500\times 10^9}\times 2\times 8\ bps$
容量
$容量=存储单元数\times存储单元位数$
访问长度
按字、半字、字节访问
假设机器的字长为32位
那么:
- 按字访问,访问的地址必须是模4地址
- 按半字访问,访问的地址必须是模2地址
存储器芯片结构
存储体
芯片存储容量计算:
$$
\begin{align}
M: 芯片地址线根数\
N: 芯片数据线根数\
芯片存储容量=2^M\times N=存储单元数\times 存储单元位数
\end{align}
$$

- 存储元:一个二进制位
- 存储单元:一个机器字
地址译码电路

片选和读写控制逻辑
- 片选端:$CS^*或者\overline{CS}$
- 为0时表示选中该芯片,可以对该芯片进行读写操作
- 写使能:$WE^*或者\overline{WE}$
- 为0时表示进行写操作
对主存储器进行扩展
位扩展
芯片的存储单元数与主存一致,但是位数不够,此时就需要进行位扩展
存储系统位宽为N,芯片位宽为K
需要的芯片数: $\frac{N}{K}$

要点:
- 位的并联:各芯片与CPU数据线各对应位拼接
- 片选信号:合用一个片选信号

字扩展
芯片字长与主存相同,但是容量不足,此时需要进行字扩展
要点:
- 各芯片数据线与CPU数据线各对应位串接在一起
- 各芯片的片段要分开


接口
立即程序传送
CPU总是认为外部的IO设备总是处于就绪状态,随时都可以进行数据传送,这就是立即传送/无条件传送

直接程序传送/程序查询方式

特点:
- CPU要主动地不断询问外设是否就绪
- 数据输入输出都要经过CPU
- CPU与外设间串行传输,效率低
中断

中断的特点:
- 数据传送“准备好”时,设备主动向CPU发送中断请求
- 具有随机性
- CPU与设备之间是并行工作的
- 适合低速设备(键盘等)

中断请求

中断请求触发器IRQ
TD:TD=1,表示设备就绪
TM:TM=0,表示不屏蔽中断源
若TD=1,TM=0,那么中断脉冲就会把1发送给IRQ,IRQ发送中断请求给CPU
中断向量
对于IBM PC系统:
有一个中断向量表
每个表项都是由一个16位段地址CS和16位偏移量IP组成

中断一共分为0~255型
DMA方式

DMA控制器功能:
- 初始化:确定主存首址、传送方向(读/写)、传多少
- 传送前:接收接口的DMA请求,判断优先级,向CPU申请总线
- 传送间:掌管总线,发地址、读写命令
接口功能: - 初始化:接收外设寻址信息
- 传送前:向DMA控制器发请求
- 传送间:传送数据
- 传送完:向CPU发中断请求
CPU的一些指标
主频f
指的是CPU内核的工作频率
时钟频率T
T=1/f
平均每秒执行的指令数IPS
平均每条指令的时钟周期数CPI
CPU时间
CPI*指令条数*T




