浮点数计算方法_第1页
浮点数计算方法_第2页
浮点数计算方法_第3页
浮点数计算方法_第4页
浮点数计算方法_第5页
已阅读5页,还剩159页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章运算方法和运算器,2.1数据与文字的表示方法2.2定点加法、减法运算2.3定点乘法运算2.4定点除法运算2.5定点运算器的组成2.6浮点运算方法和浮点运算器,2.1数据与文字的表示方法2.1.1数据格式,计算机中常用的数据表示格式有两种:1定点格式2浮点格式一般来说,定点格式容许的数值范围有限,但要求的处理硬件比较简单。而浮点格式容许的数值范围很大,但要求的处理硬件比较复杂。,1.定点数的表示方法,定点表示:约定机器中所有数据的小数点位置是固定不变的。由于约定在固定的位置,小数点就不再使用记号“.”来表示。通常将数据表示成纯小数或纯整数。定点数012n在定点机中表示如下(0:符号位,0代表正号,1代表负号):,纯小数的表示范围为(012n各位均为0时最小;各位均为1时最大)0|12n(2.1)纯整数的表示范围为0|2n1(2.2)目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。,电子的质量(91028克)和太阳的质量(21033克)相差甚远,在定点计算机中无法直接来表示这个数值范围.要使它们送入定点计算机进行某种运算,必须对它们分别取不同的比例因子,使其数值部分绝对值小于1,即:910280.91027210330.21034这里的比例因子1027和1034要分别存放在机器的某个存储单元中,以便以后对计算结果按这个比例增大。显然这要占用一定的存储空间和运算时间。因此得到浮点表示法如下:,2.浮点数的表示方法,浮点表示法:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内自由浮动,称为浮点表示法。任意一个十进制数可以写成10E.(2.3)同样在计算机中一个任意进制数可以写成e.(2.4):尾数,是一个纯小数。e:比例因子的指数,称为浮点数的指数,是一个整数。R:比例因子的基数,对于二进计数值的机器是一个常数,一般规定为2,8或16。,一个机器浮点数由阶码和尾数及其符号位组成(尾数:用定点小数表示,给出有效数字的位数决定了浮点数的表示精度;阶码:用整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围。):,32位浮点数的IEEE754标准格式为:,64位浮点数的IEEE754标准格式为:,在IEEE754标准格式表示的32位浮点数中,:浮点数的符号位,1位,0表示正数,1表示负数。:尾数,23位,用小数表示,小数点放在尾数域的最前面。:阶码,8位阶符采用隐含方式,即采用移码方式来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大者其指数值也大。采用这种方式时,将浮点数的指数真值e变成阶码时,应将指数e加上一个固定的偏移值127(01111111),即e127.,IEEE754标准中,一个规格化的32位浮点数的真值可表示为(1)s(1.)2127e127一个规格化的64位浮点数的真值为(1)s(1.)21023e1023为提高数据的表示精度,当尾数的值不为0时,尾数域的最高有效位应为1,否则以修改阶码同时左右移小数点的办法,使其变成这一表示形式,这称为浮点数的规格化表示。当浮点数的尾数为0,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称为机器零。,当阶码E为全0且尾数M也为全0时,表示的真值x为零,结合符号位S为0或1,有正零和负零之分。当阶码E为全1且尾数M为全0时,表示的真值x为无穷大,结合符号位S为0或1,也有+和-之分。这样在32位浮点数表示中,要除去E用全0和全1(255)10表示零和无穷大的特殊情况,指数的偏移值不选128(10000000),而选127(01111111)。对于规格化浮点数,E的范围变为1到254,真正的指数值e则为-126到+127。因此32位浮点数表示的绝对值的范围是10-381038(以10的幂表示)。,浮点数所表示的范围远比定点数大。一台计算机中究竟采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示,由使用者进行选择,而单片机中多采用定点表示。例1若浮点数的754标准存储格式为(41360000)16,求其浮点数的十进制数值。例2将(20.59375)10转换成754标准的32位浮点数的二进制存储格式。,例1若浮点数的754标准存储格式为(41360000)16,求其浮点数的十进制数值。解:将十六进制数展开后,可得二进制数格式为指数e阶码127100000100111111100000011=(3)10包括隐藏位1的尾数1.M1.011011000000000000000001.011011于是有(1)s1.M2e(1.011011)231011.011(11.375)10,例2将(20.59375)10转换成754标准的32位浮点数的二进制存储格式。解:首先分别将整数和分数部分转换成二进制数:20.5937510100.10011然后移动小数点,使其在第1,2位之间10100.100111.01001001124e4于是得到:S0,E4127131,M010010011最后得到32位浮点数的二进制存储格式为:01000001101001001100000000000000(41A4C000)16,3.十进制数串的表示方法,目前,大多数通用性较强的计算机都能直接处理十进制形式表示的数据。十进制数串在计算机内主要有两种表示形式:(1)字符串形式:一个字节存放一个十进制的数位或符号位。为了指明这样一个数,需要给出该数在主存中的起始地址和位数(串的长度)。(2)压缩的十进制数串形式:一个字节存放两个十进制的数位。它比前一种形式节省存储空间,又便于直接完成十进制数的算术运算,是广泛采用的较为理想的方法。,4.自定义数据表示,在传统的计算机体系结构中,用指令本身来说明操作数据的类型。如定点加法表示操作数是纯小数或纯整数;浮点加法表示操作数是浮点数;十进制加法表示操作数是BCD数。由于操作数据类型不同,要设三种不同的指令(操作码)来加以区分。自定义数据表示则用数据本身来说明数据类型。表示形式有两种,即标志符数据表示和描述符数据表示。,描述符数据表示主要用来描述多维结构的数据类型,如向量、矩阵、记录等。描述符标志位部分指明这是一个数据描述符;特征标记部分指明数据的各种特征;长度部分指明数组中元素个数;起始地址部分指明数据块的首地址。其格式为:,标志符数据表示要求对每一个数据都附加标志符。其指明后面的数据所具有的类型,如整数、浮点数、BCD数、字符串等,其格式如下:,2.1.2数的机器码表示,在计算机中对数据进行运算操作时,为了妥善的处理好符号位问题,就产生了把符号位和数字位一起编码来表示相应的数的各种表示方法,如原码、补码、反码、移码等。为了区别一般书写表示的数和机器中这些编码表示的数,通常将前者称为真值,后者称为机器数或机器码。常用的机器码表示法:1.原码表示法2.补码表示法3.反码表示法4.移码表示法,1.原码表示法,若定点小数的原码形式为0.12n,则原码表示的定义是:10原11|01式中原是机器数,是真值若定点整数的原码形式为012n,则原码表示的定义是2n0原2n2n|02n,对于0,原码机器中往往有“+0”、“-0”之分,故有两种形式:+0原=0.000.0-0原=1.000.0采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。为了解决这些矛盾,人们找到了补码表示法。,2.补码表示法,我们先以钟表对时为例说明补码的概念。假设现在的标准时间为4点正;而有一只表已经7点了,为了校准时间,可以采用两种方法:一是将时针退7-4=3格;一是将时针向前拨12-3=9格。这两种方法都能对准到4点,由此可以看出,减3和加9是等价的,就是说9是(-3)对12的补码,可以用数学公式表示:-3+9(mod12)mod12的意思就是12模数,这个“模”表示被丢掉的数值。上式在数学上称为同余式。,上例中其所以7-3和7+9(mod12)等价,原因就是表指针超过12时,将12自动丢掉,最后得到16-12=4。从这里可以得到一个启示,就是负数用补码表示时,可以把减法转化为加法。这样,在计算机中实现起来就比较方便。73=47+9=4以12取模数(mod12)-3=+9(mod12)采用补码表示法进行减法运算就比原码方便得多了。因为不论数是正还是负,机器总是做加法,减法运算可变为加法运算。关键是我们需要换算出两个操作数的补码表示。,若定点小数补码形式为0.12n,则补码表示的定义是:10补22|01(mod2)若定点整数补码形式为012n,则补码表示的定义是:2n0补2n+1+2n+1|02n(mod2n1)根据补码定义,求负数的补码要从2减去|x|。为了用加法代替减法,结果还得在求补码时作一次减法,这显然是不方便的。下面介绍的反码表示法可以解决负数的求补问题。,3.反码表示法,所谓反码,就是二进制的各位数码0变为1,1变为0。也就是说,若Xi=1,则反码为xi=0;若xi=0,则反码xi=1。数值上面的一横表示反码的意思。在计算机中用触发器寄存数码,若触发器Q端输出表示原码,则其Q端输出就是反码。由此可知,反码是容易得到的。,若定点小数反码形式为0.12n,则反码表示的定义是:10反(22-n)01一般情况下,对正数和负数的值,0.12n,则反0.12n0.12n,则反1.12n若定点整数反码形式为012n,则反码表示的定义是:2n0反(2n+11)02n,我们比较反码与补码的公式,对于负数有:定点小数反(22n)补2可得到补反2n定点整数反(2n+11)补2n+1+可得到补反1这就是通过反码求补码的重要公式。这个公式告诉我们,若要一个负数变补码,其方法是符号位置1,其余各位0变1,1变0,然后在最末位(2-n)上加1。,4.移码表示法,移码通常用于表示浮点数的阶码。由于阶码是个n位的整数,假定定点整数移码形式为012n时,对定点整数移码的传统定义是:移2n2n2n若阶码数值部分为5位,以表示真值,则:移252525,小结:上面的数据四种机器表示法中,移码表示法主要用于表示浮点数的阶码。由于补码表示对加减法运算十分方便,因此目前机器中广泛采用补码表示法。在这类机器中,数用补码表示,补码存储,补码运算。也有些机器,数用原码进行存储和传送,运算时改用补码。还有些机器在做加减法时用补码运算,在做乘除法时用原码运算。,例5设机器字长16位,定点表示,尾数15位,数符1位,问:(1)定点原码整数表示时,最大正数是多少?最小负数是多少?(2)定点原码小数表示时,最大正数是多少?最小负数是多少?;解:(1)定点原码整数表示最大正数值(2151)10(32767)10最小负数值(2151)10(32767)10(2)定点原码小数表示最大正数值(1215)10(0.111.11)2最小负数值(1215)10(0.111.11)2,例6假设由S,E,M三个域组成的一个32位二进制数所表示的非零规格化浮点数,真值表示为:(1)s(1.M)2E128问:它所表示的规格化的最大正数、最小正数、最大负数、最小负数是多少?解:(1)最大正数1(12-23)2127(2)最小正数1.02128(3)最小负数1(1223)2127(4)最大负数1.02128,例7若机器使用8位表示定点数,将数x100/100,y0.59375/0.59375分别转换为各种机器码形式。解:已知数据位数为8位,最高位为符号位,数据表示范围可用7位,那么定点整数的范围是:0|127(271)定点小数的范围是:0|0.9921875(127)(100)10=(1100100)2(0.59375)10=(0.10011)2+1100100原=01100100-1100100原=11100100+1100100反=01100100-1100100反=10011011+1100100补=01100100-1100100补=10011100+0.10011原=01001100-0.10011原=11001100+0.10011反=01001100-0.10011反=10110011+0.10011补=01001100-0.10011补=10110100,2.1.3字符与字符串的表示方法,1.字符的表示方法现代计算机不仅处理数值领域的问题,而且处理大量非数值领域的问题。这样一来,必然要引入文字、字母以及某些专用符号,以便表示文字语言、逻辑语言等信息。目前国际上普遍采用的字符系统是七单位的ASCII码(美国国家信息交换标准字符码),它包括10个十进制数码,26个英文字母和一定数量的专用符号,如$,%,等,共128个元素,因此二进制编码需7位,加一位偶校验位,共8位一个字节。参见书中表2.1的ASCII码字符编码表。,2.字符串字符串是指连续的一串字符,通常方式下,它们占用主存中连续的多个字节,每个字节存一个字符。当主存字由2个或4个字节组成时,在同一个主存字中,既可按从低位字节向高位字节的顺序存放字符串的内容,也可按从高位字节向低位字节的次序顺序存放字符串的内容。例将下面字符串从高位字节到低位字节依次存在主存中。IFABTHENREAD(C),2.1.4汉字的表示方法,1.汉字的输入编码当前采用的方法主要有以下三类:数字编码常用的是国标区位码,用数字串代表一个汉字输入。区位码是将国家标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。区码和位码各两位十进制数字,因此输入一个汉字需按键四次。数字编码输入的优点是无重码,且输入码与内部编码的转换比较方便,缺点是代码难以记忆。拼音码拼音码是以汉字拼音为基础的输入方法。使用简单方便,但汉字同音字太多,输入重码率很高,同音字选择影响了输入速度。字形编码字形编码是用汉字的形状来进行的编码。把汉字的笔划部件用字母或数字进行编码,按笔划的顺序依次输入,就能表示一个汉字。,2.汉字内码汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。英文字符的机内代码是七位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。注意:有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。,3.汉字字模码字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。字模点阵只能用来构成汉字库,用于汉字的显示输出或打印输出。,注意,汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同用途的编码,不要混为一谈。,图2.1汉字的字模点阵及编码,2.1.5校验码,元件故障/噪声干扰等各种因素常导致计算机在处理信息过程中出现错误。为了防止错误可将信号采用专门的逻辑线路进行编码以检测错误,甚至校正错误。通常的方法是在每个字上添加一些校验位,用来确定字中出现错误的位置。最简单且应用广泛的检错码是采用一位校验位的奇校验或偶校验。设(01n-1)是一个n位字,则奇校验位定义为C01n-1同理偶校验位定义为C01n-1,2.2定点加法、减法运算2.2.1补码加法,负数用补码表示后,可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必为了负数的加法运算,再配一个减法器。补码加法的公式是补补补(mod2)现分四种情况来证明。假设采用定点小数表示,因此证明的先决条件是1,1,1。,(1)0,0,则0。相加两数都是正数,故其和也一定是正数。正数的补码和原码是一样的,可得:补补补(mod2)(2)0,0,则0或0时,2()2,进位2必丢失,又因()0,故补补补(mod2)当0时,2()2,又因()0或0。这种情况等同于第2种情况。(4)0,0,则0。相加两数都是负数,则其和也一定是负数。补2,补2补补222(2)上式右边分为”2”和(2)两部分.既然()是负数,而其绝对值又小于1,那么(2)就一定是小于2而大于1的数,进位”2”必丢失.又因()0则商数为1,并进行第二步减,即:xy补(21y)若:xy0则商数为0,还原减法操作,在进行第二步减,即:x(21y)补x补+-(21y)补上面过程也就是:xyy(21y)补xy补y(21y)补xy补(21y)补步骤2同理,从而用加减交替法实现除法操作。,2.4.2并行除法器1.可控加法/减法(CAS)单元,和阵列乘法器非常相似,阵列式除法器也是一种并行运算部件,采用大规模集成电路制造。与早期的串行除法器相比,阵列除法器不仅所需的控制线路少,而且能提供令人满意的高速运算速度。阵列除法器有多种多样形式,如不恢复余数阵列除法器,补码阵列除法器等等。先介绍可控加法/减法(CAS)单元,它将用于并行除法流水逻辑阵列中,它有四个输出端和四个输入端。当输入线P0时,CAS作加法运算;当P1时,CAS作减法运算。逻辑结构图:,CAS单元的输入与输出的关系可用如下一组逻辑方程来表示:SiAi(BiP)CiCi1(AiCi)(BiP)AiCi(2.32)当P0时,方程式(2.32)就等于我们前面学习的一位全加器(FA)的公式:SiAiBiCiCi1AiBiBiCiAiCi当P1时,则得求差公式:SiAiBiCiCi1AiBiBiCiAiCi(2.33)其中BiBi1。,在减法情况下,输入Ci称为借位输入,而Ci1称为借位输出。为说明CAS单元的实际内部电路实现,将方程式(2.32)加以变换,可得如下形式:SiAi(BiP)CiAiBiCiPAiBiCiPAiBiCiPAiBiCiPAiBiCiPAiBiCiPAiBiCiPAiBiCiPCi1(AiCi)(BiP)AiCiAiBiPAiBiPBiCiPBiCiPAiCi在这两个表达式中,每一个都能用一个三级组合逻辑电路(包括反向器)来实现。因此每一个基本的CAS单元的延迟时间为3T单元。,2.不恢复余数的阵列除法器,先假定所有被处理的数都是正的小数。不恢复余数的除法也就是加减交替法。在不恢复余数的除法阵列中,每一行所执行的操作究竟是加法还是减法,取决于前一行输出的符号与被除数的符号是否一致。当出现不够减时,部分余数相对于被除数来说要改变符号。这时应该产生一个商位“0”,除数首先沿对角线右移,然后加到下一行的部分余数上。当部分余数不改变它的符号时,即产生商位“1”,下一行的操作应该是减法。下图是4位除4位的不恢复余数阵列除法器的逻辑原理图。,其中被除数0.123456(双倍长)除数0.123商数0.q1q2q3余数0.00r3r4r5r6字长n14由上图看出,该阵列除法器是用一个可控加法/减法(CAS)单元所组成的流水阵列来实现的。推广到一般情况,一个(n1)位除(n1)位的加减交替除法阵列由(n1)2个CAS单元组成,其中两个操作数(被除数与除数)都是正的。,最上面一行所执行的初始操作经常是减法。因此最上面一行的控制线P固定置成“1”。减法是用2的补码运算来实现的,这时右端各CAS单元上的反馈线用作初始的进位输入。每一行最左边的单元的进位输出决定着商的数值。将当前的商反馈到下一行,我们就能确定下一行的操作。由于进位输出信号指示出当前的部分余数的符号,因此,它将决定下一行的操作将进行加法还是减法。,对不恢复余数阵列除法器来说,在进行运算时,沿着每一行都有进位(或借位)传播,同时所有行在它们的进位链上都是串行连接。而每个CAS单元的延迟时间为3T单元,因此,对一个2n位除以n位的不恢复余数阵列除法器来说,单元的数量为(n1)2,考虑最大情况下的信号延迟,其除法执行时间为td3(n1)2T其中n为尾数位数。,例200.101001,0.111,求。解:补1.001被除数0.101001减1.001余数为负1.1100010q00余数左移1.10001加0.111余数为正0.011010q11余数左移0.1101减1.001余数为负1.11110q20余数左移1.111加0.111余数为正0.1100q31故得商qq0.q1q2q30.101余数r(0.00r3r4r5r6)0.000110,2.5定点运算器的组成2.5.1逻辑运算,计算机中除了进行加、减、乘、除等基本算术运算外,还可对两个或一个逻辑数进行逻辑运算。所谓逻辑数,是指不带符号的二进制数。利用逻辑运算可以进行两个数的比较,或者从某个数中选取某几位等操作。计算机中的逻辑运算,主要是指逻辑非、逻辑加、逻辑乘、逻辑异四种基本运算。,1.逻辑非运算逻辑非也称求反。对某数进行逻辑非运算,就是按位求它的反,常用变量上方加一横来表示。2.逻辑加运算两数进行逻辑加,就是按位求它们的“或”,所以逻辑加又称逻辑或,常用记号“V”或“”来表示。3.逻辑乘运算两数逻辑乘,就是按位求它们的“与”,所以逻辑乘又称“逻辑与”,常用记号“”或“”来表示。4.逻辑异运算对两数进行异或就是按位求它们的模2和,所以逻辑异又称“按位加”,常用记号“”表示。,2.5.2多功能算术/逻辑运算单元(ALU),由一位全加器(FA)构成的行波进位加法器,它可以实现补码数的加法或减法运算。但是这种加法/减法器存在两个问题:一是由于串行进位它的运算时间很长。假如加法器由n位全加器构成,每一位的进位延迟时间为20ns,那么最坏情况下,进位信号从最低位传递到最高位而最后输出稳定至少需要n*20ns,这在高速计算中显然是不利的。二是就行波进位加法器本身来说,它只能完成加法或减法两种操作而不能完成逻辑操作。本节我们介绍的多功能算术/逻辑运算单元(ALU)不仅具有多种算术运算和逻辑运算的功能,而且具有先行进位逻辑,从而能实现高速运算。,图2.10ALU的逻辑结构原理框图,1.基本思想,一位全加器(FA)的逻辑表达式为FiAiBiCiCi1AiBiBiCiCiAi我们将Ai和Bi先组合成由控制参数S0,S1,S2,S3控制的组合函数Xi和Yi,然后再将Xi,Yi和下一位进位数通过全加器进行全加。这样,不同的控制参数可以得到不同的组合函数,因而能够实现多种算术运算和逻辑运算。,一位算术/逻辑运算单元的逻辑表达式为:FiXiYiCnICni1XiYiYiCniCniXi上式中进位下标用ni代替原来一位全加器中的i,i代表集成在一片电路上的ALU的二进制位数。对于4位一片的ALU,i0,1,2,3。n代表若干片ALU组成更大字长的运算器时每片电路的进位输入,例如当4片组成16位字长的运算器时,n0,4,8,12。,2.逻辑表达式,控制参数S0,S1,S2,S3分别控制输入Ai和Bi,产生Y和X的函数。其中Yi是受S0,S1控制的Ai和Bi的组合函数,而Xi是受S2,S3控制的Ai和Bi组合函数,其函数关系如下表2.4所示。,表2.4Xi,Yi与控制参数和输入量的关系,根据上面所列的函数关系,即可列出Xi和Yi的逻辑表达式XiS2S3S2S3(AiBi)S2S3(AiBi)S2S3AiYiS0S1AiS0S1AiBiS0S1AiBi进一步化简并代入前面的求和与进位表达式,可得ALU的某一位逻辑表达式如下,(2.36),4位之间采用先行进位公式,根据上式(2.36),每一位的进位公式可递推如下:第0位向第1位的进位公式为Cn1Y0X0Cn其中Cn是向第0位(末位)的进位。第1位向第2位的进位公式为Cn2Y1X1Cn1Y1Y0X1X0X1Cn第2位向第3位的进位公式为Cn3Y2X2Cn2Y2Y1X2Y0X1X2X0X1X2Cn第3位的进位输出(即整个4位运算进位输出)公式为Cn4Y3X3Cn3Y3Y2X3Y1X2X3Y0X1X2X3X0X1X2X3Cn设GY3Y2X3Y1X2X3Y0X1X2X3PX0X1X2X3则Cn4GPCn(2.37),这样对一片ALU来说,可有三个进位输出。其中G称为进位发生输出,P称为进位传送输出。在电路中多加这两个进位输出的目的,是为了便于实现多片(组)ALU之间的先行进位,为此还需一个配合电路称之为先行进位发生器(CLA)。Cn+4是本片(组)的最后进位输出。逻辑表达式表明,这是一个先行进位逻辑。换句话说第0位的进位输入Cn可以直接传送到最高位上去,因而可以实现高速运算。用正逻辑表示的4位算术/逻辑运算单元(ALU)的逻辑电路图如下,它是根据上面的原始推导公式用TTL电路实现的。这个期间的商业标号为74181ALU。,3.算术逻辑运算的实现,上图示中除了S0S3四个控制端外,还有一个控制端,它是用来控制ALU是进行算术运算还是进行逻辑运算的。当0时,对进位信号没有任何影响。此时F不仅与本位的被操作数Y和操作数X有关,而且与本位的进位输出,即C有关,因此0时进行算术操作。当1时,封锁了各位的进位输出,即C0,因此各位的运算结果F仅与Y和X有关,故1时进行逻辑操作。,下图示出了工作于负逻辑和正逻辑操作数方式的74181ALU方框图。由书第55页的功能表可看出,这个器件执行的正逻辑输入/输出方式的一组算术运算和逻辑操作与负逻辑输入/输出方式的一组算术运算和逻辑操作是等效的。,图2.1174181ALU的逻辑电路图和方框图,参见书中第55页的表2.5列出了74181ALU的运算功能表,它有两种工作方式。对正逻辑操作数来说,算术运算称高电平操作,逻辑运算称正逻辑操作(即高电平为“1”,低电平为“0”)。对于负逻辑操作数来说,正好相反。由于S0S3有16种状态组合,因此对正逻辑输入与输出而言,有16种算术运算功能和16种逻辑运算功能。同样对于负逻辑输入与输出而言,也有16种算术运算功能和16种逻辑运算功能。,4.两级先行进位的ALU,前面说过,74181ALU设置了P和G两个本组先行进位输出端。如果将四片74181的P,G输出端送入到74182先行进位部件(CLA),又可实现第二级的先行进位,即组与组之间的先行进位。假设4片(组)74181的先行进位输出依次为P0,G0,G1,P1,P2,G2,P3,G3,那么参考式(2.37)的进位逻辑表达式,先行进位部件74182CLA所提供的进位逻辑关系如下:,CnG0P0CnCnG1P1CnG1G0P1P0P1CnCnG2P2CnG2G1P2G0P1P2P0P1P2CnCn4G3P3CnG3G2P3G1P1P2G0P1P2P3P0P1P2P3CnG*P*Cn其中P*P0P1P2P3G*G3G2P3G1P1P2G0P1P2P3根据以上表达式,用TTL器件实现的成组先行进位部件74182的逻辑电路图如下,其中G*称为成组进位发生输出,P*称为成组进位传送输出。,下图示出了用两个16位全先行进位部件级联组成的32位ALU逻辑方框图。在这个电路中使用了八个74181ALU和两个74182CLA器件。很显然对一个16位来说,CLA部件构成了第二级的先行进位逻辑,即实现四个小组(位片)之间的先行进位,从而使全字长ALU的运算时间大大缩短。,图2.13用两个16位全先行进位部件级联组成的32位ALU,2.5.3内部总线,由于计算机内部的主要工作过程是信息传送和加工的过程,因此在机器内部各部件之间的数据传送非常频繁。为了减少内部的传送线并便于控制,通常将一些寄存器之间数据传送的通路加以归并,组成总线结构,使不同来源的信息在此传输线上分时传送。根据总线所在位置,总线分为内部总线和外部总线两类。内部总线是指CPU内各部件的连线,而外部总线是指系统总线,即CPU与存储器、I/O系统之间的连线。本节只讨论内部总线。,按总线的逻辑结构来说,总线可分为单向传送总线和双向传送总线。所谓单向总线就是信息只能向一个方向传送。所谓双向总线就是信息可以分两个方向传送,既可以发送数据,也可以接收数据。下图2.14(a)是带有缓冲驱动器的4位双向数据总线。其中所用的基本电路就是三态逻辑电路。当“发送”信号有效时,数据从左向右传送。反之当“接收”信号有效时,数据从右向左传送。这种类型的缓冲器通常根据它们如何使用而叫作总线扩展器、总线驱动器、总线接收器等等。,图2.14由三态门组成的双向数据总线,上图2.14(b)中所示的是带有锁存器的4位双向数据总线。它主要由一个DE触发器和一个三态缓冲器组成。DE触发器是在一个普通D触发器上另加一个E输入端(允许端)而构成的。此处E输入端用以控制D的输入。若E0,即使D为“1”,也不能输入。当接收数据时,E1三态门被禁止,因而数据总线上的数据被接收到锁存器。当发送数据时,E0,三态门被允许,因而锁存器的数据发送至数据总线上。,2.5.4定点运算器的基本结构,运算器包括ALU阵列乘除器寄存器多路开关三态缓冲器数据总线等逻辑部件。运算器的设计,主要是围绕ALU和寄存器同数据总线之间如何传送操作数和运算结果进行的。在决定方案时,需要考虑数据传送的方便性和操作速度,在微型机和单片机中还要考虑在硅片上制作总线的工艺。计算机的运算器大体有如下三种结构形式:,1.单总线结构的运算器,总线结构的运算器如下图所示。由于所有部件都接到同一总线上,所以数据可以在任何两个寄存器之间,或者在任一个寄存器和ALU之间传送。如果具有阵列乘法器或除法器,那么它们所处的位置应与ALU相当。对这种结构的运算器来说,在同一时间内,只能有一个操作数放在单总线上。为了把两个操作数输入到ALU,需要分两次来做,而且还需要A,B两个缓冲寄存器。这种结构的主要缺点是操作速度较慢,但是由于它只控制一条总线,故控制电路比较简单。,2.双总线结构的运算器,双总线结构的运算器如下图所示。在该结构中,两个操作数同时加到ALU进行运算,只需一次操作控制,而且马上就可以得到运算结果。图中两条总线各自把其数据送至ALU的输入端。特殊寄存器分为两组,它们分别与一条总线交换数据。这样通用寄存器中的数就可进入到任一组特殊寄存器中去,从而使数据传送更为灵活。ALU的输出不能直接加到总线上去。这是因为当形成操作结果的输出时,两条总线都被输入数占据,因而必须在ALU输出端设置缓冲寄存器。为此操作的控制要分两步完成:,第一步:在ALU的两个输入端输入操作数,形成结果并送入缓冲寄存器;第二步:把结果送入目的寄存器。假如在总线1,2和ALU输入端之间再各加一个输入缓冲寄存器,并把两个输入数先放至这两个缓冲寄存器,那么ALU输出端就可以直接把操作结果送至总线1或总线2上去。,3.三总线结构的运算器,三总线结构的运算器如下图所示。在三总线结构中,ALU的两个输入端分别由两条总线供给,而ALU的输出则与第三条总线相连。这样算术逻辑操作就可以在一步控制之内完成。由于ALU本身有时间延迟,所以打入输出结果的选通脉冲必须考虑到包括这个延迟。另外设置了一个总线旁路器。如果一个操作数不需要修改而直接从总线2传送到总线3,那么可以通过控制总线旁路器把数据传出;如果一个操作数传送时需要修改那么就借助于ALU。很显然三总线结构的运算器的特点是操作时间快。,2.6浮点运算方法和浮点运算器2.6.1浮点加法、减法运算,设有两个浮点数和,它们分别为2EM2EM其中E和E分别为数和的阶码,M和M为数和的尾数。两浮点数进行加法和减法的运算规则是z=(M2EEM)2E,EE(2.39),完成浮点加减运算的操作过程大体分为四步:(1).0操作数的检查;(2).比较阶码大小并完成对阶;(3).尾数进行加或减运算;(4).结果规格化并进行舍入处理。,(1)0操作数检查浮点加减运算过程比定点运算过程复杂。如果判知两个操作数或中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。(2)比较阶码大小并完成对阶两浮点数进行加减,首先要看两数的阶码是否相同。若二数阶码相同表示小数点是对齐的,可以进行尾数的加减运算;若二数阶码不同表示小数点位置没有对齐,此时必须使二数阶码相同这个过程叫作对阶。在对阶时总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移),每右移一位其阶码加1,直到阶码相等。,(3)尾数求和运算对阶结束后,即可进行尾数的求和运算。不论加法运算还是减法运算,都按加法进行操作,其方法与定点加减法运算完全一样。(4)结果规格化在浮点加减运算时,尾数求和的结果也可以得到01.或10.,即两符号位不等,这在定点加减法运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将运算结果右移以实现规格化表示称为向右规格化。规则是:尾数右移1位阶码加1。当尾数不是1.M时需向左规格化。,(5)舍入处理在对阶或向右规格化时尾数要向右移位,这样被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。简单的舍入方法有两种:一种是0舍1入法。另一种是恒置一法。在IEEE754标准中,舍入处理提供四种可选方法:就近舍入其实质就是通常所说的“四舍五入”。朝0舍入即朝数轴原点方向舍入,就是简单的截尾。这种方法容易导致误差积累。朝舍入对正数来说,只要多余位不全为0则向最低有效位进1;对负数来说则是简单的截尾。朝舍入处理方法正好与朝舍入情况相反。对正数来说,只要多余位不全为0则简单截尾;对负数来说,向最低有效位进1。,(6)浮点数的溢出下图表示了浮点机器数在数轴上的分布情况。,机器浮点数表示,当机器浮点数值大于最大正数A值,或小于最小负数B值时,称为上溢,这两种情况意味着阶码运算值超出了它所表示的范围,机器必须做中断处理。当机器浮点数值小于最小正数a值,或大于最大负数b值时,称为下溢。下溢不是一个严重问题,通常看作为机器零。,2.6.2浮点乘法、除法运算,1.浮点乘法、除法运算规则设有两个浮点数和:2EM2EM浮点乘法运算的规则是2(EE)(MM)(2.40)即乘积的尾数是相乘两数的尾数之积,乘积的阶码是相乘两数的阶码之和。浮点除法运算的规则是2(EE)(MM)(2.41)商的尾数是相除两数的尾数之商,商的阶码是相除两数的阶码之差。当然这里也有规格化与舍入等步骤。,浮点数的溢出是以其阶码溢出表现出来的。在加减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应处理。另外对尾数的溢出也需要处理。阶码上溢超过了阶码可能表示的最大值的正指数值,一般将其认为是和。阶码下溢超过了阶码可能表示的最小值的负指数值,一般将其认为是0。尾数上溢两个同符号尾数相加产生了最高位向上的进位,将尾数右移阶码增1来重新对齐。尾数下溢在将尾数右移时,尾数的最低有效位从尾数域右端流出,要进行舍入处理。,2.浮点乘、除法运算步骤浮点数的乘除运算大体分为四步:第一步,0操作数检查;第二步,阶码加/减操作;第三步,尾数乘/除操作;第四步,结果规格化及舍入处理。(1)浮点数的阶码运算对阶码的运算有1、1、两阶码求和、两阶码求差四种,运算时还必须检查结果是否溢出。在计算机中阶码通常用补码或移码形式表示。补码运算规则和判定溢出的方法,前面已经讲过。这里只对移码的运算规则和判定溢出的方法进行讲解。,移码的定义为移2n2n2n按此定义,则有移移2n2n2n(2n()2n移即直接用移码实现求阶码之和时,结果的最高位多加了个1,要得到正确的移码形式结果,必须对结果的符号再执行一次求反。,当混合使用移码和补码时,考虑到移码和补码的关系:对同一个数值其数值位完全相同,而符号位正好完全相反。而补的定义为补2n1则求阶码和用如下方式完成:移补2n2n12n1(2n()2n1移即移移补(mod2n1)同理移移补,上二式表明执行阶码加减时,对加数或减数来说应送移码符号位正常值的反码。如果阶码运算的结果溢出,上述条件则不成立。此时使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用0参加加减运算,则溢出条件是阶码的最高符号位为1。此时当两位符号位为10时表明上溢,为11时表明下溢。当最高符号位为0时表明没有溢出;两位符号位为01时结果为正;为00时结果为负。,例26011,110,求移和移,并判断是否溢出。解:移01011,补00110,补11010移移补10001,结果上溢。移移补00101,结果正确,为3。,2.6.3浮点运算流水线,1.流水线原理计算机的流水处理过程同工厂中的流水装配线类似。为了实现流水,首先必须把输入的任务分割为一系列的子任务,使各子任务能在流水线的各个阶段并发地执行。将任务连续不断地输入流水线

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论