文章目录:
一:IO系统大题
1.硬件结构
CPU:程序查询、中断、DMA
接口
按字传输型:每次传输一个字
DMA型:每次传输一整块
传输总线
并行
多位一起传
串行
一位一位传
可能会有附加的校验位、起始位、结束位
设备
霸道总裁型
IO设备会按自己的节奏往IO缓冲区冲入数据
如果CPU不及时取走数据,就可能导致数据丢失
乖乖听话型
IO设备会根据CPU的指挥,往IO缓冲区冲入数据
CPU从缓冲区中取走一个字的数据后,会指挥I0设备输入下一个字的数据,不会有数据丢失的问题
2.CPU每次介入的动作
程序查询方式
每次检查IO接口数据是否准备完毕
—次程序查询的时间开销:需要执行多少条指令/需要多少个时钟周期?
CPU介入的频率——取决于查询程序上CPU的时间频率
中断控制方式
中断响应(隐指令)——时间开销——通常以时钟数作为条件
中断服务程序——时间开销
时钟数
指令总数、结合CPI
CPU介入的频率——取决于IO接口发来中断的频率
DMA控制方式
预处理:让DMA接口输入一块数据
后处理:一整块数据传输完成后,DMA接口给CPU中断,CPU处理中断
CPU介入的频率:每传一块介入一次
3.数据丢失问题
程序查询方式
当IO接口缓冲区大小有限时,每一次数据冲入后,CPU都需要及时的把数据取走,防止丢失
若CPU每次查询的时间开销太久,跟不上数据冲入的速度,则可能数据丢失
中断控制方式
判断是否会数据丢失:中断处理的时间,总共花了多少?是否大于IO接口冲入—次数据的时间
若中断处理时间太久,可能导致IO接口数据覆盖
DMA控制方式
不会数据丢失,DMA型的设备,都是乖乖听话型
二:数据运算大题
1.常见问题
无符号数的加法、减法怎么算?
在硬件看来,对无符号数的加减法、对有符号补码的加减法都是一样的计算方法
加法:直接N bit二进制按位相加
减法:计算“A-B”,可转化为等价的加法——将B的N bit全部按位取反末位+1,然后与A相加
遇到乘法怎么算?
通常可带入十进制手算
408大纲不要求掌握浮点数乘法
遇到除法怎么算?
通常可带入十进制手算
408大纲不要求掌握浮点数除法
溢出怎么判断?
加法/减法
手算判溢出
带入十进制计算结果,判断该结果是否超出了n位所能表示的范围,若超出,则溢出
机器判溢出
无符号数加/减:运算后若CF=1,则溢出;若CF=0,则不溢出
有符号数补码加/减︰运算后若OF=1,则溢出;若OF=0,则不溢出
乘法
n位乘n位,若用2n位保存乘积,则不会溢出
n位乘n位,用2n位保存中间结果,最后截取未尾n位作为最终的乘积,可能会溢出
手算判溢出
带入十进制计算乘法结果,判断该结果是否超出了n位所能表示的范围,若超出,则溢出
机器判溢出
两个有符号补码乘法:n位乘n位,用2n位保存中间结果。仅当前n+1位全1或全0时,不溢出
除法
可能溢出,但是,整数的除法不可能溢出,只有小数的除法可能溢出,而408不要求掌握浮点数除法,因此不需太关注除法的溢出问题
精度丢失怎么判断?
整数转浮点数︰数值部分精度更高的类型,转为数值部分精度更低的类型,就有可能发生精度丢失
浮点数转整数︰如果有浮点数有小数部分,则可能丢失精度
浮点数的精度:看尾数的位数
单精度浮点型float:尾数位数为23+1 bit。因此数值部分可以表示24bit的精度
双精度浮点型double:尾数位数为52+1 bit。因此数值部分可表示53bit的精度
临时浮点数long double:尾数位数为64+1bit。因此数值部分可表示65bit的精度
注:IEEE 754标准中,尾数是规格化的,隐含了一个最高位的1
定点整数的精度︰看数值位的位数
16位short型:数值部分的精度为15 bit
32位int型:数值部分的精度为31 bit
32位unsigned int 型:数值部分的精度为32bit
64位long型:数值部分的精度为63 bit
CF、ZF、OF、SF傻傻分不清楚?
CF
含义:进位/借位标志,表示无符号数的加减法是否发生了进位或借位。
当CF=1时,说明无符号数的加减运算发生了进位或借位,也即发生了溢出
硬件的计算方法:CF=最高位产生的进位+sub
sub=1表示减法
sub=0表示加法
注意:CF位对有符号数的加减法无意义
ZF
含义︰表示运算结果是否为0。ZF=1表示运算结果为0,ZF=O表示运算结果非O
硬件的计算方法:两个数的运算结果为n bit,只有n bit全为0时,ZF=1
OF
含义:有符号数的加减运算是否发生了溢出。OF=1时,说明发生了溢出
硬件的计算方法:OF=最高位产生的进位次高位产生的进位
注意:OF位对无符号数的加减法无意义
SF
含义:有符号数加减运算结果的正负性,SF=0表示运算结果为正数,SF=1表示运算结果为负数
硬件的计算方法:SF=最高位的本位和
注意:SF位对无符号数的加减法无意义
2.数制与编码
进位计数制及其相互转换(2 8 10 16)
二、八、十六之间的转换很简单
二转十——根据每位权值展开即可
十转二
好拼凑的——拼凑法(熟悉每个二进制位的权重)
不好拼凑的
整数部分:除2留余数,先留是低位后留是高位
小数部分:乘2取整,先取是高位后取是低位
真值和机器数——机器数对应的真值是什么?——三要素
进位级数制:二进制、BCD
定点or浮点
编码规则:原、反、补、移(需要注意偏移量多少)
字符与字符串
3.定点数的表示和运算
定点数的表示
无符号数的表示:重点关注无符号数的“减法”如何实现,以及无符号数加法/减法的溢出判断
带符号整数的表示:原、反、补、移(把符号位和数值位一起编码的方法)
定点数的运算
定点数的位移运算
原码定点数的加/减运算
补码定点数的加/减运算
定点数的乘/除运算
定点小数的乘除法——用于浮点数乘除法的实现
定点整数的乘除法——重点掌握定点整数补码乘除法
溢出概念和判别方法
4.浮点数的表示和运算
浮点数的表示:IEEE754标准——结构︰符号位+阶码+尾数
float:1+8+23
double:1+11+52
long double: 1+15+64
浮点数的加/减运算
对阶︰小阶向大阶对齐
尾数加减:原码定点数的加减法
规格化:尾数规格化为1.XXXXX的形式
尾数每左规一位,阶码-1
尾数每右规一位,阶码+1
舍入:尾数右规时,可能导致精度丢失,需考虑舍入问题
判溢出
尾数右规时,阶码超出可表示的最大值,上溢一发生溢出异常
尾数左规时,阶码低于可表示的最小值,下溢—一当做机器0处理
5.算术逻辑单元ALU
串形加法器和并行加法器
算术逻辑单元ALU的功能与结构
注:追求120以上高分的同学,请结合强化课P3理解王道书2.4.2的硬件图原理