运算方法和运算器

注:该文章/专栏仅针对大学期末考试考点,不针对技术拓展以及考研内容

考点

  • 数据和文字的表示
  • 定点小数和定点整数的表示,表示范围
  • 浮点数的表示(IEEE754标准,浮点数的表示范围)
  • 十进制数串的表示(BCD码)
  • 定点乘法运算(不带符号的阵列乘法器;带符号阵列乘法器)
  • 定点除法运算(恢复余数法;加减交替法及其逻辑结构/CAS)
  • 定点运算器的组成:74181,先行进位部件74182
  • 浮点加减法/乘除法运算,流水线技术

进制转换

以十进制转二进制为例

  • 整数部分:除以2,记录每次的余数,倒着串在一起
  • 小数部分:乘以2,记录每次的值(大于1记1并只保留小数部分,小于1记0),正着串在一起

数据和文字的表示

数据可以分为真值和机器数

  • 真值即平常我们书写的数,可以带正负号。十进制,二进制,八进制,十六进制均可
  • 机器数即数据在计算机中的二进制表示形式,数的位数受及其字长的限制。

机器数的分类,按能否表示负数分就有无符号数和有符号数;按数据可表示范围分就有定点数和浮点数

机器数的表示形式:为原码、反码、补码、移码。(原码、反码、补码、移码。都是针对于 有符号的定点数)。计算机中的定点数使用补码进行运算。

字符与字符串的表示方法:ASCII码

汉字的表示方法:汉字的输入编码,汉字内码,汉字字模码

image.png

定点小数和定点整数的表示

定点数:机器中所有数据的小数点位置固定不变

  • 理论上,小数点的位置可以任意,实际上,约定小数点在固定的位置,不再使用记号 “.” 表示

  • 所以数据表示有两种方法:纯小数 和 纯整数

    只能表示 0. xx 和 整数

image.png

定点整数:最高位为符号位,其后为数值部分,小数点位置隐含约定在数值部分的后面

image.png

表示范围:

  • 4位长定点整数的表示范围: [ – (23 -1) , (23 -1) ]
  • 8位长定点整数的表示范围: [ – (27 -1) , (27 -1) ]
  • 16位长定点整数的表示范围: [ – (215 -1) , (215 -1) ]
  • n 位长定点整数的表示分为:[ – (2n-1 – 1),(2n-1 -1) ] ,可表示数字的数量:2n – 1

定点小数:最高位为符号位,小数点位置隐含约定在符号位的后面,其后为数值部分

image.png

表示范围:

  • 4位长定点小数的表示范围: [(123),(123)][ – (1 – 2^{-3} ) , (1 – 2^{-3} ) ]
  • 8位长定点小数的表示范围: [(127),(127)][ – (1 – 2^{-7} ) , (1 – 2^{-7} ) ]
  • 16位长定点小数的表示范围: [(1215),(1215)][ – (1 – 2^{-15}) , (1 – 2^{-15}) ]
  • n 位长定点小数的表示范围:[(12n1)(12n1)][ – (1 – 2^{n-1}),(1 – 2^{n-1}) ]

浮点数的表示

浮点数:把一个数的 有效数字 和 数的范围 在计算机的一 个存储单元中分别表示。

  • 数的 小数点位置 随 比例因子 的不同而在一定范围内自 由浮动。

    说白了就是一个存储单元能存储的机器字长分成两部分,一部分存整数,一部分存小数,由于其表示方法(其实就是类似于科学计数法捏),一部分存阶码,一部分存尾数

image.png

  • M:尾数:隐藏位1之后的数 (1.xxx,1隐藏不存,之后的xxx作为尾数)
  • e:阶码
  • R:基数

    这里说白了就是类似于科学计数法呗

早期计算机表示

image.png
– 由于这种表示方法,我们只需要分别存储阶码和尾数就行了,阶符和数符就是用来表示正负的
– 从这里也可以看出,阶码的位数影响浮点数的表示范围,而尾数的位数影响表示的浮点数精度
– 可以看到早起计算机表示浮点数的一个缺陷,就是阶码和尾数分别对应一个符号位,造成浮点数比较起来也比较麻烦

移码

  • 移码的传统定义:移码 = 真值 + 偏置值 (不定),移码是无符号数

IEEE 754标准:32位单精度浮点数

image.png

  • 可以看到,阶码是用移码表示的,因为8位下当第一位为符号位时,表示的最小数为 -127,加上固定的偏移值127后,意味着所有的数都是正数,也就是符号得到了统一,因此只需要一个尾数的符号位即可,这样方便比较和对阶 (下面会介绍)
  • 同样的,阶码E反应浮点数表示范围小数点的实际位置,尾数M反应浮点数表示精度

