1、第3章 运算方法与实现 电路,本章主要内容:,本章主要讨论各种数据类型的二进制表示以及不同数制之间的相互转换。主要介绍数据的表示方法,包括定点数表示、浮点数表示、自定义表示方法,重点介绍浮点数表示,包括表数范围、表数精度、表数效率及浮点数的设计。简单介绍常用的校验编码。主要讲解定点数的加、减、乘、除运算及实现技术,最后讨论浮点运算方法及加法器的构成。,3.1 计算机中数据的表示与数制之间的转换 3.2 机器数的编码表示及加减运算 3.3 二进制乘除法运算 3.4 浮点数的运算方法 3.5 浮点数设计 3.6 数据校验码 3.7 高级数据表示,3.1 计算机中数据的表示与数制之间的转换,3.1.
2、1 计算机中数据的表示方法与转换 1数值型数据的表示一般的,若有m位r进制无符号数am-1am-2a2a1a0, 则它的值为:,2不同数制间的转换(1)二、八、十六进制数之间的转换八、十六进制数都是由二进制数演变而来的,由 3位二进制数构成一个八进制数,由4位二进制数构 成一位十六进制数。对于有整数和小数部分的数来 说,以小数点为界限,对小数点前后的两部分分别 进行处理,不足的部分用0补上,对于整数部分0补 在最左侧,对于小数部分0补在最右侧,这样数值 不会发生变化。,若将八、十六进制转换成二进制时,只要把每一 位对应写成3位、4位二进制即可。,例3-5(10 0101.1001)2=(001
3、0 0101. 1001)2=(25.9)16例3-6(12.5)8=(001 010.101)2=(1010.101)2例3-7(2A.3)16=(0010 1010.0011)2=(101010.011)2,(2)十进制数转换成二进制数进行转换时,通常是将数的整数部分与小数部分 分别转换,然后再合并。对整数部分一般采用除2取余法,转换规则如下: 将十进制整数除以2,所得的余数(0或1)即为对应二 进制数最低位的值。然后对上次所得到的商再除以 2,所得到的余数即为二进制数次低位的值,依次进 行下去,直到商等于0为止,最后得到的余数是二进 制数的最高位的值。,而对于小数部分,一般采用乘2取整法
4、,其转换 规则如下:将十进制小数乘以2,所得到的积的整数 部分即为对应的二进制小数的最高位的值,然后对 所余下的小数部分再乘以2,所得到的积的整数部分 即为对应的二进制小数的次高位的值,依次进行下 去,直到乘积的小数部分为0,或结果已经满足所需 要的精度要求为止。,3.1.2 十进制数的编码与运算,1有权码有权码指的是表示一位十进制的二进制码 的每一位有确定的权值。,例3-10 用BCD码求57+14=?,首先将两数用BCD码表示为: 0101 0111+0001 0100其相加结果如下。,2无权码无权码是指表示一个十进制数位的二进 制码的每一位没有确定的权。,例3-11 (36)10+(27
5、)10= (63)10 采用余3码进行运算的过程为:,3.2 机器数的编码表示及 加减运算,3.2.1 机器数的编码表示 1原码表示法数的符号用一位数码表示, 0表示正号,1表示 负号,其余的数位与数值本身相同。 例如,N1=+1001011,N2=0.1011011其原码为 N1原=+1001011原=01001011N2原=0.1011011原=11011011,设数X=0.x1x2xn,它的定点小数原码可定义为:,X 0X1X原= 1X=1+|X| 1X0,Y 0Y2nX原=2nX=2n+|Y| 2nY0,设数Y=y1y2yn,它的定点整数原码可定义为:,原码小数表示的范围为:(12n)
6、到 (12n)原码整数表示的范围为:(2n1)到 (2n1),2补码表示法 (1)补码 正数的补码正数的补码就是它本身,即正数的补码与原 码相同。 负数的补码负数的补码是另外的一个码值,是模的补。,X 0X1X补= 2+X=2|X| 1X02n+1|X| X 0的整数0的补码:我们知道,0的原码有正0与负0之 分,而0的补码只有一个,即0.0000。,根据上面的分析,我们可以得到补码的计算公式:, 数的补码表示与其真值之间的关系正数即原码,符号位为0; 负数补码为原码的“取反加1”(符 号位为1)。,3反码表示法机器码的最高位为符号位,0表示正数,1表示 负数。反码的定义如下:X 0X1X反=
7、 X+22n 1X0即:X反=(2n) 符号位+X mod(22n),其 中,n为小数点后的有效位数。,4移码表示法当阶码由1位符号位和n位数据组成时,其移 码的定义为:X移=2n+X 2nX2n 按此定义,则有X移+Y移=2n+X+2n+Y=2n+(2n+(X+Y)=2n+X+Y移,3.2.2 定点数加减运算,当补码加减运算的结果不超出机器范围时,有 以下的运算规则: (1)参加运算的两个操作数均用补码表示。 (2)符号位作为数的一部分参加运算。 (3)求差时将减数求补,用求和代替求差。 (4)运算结果为补码。 (5)符号位的进位为模值,应该丢掉。,1补码加法运算X补+Y补=X+Y补,例3-
8、12 已知X=+0.10011, Y=+0.01001, 求X+Y。解 X补+Y补=0.10011+0.01001=0.11100X+Y补=0.10011+0.01001补 =0.11100这里X和Y均为正数,得到X补+Y补=X+Y 补,符合补码加法规律。,例3-13 已知X=0.10011,Y=+0.10001, 求X+Y。解 X补=1.01101 Y补=0.10001X补+Y补=1.01101+0.10001=1.11110X+Y补=0.10011+0.10001补 =0.00010补=1.11110这里X和Y为一负一正,同样得到X补+Y补=X+Y补。,2补码的减法运算XY补X(Y)补X补
9、Y补 已知Y补,求Y补的方法是:对Y补 各位(包括符号位)取反,然后在末位加上1, 就可以得到Y补。,例3-15 已知X=0.11001,Y=0.10011, 求XY。解 X补=0.11001 Y补=0.10011 则Y补=1.01101XY补=X补+Y补=0.11001+1.01101=10.00110,3. 补码定点加减运算的实现,3.2.3 定点数加减运算溢出 的处理,当运算结果超出机器数所能表示的范围时,称为 溢出。很显然,若两个异号数相加或两个同号数相 减时,其结果是不会产生溢出的。仅当两个同号数 相加或异号数相减时才有可能产生溢出,一旦产生 溢出,则结果就是不正确的。判断溢出的方法
10、如下:,1.当符号相同的两个数相加时,如果结果的1符号与 加数(或加数)符号不同,则说明溢出。即溢出条件 为:,图3-2 判溢出逻辑图,2.当任意符号两数相加时,如果CCf,则运算结果 正确,C表示数值最高位产生的进位,Cf表示进位位 产生的进位。如果CCf,则为溢出。由此得出溢出 条件为:,图3-3 判溢出逻辑图,3.采用双符号位fS2fS1。正数的双符号位为00,负数 的为11。符号位参与运算,运算结果的符号位为高符 号位fS2当结果的两个符号位不同时,说明溢出。溢出 条件:或者溢出条件为:,图3-4 判溢出逻辑图,3.3 二进制乘除法运算,3.3.1 二进制乘法运算 1定点数一位乘法 (
11、1)定点原码一位乘法两个原码数相乘,其乘积的符号为相乘两数的异 或值,数值为两数绝对值之积。方法:每次按乘数每1位上的值是1还是0,决定相 加数取被乘数的值还是取零值,而且相加数逐次向 左偏移1位,最后一起求和。,(2)定点补码一位乘法补码与真值的转换关系设X补=可得出对正负数都合适的公式,补码的右移在补码运算的机器中,不论数的正负,连同符号 位将数右移一位,并保持符号位不变,相当于乘 1/2(或除2)。,补码一位乘法设被乘数X补=乘数Y补= 则有:XY补=X补补码一位乘法举例如下。,例320 X= -0.1011,Y=0.0111,X补=11.0101,Y补=0.0111,Y为正时,求XY补
12、。解:采用双符号位,结果XY补=1.10110011。,2定点数两位乘法按乘数每两位的取值情况,一次求出对应于该两 位的部分积。(1)原码两位乘即乘数与被乘数均用原码表示。两位乘数的可能组合及对应操作如下:00相当于0X, 部分积Pi右移2位,不进行 其他运算。01相当于1X ,部分积Pi+X,右移2位。10相当于2X ,部分积Pi+2X,右移2位。11相当于3X ,部分积Pi+2X,右移2位。,以(4X-X)来代替3X运算,在本次运算中只执行 -X,而+4X则当并到下一步执行,此时部分积已右 移了两位,上一步欠下的+4X已变成+X,在实现 时用一个触发器C来记录是否欠下+4X,若是,则 1C
13、。定点原码运算规则如表3-5所示。,实际操作用Yi-1,Yi,C三位来控制。,表 3-5 定点原码运算规则表,例323 X=-0.1011,Y=0.1010,求XY 。 解:X=00.1011,2X=01.0110,X补=11.0101,-X补=00.1011,-X用+-X补 取代。,若最后一次操作欠下+4X,则最后一次右移2位后还需要补充+X操作,+X后不再移位。,(2)补码两位乘产生可部分积Pi补之后,可加上乘数寄存器, 最低两位和附加位(共三位)的组合值与X补的积, 再右移两位,便可得到Pi+2补。 三位组合值为:Yn-i+1+Yn-i-2Yn-i1,它们的初始 位置依次为:附加位Yn+
14、1,第n位Yn和第n-1位 Yn-1。三位共有8种组合值及其对应操作,如表3-6所 示。,表 36组合值Yn-i +1+ Yn-i -2Yn-i 1与Pi+2补的关系,在执行补码两位乘过程中有5种操作,即: Pi补+0,Pi补+X补,Pi补+-X补,Pi补+2X补, Pi补+2-X补。,求部分积的次数和右移操作的控制问题。若乘数 由1位符号位和n(奇数)位数据位组成时,求部分积 的次数为 ,而最后一次的右移操作只右移一 位。若数值位本身为偶数n,则可采用以下两种方 法之一。 可在乘数的最后一位补一个0,使之变成奇数, 且其值不变。求部分积的次数为1+即,最后一次右 移也只移1位。 乘数增加一位
15、符号位,使总数仍为偶数,求部分 积的次数为,且最后一次不再执行右移。,3.3.2 二进制除法运算,1定点原码一位除法定点原码一位除法一般有两种方法:恢复余数法 和加减交替法。 两个原码数相除,商的符号为两数符号的异或 值,数值则为两数绝对值相除后的结果。,(1)恢复余数法上商0还是1,用做减法判结果的符号为负还是正 来确定。当差为负时,上商0,同时还应把除数再加 到差上去,恢复余数为原来的正值之后再将其左移 一位。若减得的差为0或为正值时,就没有恢复余数 的操作。上商为1,余数左移一位。,例325 X=-0.1011,Y=0.1101,求XY。 解:-Y补=11.0011,商的符号为101,结
16、果XY1.1101,余数 0.011124。,(2)加减交替法(不恢复余数法)当余数为正时,商上1,求下一位商的办法,是 余数左移一位,再减去除数;当余数为负时,商上 0,求下一位商的办法,是余数左移一位,再加上除 数。但若最后一次上商为0而又需得到正确余数,则 在这最后一次仍需恢复余数。,例326 X=-0.1011,Y=0.1101,求XY。 解: -Y补=11.0011,商的符号为101,结果XY1.1101,余数0.011124。,注:对定点小数除法,首先要比较除数和 被除数的绝对值大小,检查是否出现商溢 出。 商的符号为相除两数符合半加和。 运算过程中,放被除数和商的寄存器同时 移动
17、。,2.提高除法运算速度的方法跳0跳1除法跳0跳1除法规则是: (1)如果余数R0且R的高k个数位均为0,则本次 直接商1,后跟k1个0。R左移k位后,减去除数Y得 新余数。 (2)如果余数R0,且R的高k位个数位均为1,则 本次商为0,后跟k1个1,R左移k位后,加上除数 Y,得新的余数。 (3)不满足上述规则和中条件时,按一位除 法上商。,3.4 浮点数的运算方法,3.4.1 浮点数的加减法运算,设有两浮点数X,Y,实现XY运算,其中 X=MX.,Y=MY .,按以下5步来进行:,1.“对阶”操作先比较两浮点数阶码大小,求出其差值E,并保 留其大值E,E=max(EX,EY);当E0时,将
18、阶码小的数的尾数右移E位,并 将其阶码值加E。使两数的阶码值相等,此操作称 为“对阶”。尾数右移时注意:若其以原码表示,符号位不参 加移位,尾数值部分的高位补0,若其以补码形式表 示,符号位参加右移,并保持原符号位不变。,2.尾数的加/减运算在对阶以后,执行两尾数的加/减运算,得到两 数之和/差。3.规格化操作即当运算结果不是规格化数时要进行左规、右 规。,注意:原码与补码表示时,规格化的不同。理解其规则:双符号位的原码规格化尾数其值最高位为1,补码规格化形式为00.1; 11.0(表示0;1任意),4.舍入 在右规和对阶时,尾数低位上的数值会移掉,使其精度受到影响。常用“0”舍“1”入法。,
19、5.检查阶码是否溢出阶码溢出表示浮点数溢出。在规格化和舍入时都可能发生,若阶码正常, 则加/减运算正常结束。若阶码下溢,则置运算结果 为机器零,若上溢则置溢出标志。,例329 X=20100.11011011,Y=2100(-0.10101100),求X+Y。 解:X,Y在机器内,采用双符号位,补码表示,过程如下:,1.“对阶”E=EX补+ -EY补=00010+11100=11110X阶码小,MX右移2位 保留阶码E=00100MX补=000011011011,被移出去的,保留的附加 位。 2.尾数相加MX补+MY补=000011011011+1101010100=111000101011
20、3.规格化操作左规:左移1位,结果为110001010110,阶码减 1。即 E-1=00011,4.舍入附加位最高位为1,所以结果最低位加1, 得新的结果M补=1100010110,M=-0.11101010 5.判溢出阶码符号位为00,故不溢出,所以 X+Y=2011(-0.11101010),3.4.2 浮点数的乘除法运算,1浮点数的阶码运算 (1) 移码运算直接用移码实现求阶码之和时,结果最高位多加 了个1,要得到移码形式的结果,需将结果符号位取 反。而根据补码移码的关系又可得: X+Y移=X移+Y补,同理,X移+-Y补=X-Y移。也 就是说:执行移码加或减时,取加数或减数符号位 反码
21、进行运算。,(2)判断溢出使用双符号位的阶码加法器,并规定移码的第二 个符号位,即最高符号位恒用0参加加减运算,则溢 出条件是:结果的最高符号位为1,此时,当低位符号位为0 时,表明结果上溢,为1时,表明结果下溢。当最高 符号位为0时,表明没有溢出,低位符号为1,表明 结果为正,为0时,表明结果为负。,举例,见3.4.2节例3-30。,2. 浮点数的舍入处理尾数位数确定,而运算后,可能超出给定的位 数。一般我们采用下面两种比较简单易于实现的处 理方法。(1)截断处理(恒舍法); (2)舍入处理,3浮点乘法运算步骤(1)求乘积的阶码。即两数阶码之和。 (2)尾数相乘。 (3)规格化处理。 (4)
22、舍入(一般0舍1入法)。 (5)判断溢出(判断阶码是否溢出)。,举例,见3.4.2节例3.32。,3.5 浮点数设计,定点小数缺点: (1)编程困难 (2)表数范围小 (3)数据存储单元的利用率低,3.5.1 浮点数的表示格式,一个浮点数N可以用以下的方式表示:,1 1 q p,浮点数在计算机内的表示一般采用以下形式:,其中mf为尾数的符号位,ef为阶码的符号 位,e为阶码的值,m为尾数的值,re为阶码 的基。p为尾数长度 ,q就是阶码部分的二进 制位数。注意:这里给出的p、q均不包括符号位。,3.5.2 浮点数的表示范围,表3-10 尾数用原码、纯小数时规格化浮点数的表数范围,3.5.3 浮
23、点数的表数精度,绝对表数误差(absolute representation error)为:=MN,表数精度也称作表数误差。浮点数集F的表数误差可以这样定义,令N是浮点 数集F内的任一给定实数,而M是F中最接近N,且被 用来代替N的浮点数,则 相对表数误差(relative representation error) 为: =,表3-11 一种浮点数表示方式所能表示的全部浮点数,一般情况下,规格化浮点数的表数精度可以表示 如下:,3.5.4 浮点数的表数效率,浮点数表示方式的表数效率问题定义为:,最后经过化简得:,从式中可以看出,浮点数的表数效率主要与尾数的基值有关。当尾数的基值为2时,浮点
24、数的表数效率为:,3.5.5 浮点数的尾数基值的选择,由浮点数表数范围绝对值,最大浮点数范围的绝对值可以近似表示为:,结论1:在浮点数的字长和表数范围一定时,尾数基 值rm取2或4具有最高的表数精度。结论2:在浮点数的字长和表数精度一定时,尾数基 值rm取2或4具有最大的表数范围。综合以上两个结论,得到以下推论:在浮点数的字 长确定以后,尾数基值rm取2或4具有最大的表数范 围和最高的表数精度。,3.5.6 浮点数格式的设计,1.尾数m的数制和码制一般采用小数、原码表示。2.阶码e的数制和码制一般采用整数、移码表示。,3.尾数基值rm在浮点数总字长确定的情况下,尾数基值rm取 2,浮点数表数范
25、围最大,表数精度最高,若再采用 隐藏位表示方法,则同时表数效率最优。4.阶码基值re一般浮点数的阶码基值re取2。,假设浮点数尾数用原码、小数表示,阶码用移 码、整数表示,尾数基值rm2,阶码基值re2, 浮点数的表数范围不小于正数N,表数精度不低于 ,并且要求尾数和阶码正负对称。那么, 5.尾数字长p6.阶码字长q,例336 设计一种浮点数格式,要求表数范围为 10-371037,表数精度不低于10-16,尾数和阶码都正 负对称。 解:根据表数范围要求,得:,取得阶码字长q7。根据表数精度要求,得:,取得尾数字长p54。浮点数总字长为:pq2547263,可以在尾数字长p中增加1位提高浮点数
26、的表数精 度(也可以在阶码字长q中增加1位提高浮点数的表数 范围),浮点数的总字长为64位,是8的整数倍。最 后得到的浮点数格式如图3-12所示,尾数55位,阶 码7位。,图3-12 一种浮点数表示方式,3.5.7 浮点数尾数的下溢处理 方法,1.截断法 2.舍入法 3.恒置“1”法 4.查表舍入法,3.6 数据校验码,数据校验码是一种常用的带有发现某些错误或自 动改错能力的数据编码方法。 它的实现原理是加入一些冗余码,使合法数据编 码出现某些错误时,就成为非法编码。由此就可以 通过检测编码的合法性来达到发现错误的目的。码距是根据任意两个合法码之间至少有几个二进 制位不同而确定的。,3.6.1
27、 奇偶校验码,奇偶校验码是应用最广泛的一种检错码,是一种 开销最小,能发现数据代码中一位出错情况的编码。 它的实现原理是:使得码距由1增加到2。若编码中有 一个二进制位的值出错了,由1变成0或由0变成1,这 个码都将变成非法编码。采用这种方案只能发现一位错或奇数个位错,但是 不能确定是哪一位错,也不能发现偶数个位错,不能 纠错。,下面以表3-13位例来说明8位数据的奇偶校验编 码。表3-13 8位奇偶校验码编码其中校验码中的最高位为校验位,其余8位为数 据位。从中可以看到,校验位的值取1或0取决于 数据位中1的个数。,3.6.2 海明校验码,它的实现原理是在数据中加入几个校验 位,并将数据的每
28、一个二进制位分配在几个 奇偶校验组中。当一位出错后,就会引起有 关的几个校验组的值发生变化,这样,不仅 可以发现错误,还能指出是哪一位出错,为 自动纠错提供了依据。,假设校验位的个数为n位,信息位的个数为k,则 要满足关系:2nkr1。如果能检测并能自动校正一位错,并发现两位 错,此时校验位的位数n和数据位的位数k应满足关 系:2n-1kr。,3.6.3 循环冗余校验码,CRC码可以发现并纠正信息存储或传送过程 中连续出现的多位错误。1CRC码的编码方法CRC码是指k位信息码之后组合r位校验码, 结果可以得到一个多项式。,2CRC的译码及纠错将收到的循环校验码用约定的生成多项式 G(x)去除,
29、如果余数为0,则说明码字正确, 如果有一位出错,则余数就不会是0,不同位 数出错则余数就不同。且余数与出错位的对 应关系是不变的,只与生成多项式和码制有 关。,3生成多项式的选择生成多项式应满足以下要求:(1)任何一位发生错误,都必须使余数不为 0;(2)不同的位出现错误,应使余数也不同;(3)对余数继续作模2运算,应使得余数循 环。,3.7 高级数据表示,3.7.1 自定义数据表示 1带标志符的数据表示法,图3-13 带标志符的数据表示方式,2位 2位 1位 4位 1位,图3-14 R-2计算机中带标志符的数据表示方式,10位标志符,(1)简化了指令系统和程序设计。 (2)便于实现一致性校验。 (3)简化了编译程序。 (4)支持了数据库系统的实现与数据类型无关的要 求。 (5)能由硬件自动完成数据类型的变换。 (6)方便软件调试。,标识符数据表示的主要优点有以下几个方面。,2数据描述符表示法,描述符,(a)数据描述符,(b)数据图3-16 D-6700机数据表示方式,数据,3.7.2 向量数组数据表示3.7.3 堆栈数据表示3.7.4 引入数据表示的原则,