Presentation is loading. Please wait.

Presentation is loading. Please wait.

第四章 数据的机器运算 计算机的主要功能是对数据进行各种加工和处理,包括加、减、乘、除这些基本的算术运算,与、或、非这些基本的逻辑运算,以及由此构成的其它复杂的运算。运算器则是实现这些运算的主要部件。 无论多么复杂的运算,最终都要分解为加法运算来实现。其中,减法运算通过补码转化为加法来实现 ;乘、除运算可以转换为加减运算、移位操作来实现。加法和移位是计算机中最基本的两种运算操作。

Similar presentations


Presentation on theme: "第四章 数据的机器运算 计算机的主要功能是对数据进行各种加工和处理,包括加、减、乘、除这些基本的算术运算,与、或、非这些基本的逻辑运算,以及由此构成的其它复杂的运算。运算器则是实现这些运算的主要部件。 无论多么复杂的运算,最终都要分解为加法运算来实现。其中,减法运算通过补码转化为加法来实现 ;乘、除运算可以转换为加减运算、移位操作来实现。加法和移位是计算机中最基本的两种运算操作。"— Presentation transcript:

1 第四章 数据的机器运算 计算机的主要功能是对数据进行各种加工和处理,包括加、减、乘、除这些基本的算术运算,与、或、非这些基本的逻辑运算,以及由此构成的其它复杂的运算。运算器则是实现这些运算的主要部件。 无论多么复杂的运算,最终都要分解为加法运算来实现。其中,减法运算通过补码转化为加法来实现 ;乘、除运算可以转换为加减运算、移位操作来实现。加法和移位是计算机中最基本的两种运算操作。 可见,加法器又是运算器的核心部件。在加法器的基础上增加移位功能,并通过选择输入控制条件,就可以实现所有的运算。

2 本章主要内容 主要内容 算术、逻辑运算的实现 定点加、减运算 数的移位和舍入操作 定点乘、除运算 规格化浮点运算

3 一、算术逻辑运算的实现 计算机中最基本的算术运算是加法运算,不论加、减、乘、除运算最终都可以归结为加法运算。所以首先讨论最基本、最核心的运算部件——加法器,以及并行加法器的进位问题。 加法器是由全加器和其它必要的逻辑电路组成的,所以我们从全加器开始讨论。

4 1、全加器(FA) 全加器真值表 全加器(FA)是最基本的运算单元,由它构成加法器。 Ai Bi Ci-1 Si Ci 0 0 0 0 0
全加器真值表 全加器(FA)是最基本的运算单元,由它构成加法器。 全加器有三个输入量:操作数Ai、Bi、以及低位传来的进位信号Ci-1 。 全加器有两个输出量:本位和Si、以及向高位的进位信号Ci。

5 全加器的逻辑方程和电路 根据真值表得: 实现电路 逻辑框图 Si=Ai⊕Bi⊕Ci-1 Ci=AiBi+(Ai⊕Bi)Ci-1
一个全加器只完成一位加法

6 全加器构成加法器 全加器并不存储信息,可用门电路来实现。用全加器能够方便地构成加法器。加法器分为串行加法器和并行加法器。
串行加法器只有一个全加器,数据逐位串行送入加法器进行计算。由于运算速度慢,一般不用。 并行加法器则由若干个这样的全加器构成,各位数据同时运算。并行加法器的位数与操作数的位数相等。并行加法器的最长运算时间主要取决于进位信号的传递时间。例如:11…11和00…01相加,最低位产生的进位将逐位影响到最高位. 由此可见,提高并行加法器速度的关键是尽量加快进位产生和传递的速度。

7 2、进位产生与传递 进位链的概念: 并行加法器中的每一个全加器都有一个从低位送来的进位输入和一个传送给高位的进位输出。我们把构成进位信号产生和传递的逻辑网络称为进位链。 进位链上每一位的进位表达式为: Ci=AiBi+(Ai⊕Bi)Ci-1 设 Gi=AiBi ,称为进位产生函数 Pi=Ai⊕Bi ,称为进位传递函数 ∴ 进位表达式 Ci=Gi+PiCi-1

8 串行进位 把n个全加器串联起来,就可以实现两个n位数的相加。这种加法器称为串行进位的并行加法器,串行进位又叫行波进位。
其中:C1=G1+P1C0 C2=G2+P2C1 Cn=Gn+PnCn-1 串行进位的并行加法器,总的延迟时间正比于字长,字长越长,总延迟时间也越长。 若一位进位需2ty时间,完成n位进位就需要2nty. 要提高加法运算速度,必须改进进位方式。

9 3、并行加法器的快速进位 改进串行进位方式的基本思路是让各进位同时形成,避免各进位之间的依赖关系。现在来分析一下进位关系。
展开C1=G1+P1C0 ;C2=G2+P2C1 ;… ,Cn=Gn+PnCn-1 得关系式: C1=G1+P1C0 C2=G2+P2C1=G2+P2G1+P2P1C0 C3=G3+P3C2=G3+P3G2+P3P2G1+P3P2P1C0 C4=G4+P4C3=G4+P4G3+P4P3G2+P4P3P2G1 +P4P3P2P1C0 以上进位输出只与Gi、Pi以及最低进位C0有关,而且不依赖于其低位进位Ci-1的输入,因此各级进位可以同时产生,形成并行进位。