image.png

  • 当阶码用11位表示时,所以偏移值应为 21012^{10} – 1

IEEE 754标准:浮点数的规格化

image.png

  • 这里应该是1011.1101B = 1.0111101 * 2 130
    IEEE754的32位浮点数表示的除0外的绝对值最小的数:
  • x=(-1) S ×(1.0) * 2-126
    • M = 0,E = 1
      IEEE754的32位浮点数表示的除 ∞ 外的绝对值最大的数:
  • 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

image.png

定点乘法运算

基本的二进制加法器

image.png

两个原码数相乘的运算规则:

  • 乘积的符号位由两数的符号位按异或运算得到
  • 乘积的数值部分是两个正数相乘之积
  • 运算方法与普通的十进制乘法类似。

无符号阵列乘法器

设两个无符号二进制整数: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

实现这个乘法的过程:

image.png

  • 其实就和正常的乘法列式计算一模一样的

image.png

  • 如图所示,p就是对应的每位相加得到的数

m * n 位无符号的阵列乘法器逻辑图:

image.png

  • 使用与操作产生被加数 (二进制乘法中11为1, 1 0为0,可以用与操作替代)
  • 然后通过阵列乘法器计算即可

无符号阵列乘法器:

image.png

  • 如图所示,斜线代表进位

求补器电路:原码 –> 补码

image.png

  • 正数原码的补码是本身,负数原码的补码是其取反码再+1
  • 如图中公式所示,逻辑电路依据公式实现

有符号阵列乘法器

image.png

  • 符号位单独拿出做异或操作:正数 * 正数 和 负数 * 负数 都为正数,正数 * 负数为负数
  • 原码乘法:算前算后求补器不做操作,分开计算符号位和数值位乘法即可
  • 补码乘法:先把补码转换为原码,然后同原码乘法一样进行计算,最后再把求得的结果(原码)经过算后求补器转为补码即可
  • 符号位作为控制信号:判断什么时候让求补器进行求补操作,因为原码的补码是其本身,而负数的补码才需要操作

定点除法运算

原码除法的运算规则:

  • 商的符号由两数的符号“异或”求得,即同号时 为正,异号为负
  • 商的数值部分,实质上是两个正数求商的运算

我们在计算除法时,可以发现是通过比较余数大小来判断能不能除的,所以对于机器实现:机器比较余数和除数的方式是通过做减法,得 到的结果为正,表示够减,得到的结果为负,表示不够减。

两种方法:

  • 恢复余数法:不够减,则加上除数
  • 加减交替法:不够减,下次加除数

恢复余数法

image.png

  • 恢复余数法,其实就是先减一次,看看被除数是不是比除数大,如果得到的结果为正数,则说明大,可以除掉,q记为1,反之则说明比除数小,此时已经减掉了除数,因为除不掉,所以需要还原,也就是把恢复余数,再加上上一步减掉的余数,恢复到原值,对应的q记为0,然后除数右移一位再重复操作即可
  • 和传统除法思路是类似的,只不过多了个恢复余数操作而已,在除 (这里是减) 之后,除数需要乘以 2-1(和传统除法被除数多加个0一样)
  • 注意:减法在机器中是通过补码来实现的,因此这里也是,减去y的补码相当于加上-y的补码

little tip:小数点位置的确定:小数点一般就在第二位,这是定点小数运算,其它情况用不了,小数点没法确定

image.png

加减交替法

image.png

  • 从减开始,减、加、减、加,每次操作的时候除数都右移一位即可

加减交替法的阵列除法器:由一组可控加法/减法(CAS)单元构成 (感觉不会单独挑出来考这个)

  • CAS:其实就是经过逻辑判断这时候加还是减,然后A_i和B_i做个运算

并行触发器

image.png

  • 和上面计算的逻辑是一样的,只不过以逻辑电路的方式呈现了出来
  • 前一次的q同时作为控制信号,判断相加还是相减

定点运算器的组成

主要考74181、74182

运算器的基本组成:算术逻辑单元(ALU)、数据缓冲寄存器、 通用寄存器、多路转换器、数据总线等。

  • 多功能ALU:算术运算 + 逻辑运算 + 先行进位逻辑
    • 算术运算:加、减、乘、除等
    • 逻辑运算:逻辑乘(与)、逻辑加(或)、逻辑非 (反)、逻辑异或四种基本运算

