1、第3章 运算方法与运算器第3章 运算方法与运算器3.1 定点数运算定点数运算3.2 逻辑与移位运算逻辑与移位运算3.3 浮点数运算浮点数运算3.4 运算器基本结构运算器基本结构第3章 运算方法与运算器3.1 定点数运算定点数运算3.1.1 加减运算加减运算 有符号定点数的编码可以用原码、反码、补码、移码等形式表示。原则上讲,有符号数 的加减运算可以用任何一种编码来实现,但实际中用得最多、最普遍的是补码。第3章 运算方法与运算器1.补码加减法补码加减法 补码加法的运算法则为由式(3.1)可以看到,两数和的补码就等于两数补码之和。利用补码求两数之和十分 方便。第3章 运算方法与运算器例例3.1 有
2、两个定点整数63和35,利用补码加法求63+35。解解 根据题意,用8位二进制补码表示63和35为则第3章 运算方法与运算器例例3.2 有两个定点整数-63和-35,利用补码加法求-63+(-35)。解解 根据题意,用8位二进制补码表示-63和-35为则第3章 运算方法与运算器在数值的补码表示法中,我们注意到,对一个正数求补对该数包括符号位在内的 各位取反再加1,即可得到该数的负数;若对该负数再求补,则又可得到原来的正数。也就 是说,X补 求补=-X补,-X补 求补=X补。据此可得补码减法的运算法则为第3章 运算方法与运算器第3章 运算方法与运算器综上所述,补码加减运算的规则是:(1)参加运算
3、的操作数用补码表示。(2)符号位参加运算。(3)若相加,则两个数的补码直接相加;若相减,则将减数连同符号位一起取反加1后 与被减数相加。(4)运算结果为补码表示。第3章 运算方法与运算器2.溢出及判断溢出及判断 1)溢出的概念 我们首先通过下面的例子来了解什么是溢出。例例3.4 有两个定点整数63和85,利用补码加法求63+85。解解 根据题意,用8位二进制补码表示63和85为第3章 运算方法与运算器我们把运算结果超出规定的数值范围而造成错误的现象称为溢出。若运算结果大于规定 的数值范围的上限,则称为上溢出;若运算结果小于规定的数值范围的下限,则称为下溢出。一旦确定了运算字长和数据表示方法,数
4、据表示的范围也就随之确定。只要运算结果 超出所能表示的数据范围,就会发生溢出。发生溢出时,运算结果一定是错误的,所以必须采取措施防止溢出发生。第3章 运算方法与运算器最简单有效的防止溢出发生的方法是增加数据的编码长度。在例3.4中,只要将数据 位数增加到9位以上,如采用16位编码,就一定能防止溢出发生。值得注意的是,只有当两个符号相同的数相加(或者是符号相异的数相减)时,运算结 果才有可能发生溢出。而在符号相异的数相加(或者是符号相同的数相减)时,永远不会产 生溢出。第3章 运算方法与运算器第3章 运算方法与运算器2)溢出的判定(1)双符号位(变形码)判决法。第2章已提到变形补码,采用两位表示
5、符号,即00表 示正号,11表示负号,一旦发生溢出,则两个符号位就一定不一致,通过判别两个符号位 是否一致便可以判定是否发生了溢出。若运算结果两符号分别用S2、S1表示,则溢出标志 OF的逻辑表示式为当 OF=0时,判别溢出未发生;当 OF=1时,判别溢出发生。第3章 运算方法与运算器第3章 运算方法与运算器(2)进位判决法。若Cn-1表示最高数值位产生的进位,Cn 表示符号位产生的进位(即进位标志 CF),则溢出标志 OF的逻辑表示式为第3章 运算方法与运算器(3)根据运算结果的符号位和进位标志判别。该方法适用于两个同号数求和或异号数 求差时判别溢出。溢出标志 OF的逻辑表达式为其中,SF和
6、 CF分别是运算结果的符号标志和进位标志。第3章 运算方法与运算器(4)根据运算前后的符号位进行判别。若用 Xs、Ys、Zs 分别表示两个原始数据及运算 结果的符号位,则溢出标志 OF的逻辑表达式为该式表示,两个正数相加的结果为负数,溢出发生;或者两个负数相加的结果为正数,同样 溢出发生。第3章 运算方法与运算器3.一位全加器的实现一位全加器的实现 设一位全加器的输入分别为 Xi和Yi,低一位对该位的进位为Ci,全加器的结果(和)为Zi,向高一位的进位为Ci+1,则实现一位全加器的逻辑表达式为其中,Gi为进位产生函数,Pi为进位传递函数。第3章 运算方法与运算器图3.1(a)和(b)为实现上述
7、逻辑的一位全加器逻辑电路及框图表示。图3.1 一位全加器逻辑电路及其框图第3章 运算方法与运算器4.n 位加减器的实现位加减器的实现 1)加法器(1)行波进位加法器。将n 个一位全加器串接在一起,便可以构成n 位二进制数加法 器,如图3.2所示。根据补码加法规则,图3.2提供的二进制数加法器可以直接用于实现n 位补码加法。第3章 运算方法与运算器图3.2 行波进位加法器第3章 运算方法与运算器从图3.2中可以看出:加法器的进位逐位产生。加法器的和逐位生成。图3.2中利用异或门实现了式(3.4)的溢出判别逻辑,该异或门的输入是Cn-1和Cn。第3章 运算方法与运算器(2)并(先)行进位加法器(C
8、LA)。行波进位加法器结构简单,实现成本低。但其致命 的缺点在于,随着加法器位数的增加,串行生成的进位会造成加法速度大为降低。一种有 效的改进方法是同时生成所有低位向高位的进位。根据式(3.9)可知,由输入Xi 和Yi 就能求出Gi和Pi,在已知输入Ci 的情况下,便可 以获得Ci+1,那么,在输入 Xi+1、Yi+1和 Xi、Yi、Ci 的情况下,便可以获得Ci+2,依次类 推,便可以求出Ci+3、Ci+4,。第3章 运算方法与运算器其中,四个进位生成逻辑表示式为第3章 运算方法与运算器第3章 运算方法与运算器图3.3 四位先行进位产生电路第3章 运算方法与运算器图3.4 n 位先行进位加法
9、器第3章 运算方法与运算器(3)组内并行组间串行进位加法器。组内并行组间串行进位又称为单级先行进位。组 间进位是串行的,即每个组的进位输入是相邻低位组的进位输出,而每个组的进位输出是 相邻高位组的进位输入。串行进位链的总延迟时间与分组数目成正比。以16位加法器为例,将其分为 4 组,每组 4 位。各组内采用 4 位并行进位加法器(CLA),组间采用串行进位方式,这样就构成了组内并行组间串行进位加法器,如图3.5所 示。若4位 CLA 的延时为 t(=t+),则该16位并行加法器的计算时间就是4t。若 n 位加法器分为m 组,则加法器的计算时间就是mt。第3章 运算方法与运算器图3.5 组内并行
10、组间串行进位加法器第3章 运算方法与运算器(4)组内并行组间并行进位加法器。组内并行组间并行进位加法器又称为多级先行进 位加法器。这种加法器利用每组的Gi*+3和 Pi*+3信号再次组成先行进位链,即构成组内先行 进位,组间也为先行进位的进位逻辑。下面仍以字长为16位的加法器为例,分析两级先行 进位加法器的设计方法。第3章 运算方法与运算器第3章 运算方法与运算器16位的两级先行进位加法器可由4个基本的先行进位逻辑和1个组间先行进位逻辑电路组成,如图3.6所示。图3.6 组内并行组间并行进位加法器第3章 运算方法与运算器2)加法/减法器 在图3.7中,利用异或门和控制信号 M 可实现减法运算。
11、当 M=0时,异或门输出Y,实现加法 X+Y 的功能;当 M=1时,异或门输出Y,Y与最低进位C0=M=1相加,实现 减数求补(求负),然后与 X 做加法,从而实现减法 X-Y 的功能。第3章 运算方法与运算器图3.7 行波进位的n 位加法/减法器第3章 运算方法与运算器5.BCD加法器加法器 1)8421BCD码的使用方式 在计算机中广泛使用的 BCD码是8421码,它有以下两种典型的使用方式:(1)若用一个字节(8位二进制数)表示2位 BCD数,即高4位表示1位 BCD 数,低4 位表示1位 BCD数,则此字节所表示的数称为压缩 BCD数。(2)若一个字节只表示1位 BCD数,即高4位为0
12、,仅用低4位表示1位 BCD 数,则 此字节所表示的数称为非压缩 BCD数。第3章 运算方法与运算器2)加法运算 一个多位十进制数用8421BCD码编码后,其形式就是一个二进制数,因此可以利用 前述的n 位加法器进行加法运算,但其运算结果有可能产生非法 BCD码而出现错误。第3章 运算方法与运算器3)校正 为了保证 BCD 数加法运算结果的正确性,必须进行校正。对于一个字节的压缩 BCD 数加法进行校正的法则是:(1)运算中低四位相加的结果大于9或有bit3向bit4的进位,则结果加06H。(2)运算中高四位相加(包括由bit3向bit4的进位)的结果大于9或有bit7向更高位的 进位,则结果
13、加60H,同时进位为1且将其看作相加结果的最高位。(3)若高四位和低四位均不满足上述条件,如例3.8(1)中的情况,则无须校正;若同时 满足(1)和(2)两项条件,则结果加66H。第3章 运算方法与运算器该法则可以推广到多字节的压缩 BCD 数、非压缩 BCD 数的加法校正中,也可用于 8421码其他运算(减法、乘法、除法)结果的校正。在设计CPU 时,可以用软件方式在指令系统中设置BCD数加、减、乘、除运算的校正 指令,也可以用硬件方式在运算器中设置 BCD 码加法器。第3章 运算方法与运算器4)BCD 码加法器 8421BCD码加法器采用硬件电路实现其加法及校正。图3.8(a)为一位842
14、1BCD 码加 法器。图中下方的4位串行进位加法器完成一位 BCD数加法,上方的串行进位加法器完成 BCD数加法结果的校正。图3.8(b)为一位 BCD加法器的简化框图。第3章 运算方法与运算器图3.8 一位8421BCD加法器第3章 运算方法与运算器将n 个一位 BCD码加法器进位链串接起来,即可构成n 位行波进位 BCD 加法器,如 图3.9所示。其他类型 BCD码运算器的硬件实现可参考前述的二进制加法器。图3.9 n 位行波进位 BCD加法器框图第3章 运算方法与运算器6.移码加减法移码加减法 1)运算规则 由于移码多用在浮点数的阶码中,因此这里仅就定点整数移码的加减运算加以说明。定点整
15、数移码的加减运算规则如下:(1)两运算数据应为移码编码。(2)对两移码求和/差。(3)对结果进行修正将结果的符号取反,即得到正确结果。根据该规则,将前述的n 位加/减法运算器结果输出端的最高位(即符号位)加一个反 相器,即可构成移码加/减法运算器。第3章 运算方法与运算器第3章 运算方法与运算器2)移码运算应注意的问题(1)对移码运算的结果需要加以修正,n 位数的修正量为2n-1,即对结果的符号位取 反后才是移码形式的正确结果。(2)移码表示中,0有唯一的编码,为100000。当编码出现00000时,表示十进制 数-2n-1。该编码若出现在IEEE754格式的浮点数阶码中,则表示浮点数出现下溢
16、,此时 浮点数按机器零处理。第3章 运算方法与运算器3.1.2 乘法运算乘法运算在一些简单的计算机中,乘法运算可以用软件来实现。利用计算机中设置的加法、移 位等指令,编写一段程序完成两数相乘。若 CPU 硬件结构简单,则这种做法实现乘法所用 的时间较长,速度很慢。另一种情况是在 ALU 等硬件的基础上,适当增加一些硬件构成乘法器。这种乘法器 的硬件要复杂一些,但速度比较快。速度最快的是全部由硬件实现的阵列乘法器,其硬件 更加复杂。可见,可以用硬件来换取速度。第3章 运算方法与运算器1.原码乘法运算原码乘法运算 1)原码一位乘法规则 假定被乘数 X、乘数Y 和乘积Z 为用原码表示的纯小数(下面的
17、讨论同样适用于纯整 数),分别为第3章 运算方法与运算器原码一位乘法规则如下:(1)乘积的符号为被乘数的符号位与乘数的符号位相异或。(2)乘积的数值为被乘数的数值与乘数的数值之积,即(3)乘积的原码为第3章 运算方法与运算器第3章 运算方法与运算器3)原码一位乘法的算法流程 根据上述分析,可用图3.10所示的流程来描述求数值之积的算法。第3章 运算方法与运算器图3.10 数值乘法算法流程第3章 运算方法与运算器例例3.11 X原=0.1101,Y原=1.1011,求两者之积。解解(1)乘积的符号为z0=0 1=1。(2)利用原码一位乘法求两乘数的数值之积,其过程见图3.11。(3)将乘积的符号
18、与数值之积拼接在一起,得到最终的乘积,见图3.11下部。第3章 运算方法与运算器图3.11 例3.11的乘法过程第3章 运算方法与运算器4)原码一位乘法器的框图 根据以上对原码一位乘法的描述,可以设计出采用原码一位乘法的乘法器,如图3.12 所示。图3.12 原码一位乘法器的框图第3章 运算方法与运算器2.补码乘法运算补码乘法运算 计算机中经常采用补码表示数据,这时用原码进行乘法运算很不方便,因此,较多计 算机采取补码进行乘法运算。一种经典的补码乘法算法为布斯法,它是补码一位乘法中的 一种,是由布斯(Booth)夫妇提出的。第3章 运算方法与运算器第3章 运算方法与运算器第3章 运算方法与运算
19、器根据以上分析,可将布斯算法描述如下:(1)乘数与被乘数均用补码表示,连同符号位一起参加运算。(2)乘数最低位后增加一个附加位(用 A-1表示),设定初始值为0。(3)从附加位开始,依据表3.1所示的操作完成式(3.20)的运算。实现布斯算法的流程如图3.13所示。第3章 运算方法与运算器图3.13 布斯算法流程图第3章 运算方法与运算器例例3.12 已知二进制数 X=0.1010,Y=-0.1101。利用布斯算法求XY补。解解(1)将两数用补码表示为(2)图3.14给出了布斯算法求解过程。由图3.14可知,XY补=1.011111100。第3章 运算方法与运算器图3.14 例3.12布斯算法
20、求解过程第3章 运算方法与运算器从图3.14中可以看到,两补码乘法运算是连同它们的符号位一起进行运算的。经过最 后一次右移,所要计算的乘积补码(包括符号位在内)就存在 DA 联合的寄存器中。注意注意,对于小数运算,在n 次循环完成后,需增加 DA 联合逻辑左移一位的操作,或者 在最后一次循环中不做 DA 右移而将 A 的最低位置0,这样就能在 DA 中得到小数相乘运 算的正确结果。第3章 运算方法与运算器2)布斯算法乘法器的硬件框图 根据布斯算法的描述,可以设计出乘法器的硬件框图,如图3.15所示。图3.15 布斯算法乘法器的硬件框图第3章 运算方法与运算器3.阵列乘法器阵列乘法器 1)手算及
21、单元电路 在上述乘法运算中,是利用简单的硬件进行多次加法和多次移位来实现乘法的。显然,这样难以获得高的运算速度。为了提高运算速度,可以采取类似人工手算的方法。第3章 运算方法与运算器设二进制数 X=X3X2X1X0和Y=Y3Y2Y1Y0,计算Z=XY,列式如下:第3章 运算方法与运算器从上式可以看到,XiYj是与运算,而Zi是对相应列中各个与结果的求和。每一对相与 求和操作可以用图3.16所示的基本乘加单元电路来实现。图3.16 基本乘加单元电路第3章 运算方法与运算器2)无符号数阵列乘法器 利用手算算式的结构及乘加单元电路可以方便地实现无符号数阵列乘法器,其结构如 图3.17所示。在图3.1
22、7中,每一个小框即为一个基本乘加单元,这些基本单元按照类似于手算算式 的结构进行连接,能够完成手算算式中的乘加功能,最终获得两数的乘积。利用无符号数阵列乘法器完成原码的数值相乘,再加入一个完成符号运算的异或门,就构成了原码阵列乘法器。第3章 运算方法与运算器图3.17 无符号数阵列乘法器第3章 运算方法与运算器3)补码阵列乘法器 在无符号数阵列乘法器的基础上,很容易实现补码阵列乘法器。其基本思路是先求被乘数与乘数的绝对值(无符号数),然后进行无符号数阵列乘法,最后根据被乘数与乘数的 符号决定最终乘积的符号。为了实现补码阵列乘法器,先给出一个简单的求补电路,如图3.18所示。从图3.18中 可见
23、,当控制端E=0时,输出与输入相同;当E=1时,可实现求补。只要将有符号数的 符号位加到控制端E 上,即可求得该符号数的绝对值。第3章 运算方法与运算器图3.18 求补电路第3章 运算方法与运算器4)适于流水线工作的阵列乘法器 图3.17所示阵列乘法器的最大缺点是:每一步部分积的计算都是用串行进位加法器来 实现的,因此即使采用硬件电路,其运算速度仍然很慢,令乘法器的使用者无法接受。为了 提高阵列乘法器的速度,设计者做了大量的研究,其中包括设计了适于流水线工作的阵列 乘法器,具体内容详见7.2.2节。第3章 运算方法与运算器3.19 补码阵列乘法器框图第3章 运算方法与运算器3.1.3 除法运算
24、除法运算 定点除法运算同样可用原码或补码实现。在实现除法的过程中,应注意除数不能为0,而且还要保证相除所得的商是可以表示的。1.原码除法运算原码除法运算 1)原码除法规则 原码除法运算规则如下:(1)除数0。对于定点纯小数,|被除数|除数|;对于定点纯整数,|被除数|除数|。(2)与原码乘法类似,原码除法的商符和商值也是分别处理的。商符等于被除数的符 号与除数的符号相异或。商值等于被除数的数值除以除数的数值。(3)将商符与商值拼接在一起即可得到商的原码。第3章 运算方法与运算器例例3.13 设二进制数 X=+0.1011,Y=+0.1101,求 XY。解解 被除数 X 和除数Y 均为正数,则商
25、的符号也为正。两数数值部分的除法手算过程 如图3.20所示。图3.20 例3.13的除法手算过程第3章 运算方法与运算器从手算过程中可以发现:(1)除法是通过逐次减除数来实现的,也就是被除数(或余数)每次减去右移一位的除 数,以此来决定商值。这种运算单元位数不断扩展的方式不利于硬件实现,所以在实际构 成除法器时,保持除数的位置不动,而每次余数左移一位,使运算单元的有效位数保持 不变。(2)在手算过程中,人通过眼睛和大脑来判断被除数或余数是否够减除数(不需要相减 之后再进行判断),以决定商是0还是1。而在 CPU 中,必须完成相减操作方能判断余数是 否够减。当发现不够减时,余数已经减掉了除数,因
26、此必须在下一步操作之前恢复余数。这 就是恢复余数法。第3章 运算方法与运算器2)恢复余数法 利用恢复余数法实现原码除法遵从上述除法规则,数值和符号单独处理。图3.21为原码恢复余数算法流程。对于定点纯小数的数值部分,计算过程如下:(1)被除数左移一位,减除数,若够减,上商为 1,若不够减,上商为 0,同时加除 数恢复余数。(2)余数左移一位,减除数,若够减,上商为1,若不够减,上商为0,同时加除数 恢复余数。重复此过程,直到除尽或精度达到要求为止。第3章 运算方法与运算器图3.21 原码恢复余数算法流程图第3章 运算方法与运算器例例3.14 若二进制被除数X=-0.10001011,除数Y=0
27、.1110,试利用原码恢复余数法 求 XY 的商及余数。解解 本例满足|X|Y|,且|Y|0。对 X 和Y 编码,得商符=1 0=1。数值除法过程如图3.22所示。第3章 运算方法与运算器图3.22 例3.14恢复余数法实现数值除法的过程第3章 运算方法与运算器第3章 运算方法与运算器图3.23 例3.15加减交替法实现除法的过程第3章 运算方法与运算器(2)加减交替除法器硬件电路。原码加减交替法作除法时符号与数值运算是分别进行的。图3.24给出了数值部分(无 符号数)除法的硬件框图。图3.24 加减交替法除法器硬件电路框图第3章 运算方法与运算器2.补码除法运算补码除法运算 与乘法运算的情况
28、类似,有时也需要实现补码除法。1)补码除法规则 假设进行定点纯小数的补码除法运算,其先决条件是除数0且|被除数|除数|。补码除法运算相对要复杂一些,其运算规则如下:(1)如果被除数与除数同号,则被除数减除数;如果被除数与除数异号,则被除数加除 数。运算结果均称为余数。第3章 运算方法与运算器(2)若余数与除数同号,则上商为1,余数左移一位,然后用余数减除数得新余数;若 余数与除数异号,则上商为0,余数左移一位,然后用余数加除数得新余数。(3)重复(2),直至除尽或达到精度要求为止。(4)修正商。在除不尽时,通常将商的最低位恒置1进行修正来保证精度。第3章 运算方法与运算器2)补码除法算法 补码
29、除法算法流程如图3.25所示。该流程图充分体现了补码除法的运算法则。从比较 被除数及除数开始,利用加减交替的方法求得余数,通过比较余数与除数的符号来决定上 商为0还是为1,最后将末位置1进行商的修正。第3章 运算方法与运算器图3.25 补码除法算法流程框图第3章 运算方法与运算器3.阵列除法器阵列除法器 前面所提到的除法器都是在加法器的基础上通过多次加减来实现除法的,其运算速度 必然受到限制。为了提高速度,可以利用专用硬件来完成除法运算。1)补码进位及阵列基本单元(1)补码运算的进位。在无符号数进行减法运算时,是用被减数加上负减数的补码来实现的。而补码运算的 进位会出现如下情况:当被减数小而减
30、数大时,没有进位或者说没有借位);当被减数大 而减数小时,反而有进位或者说有借位)。第3章 运算方法与运算器第3章 运算方法与运算器图3.26 可控加减单元 CAS第3章 运算方法与运算器第3章 运算方法与运算器图3.27 由可控加减单位 CAS构成的阵列除法器第3章 运算方法与运算器3.2 逻辑与移位运算逻辑与移位运算3.2.1 逻辑运算逻辑运算 基本的逻辑运算包括与、或、非、异或等运算。计算机以“1”和“0”分别表示逻辑数据的 真和假两个状态。此时n 个0和1的数字组合不是算术数字,而是没有符号位的逻辑数据。逻辑运算按位进行操作,各位之间互不影响,运算结果没有进位、借位、溢出等问题。第3章
31、 运算方法与运算器1.基本逻辑运算基本逻辑运算 计算机中采用的基本逻辑运算列于表3.2中。第3章 运算方法与运算器(1)逻辑与(AND)运算也称为逻辑乘运算,是指对两个操作数进行按位相与,用符号“”或“”来表示。利用逻辑与操作可以对特定的数据位清“0”,也可以提取特定的数 据位。(2)逻辑或(OR)运算也称为逻辑加运算,是指对两个操作数进行按位相或,用符号“”或“+”来表示。利用逻辑或操作可以对特定的数据位置“1”,也可以保留特定的数 据位。第3章 运算方法与运算器(3)逻辑异或(XOR)运算也称为按位加,是指按位求两个数模2相加的和,用符号“”表示。若两个操作数对应数据位相等,则异或结果为0
32、;若两个操作数对应数据位不相 等,则异或结果为1。(4)逻辑非(NOT)运算也称为求反,是指对数据位进行取反操作,1和0分别转换为0 和1,在变量上方加上画线来表示。第3章 运算方法与运算器第3章 运算方法与运算器2.逻辑运算部件逻辑运算部件 实现逻辑与、或、异或、非运算的部件非常简单,分别为与门、或门、异或门和反向器,如图3.28所示。将多个同类门集合在一起,就可以构成对n 位逻辑数据的与门、或门、异 或门和反向器。利用这些基本的门电路,可以实现复杂的组合逻辑,如图3.1中的一位全加 器、图3.18中的求补电路等。图3.28 逻辑运算器件第3章 运算方法与运算器3.2.2 移位运算移位运算对
33、于无限长度二进制数,左移或者右移n 位相当于该数乘以或者除以2n。由于计算机 的机器数字长是固定的,因此当机器数左移或右移n 位时,必然会使数据的低位或者高位 出现n 个空位。这些空位填写“0”还是“1”,取决于机器数采用的是无符号数还是有符号数。在计算机中,常见的移位运算包括逻辑移位、算术移位、不带进位循环移位和带进位 循环移位,具体运算过程如图3.29所示。第3章 运算方法与运算器图3.29 移位运算执行过程第3章 运算方法与运算器1.逻辑移位逻辑移位 逻辑移位包括逻辑左移和逻辑右移两种操作。与逻辑运算类似,逻辑移位的操作数被 认为是无符号数或逻辑数据,不存在符号问题。所有数据位都参与移位
34、运算。(1)逻辑左移(SHL):操作数的最高位向左移出,存入状态寄存器的进位标志位 CF,其他位依次向左移位,最低位补“0”。(2)逻辑右移(SHR):操作数的最低位向右移出,存入状态寄存器的进位标志位 CF,其他位依次向右移位,最高位补“0”。第3章 运算方法与运算器例例3.21 若二进制数 X=10011101,求 X 逻辑左移1位和3位的结果。解解 X 逻 辑 左 移 1 位:最 高 位 1 左 移 存 入 CF 标 志 位,最 低 位 补“0”,结 果 为00111010。X 逻辑左移3位:所有数据位向左移动3位,高位丢弃,bit5位移入 CF标志位,空出 来的低3位补“0”,结果为1
35、1101000。例例3.22 若二进制数 X=11011101,求 X 逻辑右移1位和3位的结果。解解 X 逻 辑 右 移 1 位:最 低 位 1 右 移 存 入 CF 标 志 位,最 高 位 补“0”,结 果 为01101110。X 逻辑右移3位:所有数据位向右移动3位,低位丢弃,bit2位移入 CF标志位,空出 来的高3位补“0”,结果为00011011。第3章 运算方法与运算器2.算术移位 算术移位是指将操作数据当作有符号数进行运算,在算术移位过程中必须保持移位前 后的符号位不变。(1)算术左移(SAL):与逻辑左移操作方法相同,操作数各位按位依次左移,最高位移 入CF标志位,最低位补“
36、0”。对于正数而言,其原码、补码和反码与真值相等,在不超出编 码表示范围的前提下,算术左移1位等于对操作数做乘2运算。(2)算术右移(SAR):操作数各位按位依次右移,最低位移入 CF标志位,最高位用符 号位填入。对于补码而言,算术右移1位等于对操作数做除2运算。第3章 运算方法与运算器例例3.23 若二进制数 X=11011101,求 X 算术左移和算术右移1位的结果。解解 X 算 术 左 移 1 位:最 高 位 1 左 移 存 入 CF 标 志 位,最 低 位 补“0”,结 果 为10111010。X 算术右移1位:最低位1右移存入到 CF标志位,最高位补“1”,结果为11101110。第
37、3章 运算方法与运算器3.循环移位 循环移位是指将数据的首尾相连进行移位,在整个移位过程中,数据各位信息没有丢 失,可用于多字节数据的高低字节交换等操作。根据进位是否参与循环,循环移位可分为 不带进位循环移位和带进位循环移位。(1)不带进位循环左移(ROL):数据各位依次向左移位,移出的最高位移入空出的最 低位,同时存入 CF标志位。(2)不带进位循环右移(ROR):数据各位依次向右移位,移出的最低位移入空出的最高位,同时存入 CF标志位。第3章 运算方法与运算器(3)带进位循环左移(RCL):数据各位依次向左移位,移出的最高位移入 CF标志位的 同时,原 CF标志位的内容移入空出的最低位。(
38、4)带进位循环右移(RCR):数据各位依次向右移位,移出的最低位移入CF标志位的 同时,原 CF标志位的内容移入空出的最高位。第3章 运算方法与运算器例例3.24 若二进制数 X=11010101,CF=0,求 X 循环移位的结果。解解 X 不带进位循环左移1位的结果为10101011。X 不带进位循环右移1位的结果为11101010。X 带进位循环左移1位的结果为10101010,CF=1。X 带进位循环右移1位的结果为01101010,CF=1。第3章 运算方法与运算器4.移位运算部件移位运算部件 图3.30为上述8种(实质为7种)移位运算的功能实现电路,其中核心器件为16个 D 触发器构
39、成的16位移位寄存器(通过增加 D 触发器的数目可以扩充移位寄存器的位数)。通过与或逻辑电路控制 D 触发器的输入端 D,移位寄存器可实现所期望的移位操作。图 3.30中,Rin为移位寄存器的输入有效控制信号,Rout为移位寄存器的输出允许控制信号,CF为进位标志位,SHL(SAL)、SHR、SAR、ROL、ROR、RCL、RCR为实现相应移位运 算的控制信号,Di为数据的第i位。第3章 运算方法与运算器图3.30 具有7种移位运算功能的移位寄存器第3章 运算方法与运算器3.3 浮点数运算浮点数运算3.3.1 浮点加减运算浮点加减运算 设两个规格化浮点数 X=Mx 2Ex 和Y=My 2Ey,
40、实现 XY 运算的规则如下所述。第3章 运算方法与运算器1.对阶对阶 一般情况下,两浮点数的阶码不会相同。也就是说,两数的小数点没有对齐。和我们所 熟悉的十进制小数加减一样,在进行浮点数加减运算前需将小数点对齐,这称为对阶。只 有当两数的阶码相同时才能进行尾数的加减运算。对阶的原则是小阶对大阶,也就是将小阶码浮点数的阶码变成大阶码浮点数的阶码。具体做法是:小阶码每增加1,该浮点数的尾数右移一位,直到小阶码增大到与大阶码相 同。这样在对阶时丢失的是尾数的低位,造成的误差很小。若是大阶对小阶,将丢失尾数的 高位,从而导致错误的结果。第3章 运算方法与运算器2.尾数加尾数加(减减)运算运算 对阶之后
41、,尾数即可进行加(减)运算。实际运算中只需做加法即可,因为减法可以用 加法来实现。3.规格化规格化 尾数加减运算后,其结果有可能是一个非规格化数。如果结果的真值 M 不满足1/2|M|Emax(最大阶码)时,发生上溢出,即乘积已无法表示;当EzEmax(最大阶码)时,发生上溢出,即商已无法表示;当EzEmin(最小阶码)时,发生下溢出,商可用0表示。当 发生溢出,尤其是上溢时,应重新定义浮点数或对被除数、除数作出限制。(3)被除数的尾数除以除数的尾数,由于进行的是浮点数运算,因此只要求两尾数是 规格化数,并不要求被除数的绝对值小于除数的绝对值。除法可采用3.1.3节所介绍的方法 进行。第3章
42、运算方法与运算器(4)规格化商的尾数。根据上述规格化数的范围,两数相除时,可能出现1/2除以-1的情况,此时的商为-1/2,这不是规格化数(补码表示时),尾数需要左规,但只需要左规 1次,便可使商之尾数变为规格化数。(5)规格化中,右规时应注意采用某种舍入算法。按照上述规则就可以获得两浮点数相除的商。图3.33为浮点数除法的流程图。第3章 运算方法与运算器图3.33 浮点数除法的流程框图第3章 运算方法与运算器3.3.3 浮点数运算的实现方法浮点数运算的实现方法 在计算机中实现浮点数运算可以采用不同的方法。1.软件方法软件方法 在一些比较简单的微型机、单片机中,内部有算术逻辑单元,并设置有加减
43、法指令,可 以依据浮点数运算流程编写程序来实现浮点数运算。这种方法速度慢,工作量大,应尽量 避免使用。第3章 运算方法与运算器2.专用浮点处理器专用浮点处理器 专用浮点处理器是为没有浮点处理能力的处理器配置的。例如,在8086处理器构成的 微机中可以配置浮点协处理器8087,80286微机可配置80287,80386微机可配置80387 等,这样就可以提高计算机的浮点处理能力。今天的高档处理器早已把浮点协处理器集成 在处理器芯片内部,如从80486DX微机之后即是如此。在设计计算机系统时,若采用的处理器不支持浮点运算,而系统又需要进行浮点运算,则可以考虑在此系统中配置独立的浮点协处理器。第3章
44、 运算方法与运算器3.在处理器中设置浮点运算部件在处理器中设置浮点运算部件 如果有浮点运算的需求,则在设计处理器时,可以将浮点运算器放进处理器中。这样 的处理器在设计制造出来之后就能实现浮点运算的功能。显然,后两种方法要付出硬件上的代价,但浮点运算的速度必然比软件实现要快。浮点运算部件也可以采用流水线结构实现。第3章 运算方法与运算器3.4 运算器基本结构运算器基本结构3.4.1 三种基本结构三种基本结构 运算器内部大多数采用总线互连。根据运算器内部总线的连接方式,可将运算器的基 本结构分为单总线结构、双总线结构及三总线结构,如图3.34所示。第3章 运算方法与运算器图3.34 运算器的三种基
45、本结构第3章 运算方法与运算器1.单总线结构单总线结构 如图3.34(a)(b)所示,单总线结构运算器的特点是所有部件都接到同一总线上,在同 一时间内,只能有一个操作数放在总线上进行传输。数据可以在任何两个寄存器之间,或 者在任一个寄存器和 ALU 之间传送。当执行双操作数运算指令时,需要分两次才能将两 个操作数输入 ALU,并且需要两个暂存器。也就是说,需要三步操作控制(对应三个时钟 节拍)方可得到运算结果。当运算结束后,通过单总线将运算结果存入目的寄存器。单总线 结构的优点是控制电路比较简单,其缺点是操作速度比较慢。第3章 运算方法与运算器2.双总线结构双总线结构 如图3.34(c)所示,
46、双总线结构运算器的特点是运算相关部件连接到两条总线上,可以 同时传输两个数据。当执行双操作数运算指令时,两个操作数可以同时加载到 ALU 进行 运算。但是由于两条总线被两个操作数占用,运算结果不能直接加到总线上,因此需要在 ALU 输出端设置暂存器来存储运算结果,在下一个时钟节拍才能将运算结果写入目的寄 存器。也就是说,需要两步操作控制(两个时钟节拍)才可以得到运算结果。显然,双总线结 构运算器比单总线结构运算器执行速度快。第3章 运算方法与运算器3.三总线结构三总线结构 如图3.34(d)所示,三总线结构运算器的特点是运算的相关部件连接到三条总线上,可 以同时传输三个数据。当执行双操作数运算
47、指令时,两个操作数可以同时加载到 ALU 进 行运算,第三条总线输出运算结果,只需一步操作控制(一个时钟节拍)就可以完成运算。此外,三总线结构运算器还具有直接传送功能,一个不需要修改的操作数可通过总线开关 从输入总线直接传送到输出总线。与单总线结构和双总线结构相比,三总线结构运算器的 运算速度最快,但是结构比较复杂。第3章 运算方法与运算器除了图3.34所示的结构外,还有其他类型的连接结构。对于总线结构,需要特别说明如下:(1)总线总是分时工作的,在任何时刻总线上只允许传输一个数据。也就是说,任何时 候只允许一个器件将其信息输出到总线上,多个器件同时向总线输出信息必然会引起总线 竞争。(2)同
48、一个功能部件一次只能做一件事。例如,ALU 可以完成加、减、与、或等多种运 算功能,但某一时刻只能完成一种运算功能,做加法时不可能同时做与运算。(3)在双总线及三总线结构的运算器中需要多端口器件。图3.34所给出的运算器就是依据以上原则工作的。第3章 运算方法与运算器3.4.2 运算器实例运算器实例 图3.35为由8086CPU 构成的微机系统简化框图,虚线框内为8086CPU,CPU 内部 及系统均采用单总线互连结构。图3.35中的 ALU 与暂存器 S和 T、状态寄存器 PSW、通用寄存器(AX、BX、CX、DX、SP、BP、SI、DI)构成了典型的单总线结构运算器。其中,ALU 完成算术逻辑运算以 及算术/逻辑移位、循环移位等操作。第3章 运算方法与运算器图3.35 8086微机系统简化框图