10 并行进位的特点 并行进位的特点是各级进位信号同时形成,与字长无关,提高了整体运算速度 。并行进位又叫先行进位。 最长延迟时间仅为2ty。
随着加法器位数的增加,Ci的逻辑表达式会变得越来越长,输入变量会越来越多,电路结构也会变得越来越复杂,导致电路实现也越来越困难。 并行进位方式需继续改进,才能有实用价值。这就是下面要介绍的分组进位方式。

11 单级先行进位 以16位加法器为例,将其分为4组,每组4位。
在组内,按照并行进位函数直接产生C1~C4,这些进位可同时得到。实现这种进位逻辑的电路称为4位先行进位电路(CLA),如74181ALU。 利用这种4位一组的CLA电路和4位全加器可以构成4位CLA加法器。注意,4位CLA加法器包含了两部分逻辑:4位全加器和4位一组的先行进位链,这个组内的进位为一级进位。 在组间,每个组的进位输入是前一个组的进位输出,而每个组的进位输出是下一个组的进位输入. 构成16 位加法 器很容 易实现

12 单级先行进位(续一) 上述组内并行、组间串行的进位方式也称为单级先行进位方式,原理如下图所示。

13 单级先行进位(续二) 组内并行、组间串行进位的时间图(16位)如下: 完成进位时间8ty. 进位时间与组数成正比,组数越多,进位时间越长。

14 多级先行进位 为说明问题,我们不妨仍以16位加法器为例,仍然4位一组,分成4个小组,先就第一小组的进位输出函数C4做一下分析:
C4 = G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0 G1* P1* = G1* +P1*C0 G1*称为组进位产生函数,P1*称为组进位传递函数;这两个函数类似于进位产生函数G和进位传递函数P.

15 多级先行进位(续一) 四个组内的最高进位C16、C12、C8、C4可以分别表示为: 现在逐项代入、并展开得关系式:
C4 = G1* + P1* C0 C8 = G2* + P2* C4 C12 = G3* + P3* C8 C16 = G4* + P4* C12 现在逐项代入、并展开得关系式: C8 = G2*+P2*C4=G2*+P2*G1* +P2*P1*C0 C12 = G3*+P3*G2*+P3*P2*G1* +P3*P2*P1*C0 C16 = G4*+P4*G3*+P4*P3*G2*+P4*P3*P2*G1*+P4*P3*P2*P1*C0 可以看出,这4组进位结构与前述4位先行进位逻辑完全相同,组间进位信号只与最低进位C0有关,所以能同时产生。

16 多级先行进位(续二) 组内进位信号能同时产生、组间进位信号也能同时产生,由此可以构成多级并行进位逻辑。16位2级先行进位加法器如下图所示。

17 多级先行进位(续三) 问题是这4个组间进位信号如何用硬件来产生呢?对于多级先行进位的实现可以按如下思路来理解:
先把单级先行进位加法器的串行进位链断开; 增加一级先行进位链,这个新增加的先行进位链的进位称为二级进位; 组间进位信号C4、C8、C12、C16由二级进位链来产生,其逻辑关系式已经得到; 让一级进位链多产生两个辅助函数Gi*和Pi*,并且作为二级进位链的输入。

18 多级先行进位(续四) 16位2级先行进位时间图 进位产生次序如下:
产生第一小组的C1~C3、所有组进位产生函数Gi*和组进位传递函数Pi*,时间为2ty. 由CLA电路产生第二、三、四小组的组间进位信号C4、C8、C12、C16,时间为2ty. 产生第二、三、四小组的组内进位信号C5、C6、C7、C9、C10、C11、C13、C14、C15,时间为2ty.

19 4、多功能算术逻辑部件ALU 前面介绍了运算器的算术运算功能,为了完成多种算术逻辑运算,需要将加法器的功能进行扩展,扩展的基本思想如下:
参加运算的两个数Ai、Bi和低位进位Ci-1先不进行全加,先把两个输入Ai、Bi和四个控制参数S0、S1、S2、S3进行组合,形成函数Xi和Yi,然后再将Xi、Yi和低位进位Ci-1通过全加器进行全加。这样一来,控制参数不同,得到的组合函数也不同,从而实现多种算术和逻辑运算。

20 算术逻辑部件ALU 算术逻辑部件ALU大体上有三部分组成: 全加器 进位链 输入选择器

21 算术逻辑部件ALU(续一) 一位加法器由全加器和进位门构成,其中,两个半加器构成全加器、与或非门构成一位进位门。
一位输入选择器,由两个与或非门构成,可输入2个本位操作数或非、4个控制信号(S3~S0) 一个控制门M,选择算逻运算。当M=0时,开门接收低位来的进位信号,执行算术运算;当M=1时,关门不接收低位进位信号,执行逻辑运算,与进位无关。

22 算术逻辑部件ALU(续二) 控制信号与选择器输出关系表: S3 S2 Xi S1 S0 Yi 0 0 1 0 0 Ai
Ai+Bi AiBi Ai+Bi AiBi Ai 进位传递函数 进位产生函数 通过不同的输入选择,实现不同的功能,这进一步说明:数据是在传送过程实现运算、并得到处理的。多位ALU的实现思路完全一样。

23 5、运算器的组织 运算器主要由算逻部件ALU、寄存器、多路转换器、内部数据总线组成。
运算器大体上有如下三种结构:单总线结构、双总线结构和三总线总线结构。

