《计算机组成原理--运算方法与运算器.ppt》由会员分享,可在线阅读,更多相关《计算机组成原理--运算方法与运算器.ppt(130页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、运算方法与运算器n本章内容:n1数据与文字的表示方法n2定点加法、减法运算n3定点乘法运算n4定点除法运算n5定点运算器的组成n6浮点运算方法和浮点运算器2/001数据与文字的表示方法n本节内容:n1.1数据格式n1.2数的机器码表示n1.3字符与字符串的表示方法n1.4汉字的表示方法n1.5校验码3/001.1数据格式n计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。n一般来说,定点格式容许的数值范围有限,但要求的处理硬件比较简单。而浮点格式容许的数值范围很大,但要求的处理硬件比较复杂。4/00定点数的表示方法n定点表示:约定机器中所有数据的小数点位置是固定不变的。由于约定在固
2、定的位置,小数点就不再使用记号“.”来表示。通常将数据表示成纯小数或纯整数。n定点数012n在定点机中表示如下(0:符号位,0代表正号,1代表负号):n纯小数的表示范围为(012n各位均为0时最小;各位均为1时最大):n0|12n5/00n纯整数的表示范围为:n0|2n1n目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。6/00浮点数的表示方法n电子的质量(91028克)和太阳的质量(21033克)相差甚远,在定点计算机中无法直接来表示这个数值范围。要使它们送入定点计算机进行某种运算,必须对它们分别取不同的比例因子,使其数值部分绝对值小于1,即:n910280.9102
3、7n210330.210347/00n这里的比例因子1027和1034要分别存放在机器的某个存储单元中,以便以后对计算结果按这个比例增大。显然这要占用一定的存储空间和运算时间。因此得到浮点表示法如下:n浮点表示法:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,这种把数的范围和精度分别表示的方法,数的小数点位置随比例因子的不同而在一定范围内自由浮动。8/00n 任意一个十进制数 可以写成:n N=10E.M n 同样,在计算机中一个任意进制数 可以写成n e.n其中:n :尾数,是一个纯小数。n e:比例因子的指数,称为浮点数的指数,是一个整数。n R:比例因子的基数,对于二
4、进计数值的机器是一个常数,一般规定 为2,8或16。n 一个机器浮点数由阶码和尾数及其符号位组成(尾数:用定点小数表示,给出有效数字的位数决定了浮点数的表示精度;n阶码:用整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围。):9/00n为便于软件移植,按照IEEE754标准,32位浮点数和64位浮点数的标准格式为:10/00n32位的浮点数中,n:浮点数的符号位,1位,0表示正数,1表示负数。n:尾数,23位,用小数表示,小数点放在尾数域的最前面。n:阶码(8位),阶符采用隐含方式,即采用移码方式来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大者其
5、指数值也大。采用这种方式时,将浮点数的指数真值e变成阶码时,应将指数e加上一个固定的偏移值127(01111111),即e127.11/00nIEEE754标准中,一个规格化的32位浮点数的真值可表示为:n(1)s(1.)2127e127n一个规格化的64位浮点数的真值为:n(1)s(1.)21023e102312/00n同一个浮点数的表示方法不是唯一的,如:n(1.75)10=1.1120(IEEE规格化表示)n=0.11121(传统规格化表示)n=0.011122n=0.001112313/00n为提高数据的表示精度,当尾数的值不为0时,尾数域的最高有效位应为1,否则以修改阶码同时左右移小
6、数点的办法,使其变成这一表示形式,这称为浮点数的规格化表示。n当浮点数的尾数为0,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称为机器零。14/00n当阶码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,
7、真正的指数值e则为-126到+127。因此32位浮点数表示的绝对值的范围是10-381038(以10的幂表示)。n浮点数所表示的范围远比定点数大。一台计算机中究竟采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示,由使用者进行选择,而单片机中多采用定点表示。15/00n例1若浮点数的754标准存储格式为(41360000)16,求其浮点数的十进制数值。16/00n解:n将十六进制数展开后,可得二进制数格式为:n指数e阶码127100000100111111100000011=(3)10n包括隐藏位1的尾数1.M1.011011000000
8、000000000001.011011n于是有(1)s1.M2en(1.011011)231011.011(11.375)1017/00n例2将(20.59375)10转换成754标准的32位浮点数的二进制存储格式。18/00n解:n首先分别将整数和分数部分转换成二进制数:20.5937510100.10011n然后移动小数点,使其在第1,2位之间n10100.100111.01001001124e4n于是得到:nS0,E4127131,M010010011n最后得到32位浮点数的二进制存储格式为:n01000001101001001100000000000000(41A4C000)1619/
9、001.2数的机器码表示n在计算机中对数据进行运算操作时,符号位如何表示呢?是否也同数值位一道参加运算操作呢?为了妥善的处理好这些问题,就产生了把符号位和数字位一起编码来表示相应的数的各种表示方法,如原码、补码、反码、移码等。为了区别一般书写表示的数和机器中这些编码表示的数,通常将前者称为真值,后者称为机器数或机器码。20/00n1.原码表示法(1)若定点小数的原码形式为x0 x1 x2 xn,则原码表示的定义是式中原是机器数,是真值例如,+0.1001,则原0.1001-0.1001,则原1.1001对于0,原码机器中往往有“+0”、“-0”之分,故有两种形式:+0原=0.000.0-0原=
10、1.000.021/00n(2)若定点整数的原码形式为x0 x1 x2 xn,则原码表示的定义是n采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。为了解决这些矛盾,人们找到了补码表示法。22/00n2.补码表示法n我们先以钟表对时为例说明补码的概念。假设现在的标准时间为4点正;而有一只表已经7点了,为了校准时间,可以采用两种方法:一是将时针退7-4=3格;一是将时针向前拨12-3=9格。这两种方法都能对准到4点,由此可以看出,减3和加9是等
11、价的,就是说9是(-3)对12的补码,可以用数学公式表示n-3+9(mod12)nmod12的意思就是12模数,这个“模”表示被丢掉的数值。上式在数学上称为同余式。n上例中其所以7-3和7+9(mod12)等价,原因就是表指针超过12时,将12自动丢掉,最后得到16-12=4。从这里可以得到一个启示,就是负数用补码表示时,可以把减法转化为加法。这样,在计算机中实现起来就比较方便。23/00n(1)若定点小数补码形式为x0.x1 x2 xn,则补码表示的定义是例如,+0.1011,则补0.1011-0.1011,则补10+10.0000-0.10111.0101对于0,0补0补0.0000(mo
12、d2)注意,0的补码表示只有一种形式。24/00n(2)对定点整数,补码表示的定义是n采用补码表示法进行减法运算就比原码方便得多了。因为不论数是正还是负,机器总是做加法,减法运算可变为加法运算。但根据补码定义,求负数的补码要从2减去|x|。为了用加法代替减法,结果还得在求补码时作一次减法,这显然是不方便的。下面介绍的反码表示法可以解决负数的求补问题。25/00n3.反码表示法n所谓反码,就是二进制的各位数码0变为1,1变为0。即:若xi=1,则反码为xi=0;若xi=0,则反码xi=1。n在计算机中用触发器寄存数码,若触发器Q端输出表示原码,则其Q端输出就是反码。由此可知,反码是容易得到的。2
13、6/00n(1)对定点小数,反码表示的定义为n其中n代表数的位数。n在一些文献中,这种以2为基数的反码又称为1的补码。27/00一般情况下,n对于正数0.x1 x2 xn,则反0.x1 x2 xnn对于负数0.x1 x2 xn,则有反1.x1 x2 xnn对于0,有0反和0反之分:0反0.00.00反1.11.128/00n比较反码与补码的公式反(22n)补2可得到补反2nn这就是通过反码求补码的重要公式。这个公式告诉我们,若要一个负数变补码,其方法是符号位置1,其余各位0变1,1变0,然后在最末位(2-n)上加1。29/00n(2)对定点整数,反码表示的定义为:30/00n4.移码表示法n移
14、码通常用于表示浮点数的阶码。由于阶码是个n位的整数,假定定点整数移码形式为x1 x2 xn时,对定点整数,移码的传统定义是真值加上一个固定常数2n31/00n若阶码数值部分为7位,以表示真值,则移27=128+128128n例如,当正数1010101时,移1,1010101;n当负数1010101时,移2727101010110000000-1010101=0,0101011。移码中的逗号不是小数点,而是表示左边一位是符号位。32/00n小结:上面的数据四种机器表示法中,移码表示法主要用于表示浮点数的阶码。由于补码表示对加减法运算十分方便,因此目前机器中广泛采用补码表示法。在这类机器中,数用补
15、码表示,补码存储,补码运算。也有些机器,数用原码进行存储和传送,运算时改用补码。还有些机器在做加减法时用补码运算,在做乘除法时用原码运算。33/00n例3以定点整数为例,用数轴形式说明原码、反码、补码表示范围和可能的数码组合情况。n解:n原码、反码、补码表示分别示于下图。与原码、反码不同,在补码表示中“0”只有一种形式,且用补码表示负数时范围可到2n。34/00n例4将十进制真值(127,1,0,1,127)列表表示成二进制数及原码、反码、补码、移码值。n解:二进制真值及其诸码值列于下表,其中0在原反中有两种表示。由表中数据可知,补码值与移码值差别仅在于符号位不同。35/00n例5设机器字长1
16、6位,定点表示,尾数15位,数符1位,问:n(1)定点原码整数表示时,最大正数是多少?最小负数是多少?n(2)定点原码小数表示时,最大正数是多少?最小负数是多少?n36/00n解:n(1)定点原码整数表示最大正数值(2151)10(32767)10最小负数值(2151)10(32767)10n(2)定点原码小数表示最大正数值(1215)10(0.111.11)2最小负数值(1215)10(0.111.11)237/00n例6假设由S,E,M三个域组成的一个32位二进制字所表示的非零规格化浮点数,真值表示为:n(1)s(1.M)2E128n问:它所表示的规格化的最大正数、最小正数、最大负数、最小
17、负数是多少?38/00n解:n(1)最大正数1(12-23)2127n(2)最小正数1.02128n(3)最小负数1(12-23)2127n(4)最大负数1.0212839/001.3字符与字符串的表示方法n1.字符的表示方法n现代计算机不仅处理数值领域的问题,而且处理大量非数值领域的问题。这样一来,必然要引入文字、字母以及某些专用符号,以便表示文字语言、逻辑语言等信息。n目前国际上普遍采用的字符系统是七单位的ASCII码(美国国家信息交换标准字符码),它包括10个十进制数码,26个英文字母和一定数量的专用符号,如$,%,等,共128个元素,因此二进制编码需7位,加一位偶校验位,共8位一个字节
18、。ASCII码规定8个二进制位的最高一位为0,余下的7位可以给出128个编码,表示128个不同的字符。其中95个编码,对应着计算机终端能敲入并且可以显示的95个字符,打印机设备也能打印这95个字符,如大小写各26个英文字母,09这10个数字符,通用的运算符和标点符号,*,/,0或0时,2()2,进位2必丢失,又因()0,故补补补(mod2)当0时,2()2,又因()0,故补补2()补(mod2)54/00n(3)0,0,则0。相加两数都是负数,则其和也一定是负数。补2,补2补补222(2)上式右边分为”2”和(2)两部分.既然()是负数,而其绝对值又小于1,那么(2)就一定是小于2而大于1的数
19、,进位”2”必丢失.又因()0,所以补补2()补(mod2)n(4)0,则0或0。这种情况和第2种情况一样,把和的位置对调即得证。n至此我们证明了,在模2意义下,任意两数的补码之和等于该两数之和的补码.这是补码加法的理论基础,其结论也适用于定点整数。55/00n例80.1001,0.0101,求。n解:补0.1001,补0.0101n所以0.111056/00例90.1011,0.0101,求。解:补0.1011,补1.1011n所以0.0110n由以上两例看到,补码加法的特点,一是符号位要作为数的一部分一起参加运算,二是要在模2的意义下相加,即超过2的进位要丢掉。57/002.2补码减法n负
20、数的减法运算也要设法化为加法来做,其所以使用这种方法而不使用直接减法,是因为它可以和常规的加法运算使用同一加法器电路,从而简化了计算机的设计。n数用补码表示时,减法运算的公式为n补补补补补n证明如下。58/00只要证明补补,上式即得证。现证明如下:补补补(mod2)补补补(1)补()补补补补补补(2)将式(1)式与(2)式相加,得补补补补补补补补补补补补0故 补补(mod2)59/00n从补求补的法则是:对补包括符号位“求反且最末位加1”,即可得到n补。写成运算表达式,则为n补补2nn其中符号表示对补作包括符号位在内的求反操作,2n表示最末位的160/00n例10已知x10.1110,20.1
21、101,求:1补,1补,2补,2补。n解:1补1.00101补1补2-40.11010.00010.11102补0.11012补2补2-41.00100.00011.001161/00n例110.1101,0.0110,求。n解:补0.1101,补0.0110,补1.1010nn所以0.011162/002.3溢出概念与检测方法n在定点小数机器中,数的表示范围为|1.在运算过程中如出现大于1的现象,称为“溢出”。在定点机中,正常情况下溢出是不允许的。63/00n例120.1011,0.1001,求。n解:补0.1011补0.1001补0.1011补0.1001-补1.0100两个正数相加的结果
22、成为负数,这显然是错误的。64/00n例130.1101,0.1011,求。n解:补1.0011补1.0101补1.0011补1.0101-补0.1000两个负数相加的结果成为正数,这同样是错误的。65/00n之所以发生错误,是因为运算结果产生了溢出。两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。n为了判断“溢出”是否发生,可采用两种检测的方法。66/00n第一种方法是采用双符号位法,这称为“变形补码”或“模4补码”,从而可使模2补码所能表示的数的范围扩大一倍。变形补码定义为:n或用同余式表示为n补4(mod4)67/00n为
23、了得到两数变形补码之和等于两数之和的变形补码,同样必须:n1.两个符号位都看作数码一样参加运算n2.两数进行以4位模的加法,即最高符号位上产生的进位要丢掉。n采用变形补码后,如果两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。这是因为两个绝对值小于1的数相加,其结果不会大于或等于2,所以最高符号位永远表示结果的正确符号。68/00n例140.1100,0.1000,求。n解:补00.1100,补00.1000补00.1100补00.1000-01.0100两个符号位出现“01”,表示已溢出,即结果大于1。69/00n例150.1100,-0.1000,求。n解:补1
24、1.0100,补11.1000补11.0100补11.1000-10.1100两个符号位出现“10”,表示已溢出,即结果小于1。70/00n由此可以得出如下结论:n1.当以模4补码运算,运算结果的二符号位相异时,表示溢出;相同时,表示未溢出。故溢出逻辑表达式为VSf1Sf2,其中Sf1和Sf2分别为最高符号位和第二符号位。此逻辑表达式可用异或门实现。n2.模4补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。n第二种溢出检测方法是采用单符号位法。从例1和例2中看到,当最高有效位产生进位而符号位无进位时,产生上溢;当最高有效位无进位而符号位有进位时,产生下溢。故溢出逻辑表达式为VCfC
25、o,其中Cf为符号位产生的进位,Co为最高有效位产生的进位。此逻辑表达式也可用异或门实现。n在定点机中当运算结果发生溢出时,机器通过逻辑电路自动检查出溢出,并进行中断处理。71/002.4基本的二进制加法/减法器n由于采用补码运算,我们可以把减法转换成加法进行,所以加法的功能是运算器必备的最基本的功能,加法器就是实现该功能的器件,假设我们只有基本的门电路(与、或、非、异或等),如何实现加法器的逻辑电路?n1、全加器n先看一个二进制加法的简单例子:72/00n我们现在希望单独把两个位的相加作为一个模块来设计,同时考虑低位来的进位,以及向高位的进位,那么,要实现多位如8位的加法,则只要把8个模块串
26、起来就可以。而这个模块我们称全加器。n模块类似于函数,考虑它的输入/输出,输入是加数的一位和被加数的一位,以及低位的进位,而输出是和(称本位和)和向高位的进位。如下图:73/00n我们把所有输入情况都写下来得到下表74/00n由上面的逻辑真值表我们可以得到如下逻辑表达式(可以采用逻辑函数的公式化简法或卡诺图化简法,见数字逻辑教材)n由逻辑表达式可以画出逻辑电路图(可以用数据验证):75/00n用生物学来比喻,门电路(与门、或门、非门、异或门)相当于最小的单位-细胞,则全加器(FA)相当于是运算器的构成单位-组织,如果要构造一个4位加法器-器官,则可以把4个全加器连接起来,如下页图。n试用两组数
27、据来验证:nA=1011B=1001nA=0011B=010176/0077/00n分析串行进位的逻辑电路性能:78/003补码定点乘法n本节内容:n3.1补码与真值的转换公式79/003.1补码与真值的转换公式设X补=x0.x1x2.xn,令X为真值;当X0时,x0=0X补=0.x1x2.xn=x12-1+x22-2+.+xn2-n=xi2-i=X当X0时,x0=1X补=1.x1x2.xn=2+X(按定义)X=1.x1x2.xn2=-1+(-1.00.0)+1.x1x2.xn=-1+xi2-i所以,可以用公式求补码真值:80/00n3.2补码一位乘法n使用上面的公式进行推导,用Y补表示=-y
28、0+y12-1+y22-2+.+yn-12-(n-1)+yn2-n=-y0+y1-y12-1+y22-1-y22-2+.+yn-12-(n-2)-yn-12-(n-1)+yn2-(n-1)-yn2-n=y1-y0+y22-1-y12-1+.+yn2-(n-1)-yn-12-(n-1)+0-yn2-n=(y1-y0)+(y2-y1)2-1+.+(yn-yn-1)2-(n-1)+(0-yn)2-n81/00对上面的公式两边乘上X,再求补,得:XY=X(y1-y0)+(y2-y1)2-1+.+(yn-yn-1)2-(n-1)+(0-yn2-n)故XY补=X(y1-y0)+(y2-y1)2-1+.+(
29、yn-yn-1)2-(n-1)+(0-yn2-n)补=(y1-y0)X+(y2-y1)2-1X+.+(yn-yn-1)2-(n-1)X+(0-yn)2-nX补=(y1-y0)X补+(y2-y1)2-1X补+.+(0-yn)2-nX补=(y1-y0)X补+(y2-y1)2-1X补+.+(0-yn)2-nX补=(y1-y0)X补+2-1(2-1(2-1(.2-1(2-1(0+(yn+1-yn)X补)+(yn-1-yn)X补).)=82/00令P0补=0,yn+1=0则上式可以写成递推公式:P1补=2-1P0补+(yn+1-yn)X补P2补=2-1P1补+(yn-yn-1)X补.Pi补=2-1Pi-
30、1补+(yn-i+2-yn-i+1)X补.Pn补=2-1Pn-1补+(y2-y1)X补Pn+1补=Pn补+(y1-y0)X补=XY补83/00布斯布斯Booth乘法规则乘法规则假设X、Y都是用补码形式表示的机器数,X补和Y补=ys.y1y2yn,都是任意符号表示的数。比较法求新的部分积Pi,取决于两个比较位的数位,即yi+1yi的状态。布斯乘法规则归纳如下:首先设置附加位yn+1=0,部分积初值P0补=0。l当n0时,判断ynyn+1,若ynyn+1=00或ynyn+1=11,即相邻位相同时,上次部分积右移一位,直接得新部分积。若ynyn+1=01,上次部分积加X补,然后右移一位得新部分积。若
31、ynyn+1=10,上次部分积加-X补,然后右移一位得新部分积。l当n=0时,判断ynyn+1(对应于原乘数Y补的y0y1),运算规则00、11、01、10的处理同(n0)的情况,只是不移位。即在运算的最后一步,乘积不再右移。84/00n判断位以及操作如图:n注意:(1)比较法中不管乘数为正为负,符号位都参加运算(2)运算过程中采用变形补码(双符号位)运算(3)算法运算时的关键是ynyn+1的状态:后者(yn+1)减前者(yn),判断是加减(X补)85/00n结构原理图以及流程图86/00n举例:已知X=-0.1011Y=0.1101,用补码布斯乘法求X*Y,要求写出机器的运算步骤。n解:X补
32、=1.0101-X补=0.1011Y补=0.1101计算过程如下:nR0中为部分积R1中为乘数,ynyn+1说明00.00000 1 1 0 1 0 初值yn+1=0 P0=0ynyn+1=10,+-X补00.1011+00.1011右移1位得P1补 00.01011 0 1 1 0 1 ynyn+1=01,+X补+11.010111.1010右移1位得P2补11.11010 1 0 1 1 0+00.101100.100000.0100+00.000000.010000.0010+11.010111.01110 0 1 0 1 1 0 0 0 1 0 1 0 0 0 1 0 1 ynyn+1
33、=10,+-X补右移1位得P3补ynyn+1=11,+0右移1位得P4补ynyn+1=01,+X补最后一步不移位,得P5补87/004定点除法运算n本节内容:n4.1、原码恢复余数除法n4.2、原码加减交替法除法(逻辑结构和算法)n4.3、补码加减交替法除法(逻辑结构和算法)88/00n4.1原码定点除法n先看笔算除法的过程89/00n其特点:(1)对n位除法而言,每次上商的过程总是由心算比较余数和除数大小,如果余数大于除数,则商上1,否则商上0;(2)商的符号单独处理(3)每次减法都是都保持余数不动,低位补0,再减右移的除数。但上面的特点用计算机来处理,很不方便。90/00n1.原码恢复余数
34、除法原码恢复余数除法n(1)主要思想:被除数(或余数)先减除数,如果得到正余数,说明够减,则商上1;如果得到负余数,说明不够减,这时候应把负余数加上除数|Y|,恢复成原来的正余数,再继续运算。n(2)算法商的符号单独运算Qs=Xs Ys求|X|-|Y|,用|X|+-Y补运算,如果结果大于等于0,则说明溢出;如果结果小于0,则商的个位上0,再加|Y|恢复余数|X|;用减法比较2ri和|Y|的大小:如果2ri-|Y|0,则商上1,余数ri+1左移一位减|Y|;如果2ri-|Y|0,则商上0,加|Y|恢复余数,再左移一位减|Y|;如此循环直到得到所需的商的位数为止。给商的绝对值附上符号位Qs,得到商
35、的原码Q原。91/00n(3)举例X=0.10111101Y=-0.1101求XY的商和余数。nX原=0.10111101,Y原=1.1101-|Y|补=1.0011n被除数或余数商Q说明00.10111101作|X|-|Y|,用+-|Y|补实现+-|Y|补 11.001111.1110余数小于0,商上011010恢复余数(被除数)+|Y|补 00.110100.101111010商0移入Q,余数左移1位01.01111010减|Y|+-|Y|补 11.001100.1010余数大于0,商上110101商1移入Q,余数左移1位01.01010101减|Y|+-|Y|补 11.001100.10
36、00余数大于0,商上110111商1移入Q,余数左移1位01.00001011减|Y|+-|Y|补 11.001100.0011余数大于0,商上101011商1移入Q,余数左移1位00.01110111减|Y|+-|Y|补 11.001111.1010余数小于0,商上0商0移入Q,恢复余数00.11010111000.011192/00n2.原码加减交替法除法n(1)原码加减交替法除法与恢复余数法除法相比的特点。n(2)原码加减交替法除法规则:n当余数为正,则商上1,余数左移一位,减除数;当余数为负,则商上0,余数左移一位,加除数;n这种方法来自于“恢复余数法”,由于“恢复余数法”是正确的,下
37、面我们证明“原码加减交替法除法”也是正确的。93/00n设恢复余数法除法中各个余数的序列是r0,r1,r2.,ri-1,ri,ri+1,.n其中r0=X(初始的余数r0就是被除数X),以其中三个余数ri-1,ri,ri+1,作为代表,用类C语言描述“恢复余数法”:94/00n当把else中的语句简化后,n得:n这就是原码加减交替法的算法(用类C语言描述)。n文字描述为:n当余数为正,则商上1,余数左移一位,减除数;当余数为负,则商上0,余数左移一位,加除数;95/00n1)原码加减交替除法算法n商的符号位单独运算:qs=xs ys;n余数ri为正数时,商上1,余数左移一位减除数;当ri为负数时
38、,商上0,余数左移一位加除数,如此循环直到取得所需的n位商的绝对值。n给商的绝对值添上符号位qs即可得到Q原96/00n由上面的算法可以设计如下的逻辑结构:n2)逻辑结构原理图97/00n描述:nR1为n位寄存器,除法开始前可存放被除数X原的低n位,运算结束后存放n位的商。每次上商应置于R1的最末位,因为它是由加法器的运算结果最高位来控制的,所以由s来设置。运算过程中,商要逐位左移,故R1寄存器具有左移功能。R0保存被除数或余数,初始时保存X原的高n位,在运算中也要左移,所以它也是一个具有左移功能的寄存器。98/00n运算中被除数(余数)的低位部分由R1串行移至R0。n+1步运算后,求得n+1
39、位商,其中一位整数位,n位小数位,这n位小数位的数值存于R1寄存器中,而整数位在最后一次左移时丢掉,而商的符号Qs由Xs和Ys通过异或运算得到,所以可用一个异或门求得Qs。n见下图的运算流程图。99/00100/00n3)原码加减交替除法操作时间n为n+1步加减运算和n步左移时间101/00n2.4.2补码定点除法n1)补码应用的广泛性;n2)要解决的问题:已知被除数X补,除数Y补,X和Y都是定点小数,即|X|1,|Y|1;求商Q补=XY补,首先要确定前提:|X|Y|(?)102/00n3)补码加减交替除法n要点是:在除法过程中必须比较被除数(余数)的大小,并根据比较的结果来上商。(1)规则:
40、先判断是否溢出并得到商符号:n如果被除数X补与除数Y补同号,用X补+-Y补进行运算,得到余数r1补,如果余数r1补和除数Y补同号,则溢出,否则商上0(正号);n如果X补与Y补异号,用X补+Y补进行运算,得到余数r1补,如果余数r1补和除数Y补异号,则溢出,否则商上1(负号);n以下 两步是循环:如果余数ri补和Y补同号,商上1,ri补左移一位减Y补;如果余数ri补和Y补异号,商上0,ri补左移一位加Y补重复,连同符号位的计算共n+1步;如果采用“末位恒置1法”,则只用n步。103/00n(2)算法流程图104/00n(3)举例:已知X补=0.1011,Y补=1.0011,用补码交替除法求XY补
41、由于要用减法,所以求Y补,-Y补=0.1101n被除数或余数商数说明00.10110000X和Y异号,商的符号为负+Y补+Y补 11.001111.1110余数r1和Y补同号,商上100001r1和Q同时左移一位11.11000001+-Y补+-Y补 00.110100.1001余数r2和Y补异号,商上000010r2和Q同时左移一位01.00100010+Y补+Y补 11.001100.0101余数r2和Y补异号,商上000100r3和Q同时左移一位00.10100100+Y补+Y补 11.001111.1101余数r1和Y补同号,商上1r3和Q同时左移一位0100111.10101001商
42、的末位恒置110011105/002.5定点运算器的组成与结构nCPU=运算器+控制器,而运算器的核心部件是ALU,nA(arithmetic)是前面所学的算术运算方法:+、nL(logic)是逻辑运算,逻辑运算就是表示真与假的符号的运算,下面了解逻辑运算。106/00n2.5.1逻辑运算1、基本逻辑运算:1)逻辑非运算也称求反,只对一个数操作,对某数按位求反,1变0,0变12)逻辑加运算也称逻辑或,对两个或多个数按位进行“或”运算,00=0,01=1,11=1;3)逻辑乘运算也称逻辑与,对两个或多个数按位进行“与”运算,0 0=0,0 1=0,1 1=1;107/004)逻辑异运算也称逻辑加
43、,对两个或多个数按位进行“异或”运算,0 0=0,0 1=1,1 1=0;2、应用实例n可以在自动控制中,对开关量进行输出操作:108/00n2.5.2多功能算术/逻辑部件(了解)n1、多功能ALU的设计思想n多功能指ALU应包括算术运算,也包括逻辑运算,设已成功设计出全加器(FA),如何在此基础上再增加功能设计多功能ALU呢?n可以这样考虑:设计一个外挂模块(可以称为函数发生器),该模块定义四个控制参数s0,s1,s2,s3,这四个控制参数取不同的组合,则控制函数发生器完成不同的功能。109/00n在加法器中只考虑一位的情况,则得到右图:n由于有函数发生器,所以重新设计算术/逻辑单元:在74
44、181 ALU芯片中,使用4位控制参数s3s2s1s0,用s3s2控制Ai和Bi产生xi,用s1s0控制Ai和Bi产生yi:即:xi+yi=xi xi yi=yi110/00n芯片74181ALU见下页。这里要了解正逻辑和负逻辑;在负逻辑中,在芯片外输入低电平为负逻辑;111/00112/00113/00114/00n2.5.3运算器数据通路n1、通用寄存器、累加器和锁存器n当前的计算机系统中的CPU基本上都有通用寄存器,如Intel的CPU中的AX,BX,CX,DX等寄存器,这些寄存器是通过触发器构成的,每个触发器只保存一个位,如:115/00n而累加器也是寄存器,但使用的频度较高;n锁存器
45、也是用来保存数据的,当P=1时,D来的数据被保存到锁存器中,如果P=0,则不管D来的数据为0、1都不能影响锁存器中的数据,而同时Q可以随时输出锁存器中的数据,116/00n2.多路选择器n通过电平信号的组合控制,决定让哪一个输入信号可以通过该器件输出,在图中,s0s1G是控制信号,n如令1G=1,2G=0,s0s1=10,则只有2A的输入可以从2Y的引脚输出。117/00n3移位器n前面在乘法和除法的逻辑结构中都用到左移、右移功能,下面汇总关于移位的内容。n(1)算术移位n有算术左移、算术右移。n如下图:118/00n(2)逻辑移位n有逻辑左移、逻辑右移。n如下图:119/00n(3)循环移位
46、有循环左移、循环右移,它们各有两中方式。n如下图:120/00n4总线部件n这里主要是了解三态门,由于共用总线的部件比较多,但某个时刻只能有一个部件的数据可以在总线上传输,使用三态门控制部件的输出,由CPU的控制器发出控制“允许禁止端”的信号来决定哪一个部件可以使用总线。121/00n运算器例子通用寄存器R0R3CY进位寄存器判0逻辑用来判断ALU经过移位器输出值是否为0;122/002.6浮点运算方法和浮点运算器n计算机不仅要求能完成定点数的加减乘除,而且还要考虑实现浮点数的加减乘除。n浮点数的加减法也是在定点数的基础上实现的。n我们这里只要求了解一下浮点数的加减法。123/00n一、浮点加
47、减法运算先看一个十进制的浮点数的运算2.367104+5.6103,能否直接相加?首先,将指数统一:2.367104+0.56104,然后,指数不变,尾数相加:(2.367+0.56)104=2.927104同样,在二进制浮点数加减法中,也要进行类似的操作。124/00设有两个规格化的浮点数X=2Ex Mx,Y=2Ey My,其中Ex和Ey分别是X和Y的阶码,而Mx、My是尾数;则浮点数的运算XY需要经过四个步骤才能完成,以一个例子来说明这四个步骤:设 X=201 0.1101 Y=211(-0.1010),求X+Y数据使用补码的形式表示,运算时使用双符号位进行。1、对阶 对阶就是使两个浮点数
48、的阶码取得一致的过程。其原则是小阶向大阶看齐。其方法是两个数的阶码相减,即求阶差,阶差E=Ex-Ey,nE=0 说明 两个数的阶码相等不用对阶;nE 0 说明Ex 0 说明ExEy,需要将小阶Ey对应的尾数My 右移,每右移一位则E=E-1,直到E=0为止;125/00例:设 X=2010.1101,Y=211(-0.1010),求X+Y。两个数浮点数表示为:X浮=0001,001101 Y 浮=0011,110110E=01 11=-10 0.5,则对补码表示尾数而言,有两种情况:尾数0规格化小数形如00.1*;尾数0规格化小数形如11.0*;因此,n如果尾数是00.0*或11.1*的形式,
49、就不是规格化数,需要进行向左规格化:规则尾数左移1位,阶码减1,直到满足规格化小数的形式为止;n如果尾数是10.*或01.*的形式,也不是规格化数,需要进行向右规格化:规则尾数右移1位,阶码加1,直到满足规格化小数的形式为止;127/00n如上面结果X+Y 浮=0011,111001不是规格化小数,需要进行“向左规格化”:尾数左移1位,阶码减1,得到:X+Y 浮=0010,110010n4、舍入n在对阶时,原尾数的低位01被移出,这肯定会造成误差,为了减少这类误差,在最后要进行“舍入”处理:n舍入处理方法一般有两种:“0舍1入”法 和 “恒置1”法n“0舍1入”法-如果舍去部分的最高位为1,则最后的数据的最低位加1;如果舍去部分的最高位为0,则最后的数据的不用修正;128/00n5、检查阶码是否溢出n浮点数的溢出表现为阶码的溢出,运算后,需要检查阶码是否超出了所能表示的范围,如果超出,则设置状态寄存器的“溢出标志”位为1;129/00n附加作业:n(1)设阶码3位,尾数6位,用浮点运算方法,完成x+y,xy运算:nx=2-0110.100101y=2-010(-0.011110)n(2)查找资料,了解从8086到80586的ALU的构成、功能,优缺点以及发展历程?Intel家族的CPU中的ALU与其它厂家的CPU中ALU相比,各有什么特点?130/00
限制150内