注:该文章/专栏仅针对大学期末考试考点,不针对技术拓展以及考研内容
考点
- 数据和文字的表示
- 定点小数和定点整数的表示,表示范围
- 浮点数的表示(IEEE754标准,浮点数的表示范围)
- 十进制数串的表示(BCD码)
- 定点乘法运算(不带符号的阵列乘法器;带符号阵列乘法器)
- 定点除法运算(恢复余数法;加减交替法及其逻辑结构/CAS)
- 定点运算器的组成:74181,先行进位部件74182
- 浮点加减法/乘除法运算,流水线技术
进制转换
以十进制转二进制为例
- 整数部分:除以2,记录每次的余数,倒着串在一起
- 小数部分:乘以2,记录每次的值(大于1记1并只保留小数部分,小于1记0),正着串在一起
数据和文字的表示
数据可以分为真值和机器数
- 真值即平常我们书写的数,可以带正负号。十进制,二进制,八进制,十六进制均可
- 机器数即数据在计算机中的二进制表示形式,数的位数受及其字长的限制。
机器数的分类,按能否表示负数分就有无符号数和有符号数;按数据可表示范围分就有定点数和浮点数
机器数的表示形式:为原码、反码、补码、移码。(原码、反码、补码、移码。都是针对于 有符号的定点数)。计算机中的定点数使用补码进行运算。
字符与字符串的表示方法:ASCII码
汉字的表示方法:汉字的输入编码,汉字内码,汉字字模码
定点小数和定点整数的表示
定点数:机器中所有数据的小数点位置固定不变
-
理论上,小数点的位置可以任意,实际上,约定小数点在固定的位置,不再使用记号 “.” 表示
-
所以数据表示有两种方法:纯小数 和 纯整数
只能表示 0. xx 和 整数
定点整数:最高位为符号位,其后为数值部分,小数点位置隐含约定在数值部分的后面
表示范围:
- 4位长定点整数的表示范围: [ – (23 -1) , (23 -1) ]
- 8位长定点整数的表示范围: [ – (27 -1) , (27 -1) ]
- 16位长定点整数的表示范围: [ – (215 -1) , (215 -1) ]
- n 位长定点整数的表示分为:[ – (2n-1 – 1),(2n-1 -1) ] ,可表示数字的数量:2n – 1
定点小数:最高位为符号位,小数点位置隐含约定在符号位的后面,其后为数值部分
表示范围:
- 4位长定点小数的表示范围:
- 8位长定点小数的表示范围:
- 16位长定点小数的表示范围:
- n 位长定点小数的表示范围:
浮点数的表示
浮点数:把一个数的 有效数字 和 数的范围 在计算机的一 个存储单元中分别表示。
-
数的 小数点位置 随 比例因子 的不同而在一定范围内自 由浮动。
说白了就是一个存储单元能存储的机器字长分成两部分,一部分存整数,一部分存小数,由于其表示方法(其实就是类似于科学计数法捏),一部分存阶码,一部分存尾数
- M:尾数:隐藏位1之后的数 (1.xxx,1隐藏不存,之后的xxx作为尾数)
- e:阶码
- R:基数
这里说白了就是类似于科学计数法呗
早期计算机表示
– 由于这种表示方法,我们只需要分别存储阶码和尾数就行了,阶符和数符就是用来表示正负的
– 从这里也可以看出,阶码的位数影响浮点数的表示范围,而尾数的位数影响表示的浮点数精度
– 可以看到早起计算机表示浮点数的一个缺陷,就是阶码和尾数分别对应一个符号位,造成浮点数比较起来也比较麻烦
移码
- 移码的传统定义:移码 = 真值 + 偏置值 (不定),移码是无符号数
IEEE 754标准:32位单精度浮点数
- 可以看到,阶码是用移码表示的,因为8位下当第一位为符号位时,表示的最小数为 -127,加上固定的偏移值127后,意味着所有的数都是正数,也就是符号得到了统一,因此只需要一个尾数的符号位即可,这样方便比较和对阶 (下面会介绍)
- 同样的,阶码E反应浮点数表示范围小数点的实际位置,尾数M反应浮点数表示精度
- 当阶码用11位表示时,所以偏移值应为
IEEE 754标准:浮点数的规格化
- 这里应该是1011.1101B = 1.0111101 * 2 130
IEEE754的32位浮点数表示的除0外的绝对值最小的数: - x=(-1) S ×(1.0) * 2-126
- M = 0,E = 1
IEEE754的32位浮点数表示的除 ∞ 外的绝对值最大的数:
- M = 0,E = 1
- x=(-1) S * (1 + 1-2-23) ×2 127
- M 全为1,E为255 – 1,e则为 E – 127 = 127
十进制数串的表示(BCD码)
BCD码(Binary Coded Decimal)
-
压缩的十进制数串表示方法: 用四位二进制代码的不同组 合来表示一个十进制数码的编码方法,称为 二 – 十编码 , 也称BCD码
-
常作为十进制数转换成二进制数的中间过渡。即先将一个十进制数用BCD码来表示,再把它们送入机器。
其实就是用四个连续的二进制数表示一个十进制数这样
例子:
- 十进制真值: 4978.149
- BCD码:0100 1001 0111 1000 . 0001 0100 1001
定点乘法运算
基本的二进制加法器
两个原码数相乘的运算规则:
- 乘积的符号位由两数的符号位按异或运算得到
- 乘积的数值部分是两个正数相乘之积
- 运算方法与普通的十进制乘法类似。
无符号阵列乘法器
设两个无符号二进制整数:A=a_{m-1}…a_1 a_0 B=b_{n-1}…b_1b_0
产生 m+n 位乘积P:P=p_{m+n-1}…p_1p_0
实现这个乘法的过程:
- 其实就和正常的乘法列式计算一模一样的
- 如图所示,p就是对应的每位相加得到的数
m * n 位无符号的阵列乘法器逻辑图:
- 使用与操作产生被加数 (二进制乘法中11为1, 1 0为0,可以用与操作替代)
- 然后通过阵列乘法器计算即可
无符号阵列乘法器:
- 如图所示,斜线代表进位
求补器电路:原码 –> 补码
- 正数原码的补码是本身,负数原码的补码是其取反码再+1
- 如图中公式所示,逻辑电路依据公式实现
有符号阵列乘法器
- 符号位单独拿出做异或操作:正数 * 正数 和 负数 * 负数 都为正数,正数 * 负数为负数
- 原码乘法:算前算后求补器不做操作,分开计算符号位和数值位乘法即可
- 补码乘法:先把补码转换为原码,然后同原码乘法一样进行计算,最后再把求得的结果(原码)经过算后求补器转为补码即可
- 符号位作为控制信号:判断什么时候让求补器进行求补操作,因为原码的补码是其本身,而负数的补码才需要操作
定点除法运算
原码除法的运算规则:
- 商的符号由两数的符号“异或”求得,即同号时 为正,异号为负
- 商的数值部分,实质上是两个正数求商的运算
我们在计算除法时,可以发现是通过比较余数大小来判断能不能除的,所以对于机器实现:机器比较余数和除数的方式是通过做减法,得 到的结果为正,表示够减,得到的结果为负,表示不够减。
两种方法:
- 恢复余数法:不够减,则加上除数
- 加减交替法:不够减,下次加除数
恢复余数法
- 恢复余数法,其实就是先减一次,看看被除数是不是比除数大,如果得到的结果为正数,则说明大,可以除掉,q记为1,反之则说明比除数小,此时已经减掉了除数,因为除不掉,所以需要还原,也就是把恢复余数,再加上上一步减掉的余数,恢复到原值,对应的q记为0,然后除数右移一位再重复操作即可
- 和传统除法思路是类似的,只不过多了个恢复余数操作而已,在除 (这里是减) 之后,除数需要乘以 2-1(和传统除法被除数多加个0一样)
- 注意:减法在机器中是通过补码来实现的,因此这里也是,减去y的补码相当于加上-y的补码
little tip:小数点位置的确定:小数点一般就在第二位,这是定点小数运算,其它情况用不了,小数点没法确定
加减交替法
- 从减开始,减、加、减、加,每次操作的时候除数都右移一位即可
加减交替法的阵列除法器:由一组可控加法/减法(CAS)单元构成 (感觉不会单独挑出来考这个)
- CAS:其实就是经过逻辑判断这时候加还是减,然后A_i和B_i做个运算
并行触发器
- 和上面计算的逻辑是一样的,只不过以逻辑电路的方式呈现了出来
- 前一次的q同时作为控制信号,判断相加还是相减
定点运算器的组成
主要考74181、74182
运算器的基本组成:算术逻辑单元(ALU)、数据缓冲寄存器、 通用寄存器、多路转换器、数据总线等。
- 多功能ALU:算术运算 + 逻辑运算 + 先行进位逻辑
- 算术运算:加、减、乘、除等
- 逻辑运算:逻辑乘(与)、逻辑加(或)、逻辑非 (反)、逻辑异或四种基本运算
半加器 是指不考虑低位有无向本位的进位,只将两个本位数相加的运算。 全加器 是指不仅要将两个本位数相加,还要将低位向本位的进位一起相加的运算。
- 控制信号S0 ,S1 ,S2,S3 分别控制输入 Ai 和 Bi,产生 组合函数 Yi 和 Xi
- Yi 是受S0 ,S1 控制的Ai 和Bi 的组合函数。
- Xi 是受S2 ,S3 控制的Ai 和Bi 的组合函数。
- 不同的控制参数得到不同的组合函数,以实 现多种算数运算和逻辑运算。
- Yi 和 Xi 和下一位进位 Cn+i通过FA进行全加
- 考虑是否有进位,输出
任意一位的逻辑表达式:
- C_{n+i+1} = Y_i + X_iC_{n+i} 该式由上面式子推导得到
4位ALU:
- 可以看到每个全加器都依靠于前一个全加器的输出,串行运算 (行波进位)
- 先行进位:通过上面计算 C_{n+i+1} 的式子可以很容易得到,C_{n+4} 不需要依靠于 C_{n+3},已知 C_n 即可,通过先行进位可以实现并行计算。
先行进位:
- 可以看到,C_{n+i} = G + PC_{n}
74181
74181是4位先行进位ALU,若用4片74181串联,即:
- 上面实现的是,片内先行进位,片间串行进位 (行波进位)
如果将四片74181的G 、P输出端送入到74182先行进位部件 (CLA),可实现第二级的先行进位,即组与组之间的先行进位
- 通过74182线性进位部件(CLA) 实现16位全先行进位
浮点加减法运算
浮点加/减法操作流程:
- 0操作数检查
- 对阶,“小阶向大阶看齐”
- 尾数求和
- 结果规格化,“向左规格化”、“向右规格化”
- 舍入处理
- 溢出判断
第一步:0操作数检查
- 对于乘法:检测两个尾数中是否一一个为0,若有一个为0,则乘积必为0,不再做其他操作;若两尾数均不为0, 则可进行乘法运算
- 对于除法:若被除数x为0,则商为0;若除数y为0,则商为∞,另作处理。若两尾数均不为0,则可进行除法运算
第二步:对阶,“小阶向大阶看齐”
小阶向大阶看齐:如果把阶码小的向阶码大的看齐,在移位过程中如果发生数据丢失,也是最右边的数据位发生丢失,最右边的数据位丢失,只会影响数据的精度,不会影响数据的大小。
-
先求阶差 △E=EX-EY
-
若△E=0,则不必对阶
-
若△E>0,则EX > EY,阶码向EX 看齐,MY右移△E位
-
若△E<0,则EX< EY,阶码向EY 看齐,MX右移|△E|位
其实就是保证阶码相同,这样的话尾数直接相加减即可,同时为了保证计算的结果仍然是1.xxx,因此需要小阶向大阶看齐
-
第三步:尾数相加减
- 方法与定点加减运算一样,加减都按加法操作 (补码)
第四步:结果规格化
-
111.0011或0.00011101 为非规格化数
-
将结果规格化成 1.xxx * 2n 的形式
- 右规格化:尾数右移1位,阶码加1
- 左规格化:尾数左移1位,阶码减1
第五步:舍入处理
-
对阶和规格化时,尾数要右移,被右移的尾数 的低位部分会被丢掉,造成误差,故要进行舍入处理。
-
IEEE754标准提供四种方法,主要需要掌握两种:
-
就近舍入 / 0舍1入法
- 现在要移出10010了,这时最高位为1,则把10010移出,尾数末尾+1
- 现在要移出01111了,这时最高位为0,则把01111直接移出,尾数不操作
-
截断法
- 超出位数的数据直接移出
-
第六步:溢出处理
- 阶码上溢:浮点数的指数 e 超出机器阶码表示的最大值。结合数符,可判定浮点数为+∞或-∞。
- 阶码下溢:浮点数的指数 e 超出机器阶码表示的最小值。可判定浮点数0。
- 尾数上溢:两个同符号尾数相加产生了最高位向上的进位,将尾数右移,阶码增1来重新对齐。
- 尾数下溢:在将尾数右移时,尾数的最低有效位从尾数域右端流出, 要进行舍入处理
双符号位:
- 11:负数,00:正数
- 10:负溢出,01:正溢出
浮点乘除法运算
运算规则:阶码求加减,尾数求积商
运算步骤与加减一样
尾数舍入处理:
- 截掉处理:丢掉正常尾数最低位之后的全部数值
- 舍入处理:
- 尾数用原码表示
- 只要尾数多余位中包含1,则尾数末位置1
- 0舍1入法:丢失的最高位的值为1,则把该1加到 最低位数值位上进行修正。
- 尾数用原码表示
流水线技术
流水线技术:
- 改善操作流程,提高时间并行性;
- 流水线中的任务必须是连续的,只有不断的提供任务才 能充分发挥流水线的效率;
- 在流水线中的每个功能部件之后都要有一个缓冲寄存器;
- 流水线中各段的时间应该尽量相等,否则将会引起“堵 塞”和“断流”的现象;
- 流水线需要有装入时间和排空时间,只有当流水线完全 充满时,才能充分发挥效率。
线性流水线的基本结构:
设过程段 Si所需的时间为τ_i,缓冲寄存器的延时为τ_1,线性 流水线的时钟周期定义为:
- τ=max(τ_i)+τ_1
一个具有k 级过程段的流水线处理 n 个任务需要的时钟周期数为: - T_K =k+(n-1)
- 所需要的时间为:
- T=T_K × τ
- 非流水线处理,时间上串行,需时间:
- T_L=n×k×τ
- K 级线性流水线的加速比:
-
流水线浮点加法器(了解即可)
习题
习题-1:
习题-2:
习题-3:
习题-4:
- 将十进制-0.75转换成IEEE 754的单精度浮点数格式表示
- BF400000 H
习题-5:
- 将十进制-23/64转换成IEEE 754的单精度浮点数格式表示
- BEB80000 H
习题-6:
习题-7:
习题-8:
习题-9:
- 4、8、4、16、2、不是
每个74182内先行进位,两个74182之间串行进位
习题-10:
习题-11:
习题-12:
- 浮点数乘法中先求阶码和作为最后的阶码,同理,除法中是求阶码差
- 尾数进行 乘法/除法 运算