24 运算器的3种组织结构 操作数需要分两次送入ALU,而且需要两个缓冲寄存器;完成一次运算需要3步。特点是控制电路简单,而速度较慢。
两条总线同时供给操作数,输出与第三条总线相连;完成一次运算需要1步。特点是操作速度快,控制相对复杂一些。

25 二、定点加减运算 原码加减运算 当原码做加减运算时,符号位不参加运算,只在两数的绝对值之间进行。
加法时可能要做减法(两数异号)、减法时又可能做加法(两数异号)。 操作结果需要根据绝对值的大小来确定运算结果的符号。计算机中通常没有减法器,减法运算需要转换为加法来实现。 结论:原码加减运算过程比较复杂,一般不用.

26 1、补码加减运算 补码的运算规则: 补码加减运算的依据如下: 参加运算的操作数用补码表示。 补码的符号位与数值位同时参加运算。
若做加法,则两数补码直接相加; 若做减法,用被减数与减数的机器负数相加。 运算结果为和、差的补码。 注:机器负数等于补码连同符号位按位求反,末位加1。 补码加减运算的依据如下: 和的补码等于补码的和 [X + Y]补 = [X]补 + [Y]补 相反数的补码等于补码的相反数 [-X]补 = - [X]补 差的补码等于补码的差 [X-Y]补 = [X]补+ [-Y]补 = [X]补- [Y]补

27 补码加减示例 例2、A=0.1011, 例1、A=0.1011, B=-0.0010,求A-B. B=-0.1110,求A+B.
0.1101 ∴ [A-B]补 = A-B = 例1、A=0.1011, B= ,求A+B. 解: [A]补 = , [B]补 = 0.1011 1.1101 ∴ [A+B]补 = A+B =

28 2、补码加减溢出的判别 例3、X=1011,Y=111 求X+Y。 例4、X=-1011,Y=-111 求X+Y。
0,1011 (+11) ,0101 (-11) + 0,0111 (+7) ,1001 (-7 ) 1, ,1110 [X+Y]补 =1, [X+Y]补=0,1110 X+Y=-1110 (-14) X+Y= (+14) 出错原因在于用了4个二进制位来表示绝对值为18的和数。

29 补码加减运算溢出 当运算结果超出了机器所能表示的范围时, 数值位侵占了符号位,这种现象称为溢出。 两个同符号的数相加会产生溢出。
两个正数相加,结果大于机器所能表示的 最大正数,称为上溢(正溢)。 两个负数相加,结果小于机器所能表示的 最小负数,称为下溢(负溢)。

30 补码加减溢出的判别方法 判断溢出的三种基本方法: ① 采用一个符号位判别 当参加运算的两个数的符号为0、而和的符号位为1时上溢;
当参加运算的两个数的符号为1、而和的符号位为0时下溢。 ∴ 判别条件为:溢出= XsYsSs+XsYsSs 其中,Xs、Ys为参加运算两数的符号, Ss为结果符号位。

31 补码加减溢出的判别方法(续) ②采用进位位判别 两个正数相加,当最高有效位产生进位(C1=1)而符号位不产生进位(Cs=0)时,发生上溢;
∴ 判别条件为:溢出= CsC1+CsC1 = Cs⊕C1 ③采用变形补码(双符号位补码) 采用变形补码检测,当运算结果的两符号位不一致时表示溢出。若符号位用Ss1Ss2表示,则Ss1Ss2=01 结果上溢,Ss1Ss2=10 结果下溢. ∴ 判别溢出的条件为: 溢出=Ss1⊕Ss2 SS1始终正确

32 3、补码定点加减运算器的基本组成 补码加法: 在X→F、Y→F、F→X三个控制信号的控制下,打开门A、门B和门C,把寄存器X和寄存器Y的内容送入加法器的两个输入端进行加法运算,把结果送回寄存器X中. 补码减法:与补码加法不同之处在于要用Y→F来代替Y→F、并在1→F控制信号作用下使结果加1,即可完成补码减法运算。

33 三、带符号数的移位与舍入 移位是算术、逻辑运算的又一基本操作,而且几乎 所有机器的指令系统都设有移位指令。比如,乘法 运算大多数是通过“累加—移位”来实现的。 算术移位操作时,符号位不变,数值大小则会发生 变化。左移一位相当于乘以2,右移一位相当于除 以2,因为移位使位权发生了变化。 在移位过程中,有效数位会被移出数据字而丢失。 因此,还需要考虑数据的舍入问题,以尽可能提高 数据的表示精度。

34 1、移位规则 原码移位规则 补码移位规则 符号位不变 空出位补0 例如:1X1X2X3…Xn 左移后为:1X2X3…Xn0
算术左移在不产生溢出时, 符号位保持不变。 原码移位规则 符号位不变 空出位补0 例如:1X1X2X3…Xn 左移后为:1X2X3…Xn0 右移后为:10X1X2…Xn-1 补码移位规则 符号位不变 左移时,空出位补0 右移时,符号位补充空出位 例如:1X1X2X3…Xn 左移后为:1X2X3…Xn0 右移后为:11X1X2…Xn-1 我们用的微机使用补码 来表示数据…....

35 2、移位器逻辑电路 移位器是由与门和或门组成的逻辑电路(实际是一个多路选择器),可以实现直传(不移位)、左斜一位送(左移一位)和右斜一位送(右移一位)的功能。移位器逻辑电路如图所示。 左移由2F→L控制,Fi-1→Li 直传由F→L来控制,Fi→Li 右移由F/2→L来控制,Fi+1→Li 移位器无数据寄存能力。