image.png

半加器 是指不考虑低位有无向本位的进位,只将两个本位数相加的运算。 全加器 是指不仅要将两个本位数相加,还要将低位向本位的进位一起相加的运算。

  • 控制信号S0 ,S1 ,S2,S3 分别控制输入 Ai 和 Bi,产生 组合函数 Yi 和 Xi
    • Yi 是受S0 ,S1 控制的Ai 和Bi 的组合函数。
    • Xi 是受S2 ,S3 控制的Ai 和Bi 的组合函数。

image.png

  • 不同的控制参数得到不同的组合函数,以实 现多种算数运算和逻辑运算。
  • Yi 和 Xi 和下一位进位 Cn+i通过FA进行全加
  • 考虑是否有进位,输出 Cn+i+jC_{n+i+j}

image.png

任意一位的逻辑表达式:

image.png

  • C_{n+i+1} = Y_i + X_iC_{n+i} 该式由上面式子推导得到

4位ALU:

image.png

  • 可以看到每个全加器都依靠于前一个全加器的输出,串行运算 (行波进位)
  • 先行进位:通过上面计算 C_{n+i+1} 的式子可以很容易得到,C_{n+4} 不需要依靠于 C_{n+3},已知 C_n 即可,通过先行进位可以实现并行计算。

先行进位:

image.png

  • 可以看到,C_{n+i} = G + PC_{n}

74181

image.png

74181是4位先行进位ALU,若用4片74181串联,即:

image.png

  • 上面实现的是,片内先行进位,片间串行进位 (行波进位)

如果将四片74181的G 、P输出端送入到74182先行进位部件 (CLA),可实现第二级的先行进位,即组与组之间的先行进位

image.png

  • 通过74182线性进位部件(CLA) 实现16位全先行进位

浮点加减法运算

浮点加/减法操作流程:

  1. 0操作数检查
  2. 对阶,“小阶向大阶看齐”
  3. 尾数求和
  4. 结果规格化,“向左规格化”、“向右规格化”
  5. 舍入处理
  6. 溢出判断

第一步: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,因此需要小阶向大阶看齐

第三步:尾数相加减

  • 方法与定点加减运算一样,加减都按加法操作 (补码)

第四步:结果规格化

image.png

  • 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:正溢出

浮点乘除法运算

运算规则:阶码求加减,尾数求积商

image.png

运算步骤与加减一样
尾数舍入处理:

  • 截掉处理:丢掉正常尾数最低位之后的全部数值
  • 舍入处理:
    • 尾数用原码表示
      • 只要尾数多余位中包含1,则尾数末位置1
      • 0舍1入法:丢失的最高位的值为1,则把该1加到 最低位数值位上进行修正。

流水线技术

流水线技术:

  • 改善操作流程,提高时间并行性;
  • 流水线中的任务必须是连续的,只有不断的提供任务才 能充分发挥流水线的效率;
  • 在流水线中的每个功能部件之后都要有一个缓冲寄存器;
  • 流水线中各段的时间应该尽量相等,否则将会引起“堵 塞”和“断流”的现象;
  • 流水线需要有装入时间和排空时间,只有当流水线完全 充满时,才能充分发挥效率。

线性流水线的基本结构:

image.png

设过程段 Si所需的时间为τ_i,缓冲寄存器的延时为τ_1,线性 流水线的时钟周期定义为:

  • τ=max(τ_i)+τ_1
    一个具有k 级过程段的流水线处理 n 个任务需要的时钟周期数为:
  • T_K =k+(n-1)
  • 所需要的时间为:
    • T=T_K × τ
  • 非流水线处理,时间上串行,需时间:
    • T_L=n×k×τ
  • K 级线性流水线的加速比:
    • image.png

流水线浮点加法器(了解即可)

image.png

习题

习题-1:

image.png

习题-2:

image.png

习题-3:

image.png

习题-4:

  • 将十进制-0.75转换成IEEE 754的单精度浮点数格式表示
    • BF400000 H

习题-5:

  • 将十进制-23/64转换成IEEE 754的单精度浮点数格式表示
    • BEB80000 H

习题-6:

image.png

习题-7:

image.png

习题-8:

image.png

习题-9:

image.png

  • 4、8、4、16、2、不是

每个74182内先行进位,两个74182之间串行进位

习题-10:

image.png

习题-11:

image.png

习题-12:

image.png

  • 浮点数乘法中先求阶码和作为最后的阶码,同理,除法中是求阶码差
  • 尾数进行 乘法/除法 运算

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYHNbDut' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片