36 3、舍入操作 舍入操作有以下几种: 截断法:无条件地舍去多余的位。 恒置1法:舍去多余位,保留部分最低位置1。
0舍1入法:舍去部分的最高位为1时,则保留部分末位加1,与四舍五入法类似。 截断法和恒置1法误差比较大;0舍1入法比较合理,但当保留部分为0.11…1时,会导致再次溢出。末位恒置1,在除法中非常有用。

37 四、定点乘法运算 乘法运算要比加法运算复杂。先举一个大家熟悉的手工定点乘法的例子;之后我们来看,如果将手工运算改为机器运算,会出现什么问题?该如何解决? 例:0.1101× = ? 0.1101 × 1101 0000 手工计算的二进制乘法规则: 数值位:① 0×0 = 0 ② 1×0 = 0 ③ 1×1 = 1,逻辑与。 符号位:① 同号相乘为正 ② 异号相乘为负,逻辑异或 其结果:乘积 = 符号位 // 数值位。

38 乘法:由手工计算到机器运算 由手工计算到机器运算,需要解决3个问题: 符号如何处理? 多个部分积如何相加?
为保持两次部分积之间的位权对应关系,会导致加法器位数的增加,能否在不增加位数的情况下保持位权对应? 由于解决方式的不同,形成了两种主要的乘法器结构 采用常规的加法器来实现 将n位乘法转换为n次累加和移位,每次处理1位。 为避免加法器位数的扩充,可以把手工计算时的新部分积“左移——累加”改为机器运算的原部分积“累加——右移”。 采用阵列乘法器实现 利用中大规模集成电路把多项部分积同时相加,这种结构的乘法器称为阵列乘法器。

39 1、原码一位乘法 原码一位乘法是从手算演变而来的,即用两个操作数的绝对值相乘,乘积的符号为两操作数符号的异或值(同号为正,异号为负).
乘积 P = |X|×|Y| 符号 Ps = Xs⊕Ys 原码一位乘法的规则 ①被乘数和乘数取绝对值。 ②乘数的最低位为1时,部分积加被乘数,否则加0。 ③部分积和乘数右移一位。 ④重复②③,直到乘数全部移出。 ⑤积的符号由两乘数符号的异或得到。 ⑥积的符号与积的数值拼接得到积的原码。

40 原码一位乘示例 实际运算的准备工作: 例4:已知:X=0.1101,Y=-0.1011,求:X×Y。
|被乘数| B寄存器 |乘数| C寄存器(将要存放部分积的低位) A寄存器(将要存放部分积的高位) 例4:已知:X=0.1101,Y= ,求:X×Y。 解: |X|= →B (被乘数采用双符号位) |Y|=.1011→C (乘数取数值) 0→A

41 A C 说明 原码一位乘 0 0.0 0 0 0 1 0 1 1 +|X| 0 0.1 1 0 1 C4=1,+|X|
+|X| C4=1,+|X| → 部分积右移一位 → 部分积右移一位 C4=0,+0 → 部分积右移一位 → 部分积右移一位 ∵Ps =Xs⊕Ys = 0⊕1 = ∴XY =

42 原码一位乘法的硬件实现 A、B为n+2位,C为n位,加法器为n+2位,异或门。
A、C寄存器级连在一起,具有右移功能。每次移位时,A的最低位进入C 的最高位,而C的最低位被丢掉。最后,A的内容为乘积的高位部分,C的内容为乘积的低位部分。 C的最低位作为控制信号,控制运算器加被乘数还是加零。

43 2、补码一位乘法 原码乘法虽然容易实现,但一般计算机中数据多以补码表示。若仍用原码做乘法,需要进行码制转换,反倒不方便而且又影响速度。
因为补码符号位直接参加运算,所以补码乘法不能简单地套用原码乘法的算法。实现补码乘法有2种方法。 一种方法为校正法,使用较少,只给出算式: [X×Y]补=[X]补×(0.X1X2…Xn)-[X]补×Y0 另一种更好的方法为比较法,该算法是英国人Booth夫妇提出,所以也称为Booth法。该算法无需校正,控制较为简单。以下主要讨论比较法。

44 Booth的推导 设:被乘数[X]补=X0.X1X2…Xn,乘数[Y]补=Y0.Y1Y2…Yn,则:
[X×Y]补 = [X]补×[0.Y1Y2…Yn] - [X]补×Y0 = [X]补×[2-1Y1+2-2Y2+…+2-nYn]- [X]补×Y0 = [X]补×[-Y0+2-1Y1 +2-2Y2+…+2-nYn] = [X]补×[-Y0+(Y1-2-1Y1)+ (2-1Y2-2-2Y2)+…+(2-(n-1)Yn-2-nYn)] = [X]补×[(Y1-Y0)+(Y2-Y1)2-1+…+(0-Yn)2-n] = [X]补×[(Y1-Y0)+(Y2-Y1)2-1+…+(Yn+1-Yn)2-n] ;Yn+1=0 上式表明:[X×Y]补可以根据乘数相邻两项的比较结果, 即用“低位-高位”的值来确定每步的运算操作。

45 Booth法的递推公式 从前面的推导中得出递推公式:
[X·Y]补=[X]补× [(y1-y0)+(y2-y1) 2-1+……+(yn+1-yn) 2-n] n 2 1 从前面的推导中得出递推公式: [Z0]补 = 0 [Z1]补 = 2-1{[Z0]补+(yn+1-yn)[X]补} [Z2]补 = 2-1{[Z1]补+(yn-yn-1)[X]补} [Zn]补 = 2-1{[Zn-1]补+(y2-y1)[X]补} ∴ [X×Y]补= [Zn]补+(y1-ys)[X]补 式中,[Z0]补为初始部分积, [Z1]补~[Zn]补为每次累加并右移之后的部分积。

46 Booth乘法运算规律与规则 判断位 YnYn+1 操 作 0 0 原部分积右移一位 0 1 原部分积加[X]补后右移一位
原部分积右移一位 原部分积加[X]补后右移一位 原部分积加[-X]补后右移一位 原部分积右移一位 规律 参加运算的数用补码表示,结果也是补码;符号位直接参加运算。 乘数最低位后面增加一位附加位Yn+1,初值为0。 乘数的最低两位YnYn+1的值决定每次执行的操作。 部分积和乘数一起右移一位。 共做n+1次累加、n次移位,最后累加不移位。 由于符号位参加运算,部分积累加时最高有效位的进位可能侵占符号位,所以被乘数和部分积应取双符号位,乘数只需取一个符号位 规则

47 补码一位乘示例 例5:已知: X=-0.1101,Y=0.1011; 求: X×Y。 解: [X]补 = 11.0011→B,
[Y]补= →C, [-X]补= 0→A 运算过程见下页:

48 ∵ [XY]补=1.01110001 ∴ XY= -0.10001111 补码一位乘 A C 附加位 说明
+[-X]补 C4C5=10,+[-X]补 → 部分积右移一位 C4C5=11,+0 → 部分积右移一位 +[X]补 C4C5=01,+[X]补 → 部分积右移一位 +[-X]补 C4C5=10,+[-X]补 → 部分积右移一位 +[X]补 C4C5=01,+[X]补 ∵ [XY]补= ∴ XY=

49 补码一位乘法的硬件实现 A、B、C为n+2位,加法器为n+2位。 与或门有n+2个。

50 3、阵列乘法器 为了提高乘法运算速度,还可以采用高速阵列乘法器执行乘法运算。设有两个不带符号的二进制整数: A、B两数的乘积P为:
假设,当m = n = 4时,来考虑乘法的情况:

51 阵列乘法器原理 a3 a2 a1 a0 × b3 b2 b1 b0 a3b0 a2b0 a1b0 a0b0
P p p p p p p p0

52 阵列乘法器原理(续一) 一个基本乘法单元由两部分组成: aibi是逻辑与运算,可用与门实现 错位相加可用全加器完成 基本乘法单元原理图

53 阵列乘法器原理(续二) 由乘法单元构成的乘法器如图所示,每个方框代表一个基本乘法单元.

54 阵列乘法器原理(三) 构成n×n整数阵列乘法器,共需要n×n 个乘法单元。
若采用补码相乘时,可在上述乘法阵列 外增加三个求补器,两个为算前求补器, 将两个操作数先变成正整数,一个为算 后求补器,在相乘两数符号不一致时, 把运算结果变成补码。

55 五、定点除法运算 大家很熟悉除法运算。手工计算除法的关键是比较余数与除数的大小,根据比较结果决定商值。
问题是,当将手工计算转换为机器运算时,如何判断够减?如何处理符号位?如何提高运算速度? 除法运算是乘法运算的逆运算。乘法通过加-右移实现,不难想到机器除法运算是通过减-左移实现的。 机器实现除法运算有两个先决条件(纯小数): 除数不等于0,否则商为无穷大。 被除数要小于除数,否则商会溢出。

56 1、原码恢复余数法 所谓恢复余数法,不管被除数(或部分余数)是否够减除数,都一律先做减法。若部分余数为正,表示够减,该位商上“1”;若部分余数为负,表示不够减,该位商上“0”,并要恢复余数(加除数)。 恢复余数法固有的缺点: 由于部分余数的正、负是随机出现的,使得除法运算的实际操作次数不固定,控制电路较复杂。 在恢复余数时,要多作一次加法,降低了除法的执行的速度。

57 2、原码不恢复余数法 分析恢复余数法发现,当减除数操作使得余数为负数时,商为“0”,并恢复余数,然后左移,再减除数。
若用R表示余数,用B表示除数,上述操作过程可表示为: (R + B)× 2 - B = 2R + B 结论:当余数为负时,商上“0”,余数左移一次后加除数,结果不变。这就是不恢复余数法的实现思想。 不恢复余数法(加减交替法)的运算规则为: 若余数≥0,上商“1”,余数左移一位,减除数。 若余数<0,上商“0”,余数左移一位,加除数。 由于加减运算交替地进行,所以又称为原码加减交替法。

58 原码不恢复余数法示例 除法运算需要3个寄存器: A寄存器存放被除数: 被除数 A B寄存器存放除数: 除数 B C寄存器存放商: 商 C
例6:已知:X= ,Y= ,求:X÷Y。 解: |X|= →A, 0→C |Y|= →B, -|Y|=

59 原码不恢复余数法 A C 说明 -|Y| |Y| 余数为负,商0 ← 左移一位 +|Y| |Y| 余数为正,商1 ← 左移一位 -|Y| |Y| 余数为负,商0 ← 左移一位 +|Y| |Y| 余数为正,商1 ← 左移一位 -|Y| |Y| 余数为正,商1 ← 左移一位 -|Y| |Y| 余数为负,商0 原码 需要 +|Y| 恢复余数,+|Y|

60 原码不恢复余数法示例(续) Qs = Xs⊕Ys = 1⊕0 = 1 商=0.10110 余数=0.011002-5
∴ X÷Y=-( ) 2-5 需要注意几点: 1、不恢复余数法,被除数、除数需要取双符号位。 2、如果最终余数为负,必须恢复一次余数且不需左移。 3、符号位不参加原码运算,应单独处理。

61 原码不恢复余数法的硬件实现 A、B寄存器,n+2位 C寄存器,n+1位 加法器,n+2位 与或门,n+2个
A、C寄存器级连在一起,具有左移一位功能。每次移位时,C的最高位进入A的最低位,而C的最低位用来保存每次运算得到的商。A的初值为被除数,最后变为余数,C的内容为除法得到的商。 在运算过程中,由余数的符号决定商值和下一步操作,即控制运算器加除数还是减除数。

62 3、补码不恢复余数除法 牢记补码的定义。如果被除数和除数异号且够减,则商为0,因为商将是负数的补码;原码正好相反。
除法的实质是“减法”,当用补码表示的两个数执行除法运算时,同号时应该做减法,异号时应该做加法。 当相除两数同号时,余数和除数也同号则够减,商为1,因为商是正数,补码 = 原码;当相除两数异号时,余数和除数同号则不够减,商也为1,因为商为负数,补码 = 反码+2-n (或+1) 。

63 关于除法的够除和不够除

64 补码不恢复余数除法的上商和商符 1、只能通过余数和除数作比较,判断是否够减。 所以,补码除法的上商规则可归结为: 举例说明
被除数、除数同号,余数、除数同号则够减,上商1 被除数、除数异号,余数、除数同号不够减,上商1 所以,补码除法的上商规则可归结为: 余数、除数同号,上商1 ; 余数、除数异号,上商0 。 举例说明 2、商的符号在求商的过程中自动形成: 在除法的先决条件下(|X|<|Y|和Y≠0) 当被除数与除数同号时,第一次除法肯定不够减,商为0,恰好表示正号; 当被除数与除数异号时,部分余数一定跟除数同号,商为1,也恰好表示负号。

65 补码不恢复余数除法的操作 结果修正: 补码加减交替法操作规则: 得到正商,不需要修正。 得到负商,实质上是商的反码,低位+1才能成为补码。
一般的处理方法为:无论正商还是负商,末位恒置为1。 补码加减交替法操作规则: 部分余数和除数同号,上商1,下一步左移一位、减除数; 部分余数和除数异号,上商0,下一步左移一位、加除数。

66 补码不恢复余数除法示例 例7: 已知 X=0.1000,Y=-0.1010; 求 X÷Y。 解: [X]补=00.1000→A,
[Y]补= →B,0→C [-Y]补=

67 +[Y]补 1 1.0 1 1 0 [X]补、[Y]补异号,+[Y]补
补码不恢复余数除法 A C 说明 +[Y]补 [X]补、[Y]补异号,+[Y]补 ← 左移一位 +[-Y]补 [-Y]补 [ri]补、[Y]补异号,商0 ← 左移一位 +[Y]补 [Y]补 [ri]补、[Y]补异号,商0 +[Y]补 [Y]补 [ri]补、[Y]补同号,商1 ← 左移一位 +[-Y]补 [-Y]补 [ri]补、[Y]补同号,商1 ← 左移一位 末位恒置1 补码不 需校正

68 补码不恢复余数除法示例(续) -0.00102-4 X÷Y= -0.1101+ -0.1010 [商]补=1.0011
[余数]补=1.11102-4 1.11102-4 1.0110 [X÷Y]补= ∴ 商 = 余数= 2-4 2-4 0.00102-4 X÷Y= = 0.1010

69 补码不恢复余数除法的硬件实现 补码不恢复余数除法的硬件实现与原码基本相同,只是加减和上商的条件不同,也不需要异或门处理符号位。

70 4、阵列除法器 同乘法一样,为提高除法的运算速度,可采用阵列除法器。以下介绍两个正数的不恢复余数阵列除法器。
除数 被除数 可控加减单元CAS是构成阵列除法器的基本单元。由一个全加器和一个异或门组成。如下图所示。 可控加减单元CAS有四个输入端和四个输出端。 当控制线P=0时,Yi⊕P=Yi,全加器完成Yi+Xi; 当控制线P=1时,Yi⊕P=Yi,全加器完成Yi+Xi。

71 阵列除法器原理 被除数X各位沿竖直线送到CAS,除数Y沿斜线送到CAS。做加法还是做减法,由控制线P决定。由于是两正数相除,除法阵列第一行应执行减法操作,所以该行控制端P=1,同时将P作为该行末端的进位输入,从而完成减法运算。 如果够减,有进位,商为1,下行做减法。如果不够减,无进位,商为0,下行做加法。其它行工作同上,得出商和余数。

72 商与进位的关系 通过以下有模运算进位图理解商与进位的关系: 够减,有进位,商为1;不够减,无进位,商为0。

73 六、浮点运算 浮点数比定点数的表示范围宽,有效精度高,更适合于科学与工程计算的需要。
浮点数中包含两组代码,采用定点整数格式的阶码和采用定点小数格式的尾数。因此,浮点运算实质上包含两组定点运算,阶码运算和尾数运算,但这两部分运算既有各自的作用,也有相互间的关联。 主要讨论规格化浮点数的运算,并特别强调对阶和规格化两个概念。

74 1、浮点加减运算 设两个浮点数x和y,分别为: x = 2Ex.Mx 两浮点数进行加减运算的规则为: y = 2Ey.My 提取
当 Ex≤Ey时,z=x±y=(Mx . 2Ex-Ey±My)×2Ey 当 Ex>Ey时,z=x±y=(Mx ±My . 2Ey-Ex)×2Ex 提取 大阶

75 浮点加减运算的操作过程 ① 0操作数检查 在两个浮点数中,如果有一个操作数为0,即可知道运算结果而没有必要进行后续的操作,这样可以节约时间。
② 对阶 两浮点数进行加减运算,首先要看阶码是否相同,即小数点位置是否对齐。如果两数的阶码不相等,说明小数点没有对齐,此时必须使两数的阶码相等,这个过程叫对阶。 首先求出两数的阶差:△E = Ex – Ey: 如果△E = 0,表明两阶码相等,对阶完成。 如果△E≠0,执行对阶,小阶向大阶看齐。 尾数每右移一位,阶码加1,直到两阶码相等为止; 右移的位数等于阶差。

76 浮点加减运算操作过程(续一) ③ 尾数加减 Mz=Mx±My,其算法与定点加减法相同。 ④ 结果规格化(以补码表示为例)
结果的形式为00.1xx…x或者11.0xx…x,已经是规格化数据。 结果的形式为00.0xx…x或者11.1xx…x,尾数需要左移来规格化,称为左规。 结果的形式为01.xxx…x或者10.xxx…x,表明尾数的绝对值大于1,数值位侵占了符号位。尾数需要右移来规格化,称为右规。 ⑤ 舍入 在对阶或者向右规格化时,尾数右移,字的低位部分可能移出字外而被丢掉,从而引起误差。因此需要进行舍入处理。 舍入处理方法很多,如截断法、恒置1法、0舍1入法等。

77 浮点加减运算操作过程(续二) ⑥ 溢出判断 (注意:浮点数的溢出是以阶码溢出表现出来的) 如果阶码正常,加减运算即可正常结束;
如果阶码超过了可能表示的最大正指数值,阶码上溢,认为数据为±∞,发生溢出中断。 如果阶码超过了可能表示的最小负指数值,阶码下溢,一般认为数据为0。 两个同号尾数相加,出现的最高位向上的进位,在浮点数中不算溢出。

78 浮点加减运算示例 例8:A = 0.101110×2-01, B = - 0.101011×2-10,求A+B。 解:假设这两个数的格式为:
阶码4位,用移码(偏置量23)表示; 尾数8位,用补码表示,含一位符号位。 [A]浮 = 0111; [B]浮 = 0110;

79 浮点加减运算示例(续) ① 对阶 ③ 规格化 ④ 未发生溢出。 ② 尾数求和 00.1011100 + 11.1010101
△E = EA-EB = -1 - (-2) = 1 EA>EB,MB右移, EB+1→EB,对阶得到: [MB]浮’= 0111; ② 尾数求和 ③ 规格化 尾数需要左规: [A+B]浮 = 0110; A+B = ×2-10 ④ 未发生溢出。

80 2、浮点乘除运算 设两个浮点数x和y,分别为: x = 2Ex.Mx y = 2Ey.My 两浮点数进行乘法运算的规则为:
x×y = 2(Ex+Ey) .(Mx×My) x÷y = 2(Ex-Ey) .(Mx÷My)

81 浮点乘法运算步骤 乘法运算的步骤如下: 两浮点数相乘,乘积的阶码为相乘两数的阶码之和,而乘积的尾数为相乘两数尾数之积。 ① 阶码相加
如果阶码用补码表示,阶码相加之和无需校正; 如果阶码用移码表示,阶码相加后要减去一个偏置量2n。 另外,如果相加后,和发生溢出,也要进行处理。 ② 尾数相乘 如果相乘两数都不为0,则可进行尾数相乘,尾数相乘的规则与定点数乘法相同。 ③ 尾数规格化 如果尾数不是规格化数,则需要规格化,一般需要进行左规。左规时,如果阶码发生下溢,做机器零处理。

82 浮点数除法运算步骤 除法运算的步骤如下: 两浮点数相除,商的阶码为相除两数的阶码之差,商的尾数为相除两数的尾数之商。 ① 尾数调整
被除数尾数的绝对值要小于除数尾数的绝对值,否则要通过被除数尾数的右移作出调整,每右移一次,其阶码加1。 ② 阶码相减 如果阶码用补码表示,阶码相减之后无需校正; 如果阶码用移码表示,阶码相减后要加上一个偏移量2n。 另外,如果相减后发生溢出,需另作处理。 ③ 尾数相除 如果相除两数的尾数都不为0,则可进行尾数相除。由于第一步进行了调整,运算结果就是规格化数。

83 3、浮点运算器的硬件实现 浮点运算器由阶码运算部件和尾数运算部件组成。阶码运算部件执行加减两种运算、同时配合对阶或者规格化完成阶码的调整(±1);尾数运算部件完成加、减、乘、除运算,以及尾数规格化和溢出处理。 ① CPU之外的浮点运算器 例如80x87是美国Intel公司为处理浮点数的运算生产的专用算术运算处理器,它是配合80x86 CPU进行算术运算的,又称为协处理器。它相当于CPU的一个I/O设备,虽然有自己的指令,但不能单独使用。 ② CPU之内的浮点处理器 例如奔腾CPU将浮点处理器包含在芯片内部,并且采用流水设计。它有U、V两条流水线,指令执行过程分为8个过程段。 ③ 浮点流水运算部件 根据浮点运算步骤,分别设置专门硬件来完成特定的运算。例如,浮点数加减操作,设置4套硬件,分别完成求阶差、对阶、尾数求和、规格化等操作,形成流水作业。成本虽高,但速度特快。

84 *七、十进制整数的加法运算 在计算机中,十进制数是用BCD码表示的,由4位二进制数表示1位十进制数。通常这种二进制表示的十进制数的运算规律是:先按二进制规则运算,然后根据不同的编码加以校正,从而得到十进制运算结果。

85 1、8421码加法规则 两个8421码相加,按“逢二进一”原则进行。 当和≤9时,无需校正。 当和>9时,则加6校正。
在+6校正的同时,将产生向上一位的进位。

86 8421码加法校正关系 10 10000 01010 +6校正 11 10001 01011 12 10010 01100 13 10011 01101 14 10100 01110 15 10101 01111 16 10110 17 10111 18 11000 19 11001 十进制 8421码 C4S4S3S2S1 校正前二进制 C4’S4’S3’S2’S1’ 校正规则 校正函数 = C4’+ S4’S3’+ S4’S2’ 向上一位的进位C4 = 校正函数

87 8421码加法器的构成 校正函数 = C4’+ S4’S3’+ S4’S2’ 向上一位的进位C4 = 校正函数

88 2、余3码的加法规则 两个余3码相加,按“逢二进一”的原则进行。 若其和没有进位,则减3校正。 若其和有进位,则加3校正。

89 余3码加法校正关系 C4’= 0,-3校正 向上一位的进位C4=C4’ C4’= 1,+3校正 十进制数 余3码 C4S4S3S2S1
校正前的二进制数 C4’S4’S3’S2’S1’ 校正与否 1 8 9 -3校正 10 11 18 19 +3校正 C4’= 0,-3校正 C4’= 1,+3校正 向上一位的进位C4=C4’

90 余3码加法器的构成   C4’= 0,-3校正; C4’= 1,+3校正

91 *八、逻辑运算与实现 计算机中除了加、减、乘、除等基本运算外,还可以对一个或两个逻辑数进行逻辑运算。所谓逻辑数,是指不带符号的二进制数。逻辑运算是按位进行的,位与位之间没有进位与借位关系,所以比算术运算要简单得多。 逻辑运算主要指逻辑非、逻辑加、逻辑乘、逻辑异或四种基本运算,也就是我们平时所说的与、或、非、异或操作。

92 1、逻辑非 逻辑非就是求反操作,按位求反。常用变量上方加一横来表示。 假设:Z是X的逻辑非,其中: X = X0X1…Xn,
Z = Z0Z1…Zn 则: Zi = Xi (i=0,1,…,n) 逻辑非可用非门,也就是反相器实现。

93 2、逻辑乘 对两数进行逻辑乘,就是按位求它们的“与”,所以逻辑乘也叫逻辑与。常用“∧”或者“.”来表示。 假设:Z是X和Y的逻辑与,
X = X0X1…Xn,Y = Y0Y1…Yn, Z = Z0Z1…Zn 则: Zi = Xi∧Yi (i=0,1,…,n) 两数位相与,都为1时结果才为1。 逻辑乘可用与门实现,也可以用或门和非门实现。

94 3、逻辑加 对两个数进行逻辑加,就是按位求它们的“或”,所以逻辑加也叫逻辑或。常用“∨”或者“+”表示。 假设:Z是X和Y的逻辑或,
X = X0X1…Xn,Y = Y0Y1…Yn, Z = Z0Z1…Zn 则: Zi = Xi∨Yi (i=0,1,…,n) 两数位相或,只要一个为1结果就为1。 逻辑加可以用或门实现,也可以用与门和非门实现。

95 4、逻辑异或 对两个数进行逻辑异或,就是按位求它们的模2和(按位加),所以也叫位加。常用“⊕”表示。 假设:Z是X和Y的逻辑异或,
X = X0X1…Xn,Y = Y0Y1…Yn, Z = Z0Z1…Zn 则: Zi = Xi ⊕Yi (i=0,1,…,n) 两数位异或,值不相同时结果为1。 逻辑异或可以用异或门实现。


Download ppt "第四章 数据的机器运算 计算机的主要功能是对数据进行各种加工和处理,包括加、减、乘、除这些基本的算术运算,与、或、非这些基本的逻辑运算,以及由此构成的其它复杂的运算。运算器则是实现这些运算的主要部件。 无论多么复杂的运算,最终都要分解为加法运算来实现。其中,减法运算通过补码转化为加法来实现 ;乘、除运算可以转换为加减运算、移位操作来实现。加法和移位是计算机中最基本的两种运算操作。"

Similar presentations


Ads by Google