第3章 运算方法和运算部件(2)

第3章 运算方法和运算部件(2)

ID:1511503

大小:459.50 KB

页数:35页

时间:2017-11-12

上传者:U-3149
第3章 运算方法和运算部件(2)_第1页
第3章 运算方法和运算部件(2)_第2页
第3章 运算方法和运算部件(2)_第3页
第3章 运算方法和运算部件(2)_第4页
第3章 运算方法和运算部件(2)_第5页
资源描述:

《第3章 运算方法和运算部件(2)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

3.3二进制乘法运算定点原码的一位乘法设:X=XsXnXn-1…X3X2X1Y=YsYnYn-1…Y3Y2Y1则,X×Y=(XsYs)|(XnXn-1….X3X2X1)×(YnYn-1…Y3Y2Y1)手工乘法过程:X=+1011;Y=+1101X×Y:1011被乘数(十进制数11)1101乘数(十进制数13)101100001011101110001111积(十进制数143)部分积 定点原码1位乘法器实现设置3个寄存器:部分积寄存器A,被乘数寄存器B,乘数寄存器C(部分积寄存器)和1个计数器。运算步骤:初始化:Y→CX→B0→A运算:C/2→C(取乘数的末位)B→ALU(根据C中的移出位送B或送全0)A→ALU并执行加法(部分积送ALU与被乘数相加)ALU/2→BUS(从右边移出的一位放到C的最左边)BUS→A计数器减1计数器不为0,则继续;否则结束运算,结果在A、C中。 原码一位乘法逻辑图图3.5实现原码一位乘法的逻辑电路C/2→C移位电路ALU加法器A部分积C乘数B被乘数计数器CdCnALU/2→AA→ALUB→ALU 定点原码的一位乘法实现过程例3.32:X=0.1101,Y=0.1011,求X.Y。部分积乘数被乘数:00.11010000001011+X001101001101右移1位00011011011(丢失)+X001101010011右移1位00100111101(丢失)+0000000001001右移1位00010011110(丢失)+X001101010001右移1位00100011111(丢失)乘积高位乘积低位X.Y=0.10001111 定点补码1位乘法(1)补码与真值的转换关系设[X]补=X0.X1X2•••Xn当真值X≥0时,X0=0,[X]补=0.X1X2•••Xn==X当真值X<0时,X0=1,[X]补=1.X1X2•••Xn=2+XX=[X]补-2=1.X1X2•••Xn-2=-1+0.X1X2•••Xn=-1+(2)补码的右移不论数的正负,连同符号位将数右移一位,并保持符号位不变,相当于乘1/2(或除2)。 定点补码1位乘法(3)补码一位乘法设被乘数[X]补=X0.X1X2•••Xn,乘数[Y]补=Y0.Y1Y2•••Yn,则有:[X•Y]补=[X]补•(-Y0+)当乘数Y为正时,定点补码一位乘法的运算过程与定点原码一位乘法相同。见例3.33。当乘数Y为负时,运算结束后,还需要补充进行加[-X]补操作。见例3.34。 定点补码1位乘法Booth(布斯)1位乘法规则(带符号位的乘法):[X•Y]补=[X]补•∑(Yi+1-Yi)2-i将部分积初始化为0;乘数的最低位为Yn,在其后增加一位0作为[Y]补的第n+1位;比较Yi与Yi-1;i=n+1,……,2,1:若Yi-Yi-1=1,则部分积作加[X]补运算若Yi-Yi-1=-1,则部分积作加[-X]补运算若Yi-Yi-1=0,则部分积作加0运算(加0运算可以省略)运算完成后,部分积右移1位,得到新的部分积;反复n+1次,但最后一次不移位,所得的结果即为[X×Y]补。 布斯补码1位乘法实现过程(例3.35)被乘数:X=-0.1101,乘数:Y=-0.1011[X]补=11.0011[–X]补=00.1101部分积乘数[Y]补=1.01010000001.01010初始值:最后一位补0–X00110110则–X,再右移001101右移1位00011011.01010移出去后丢掉+X11001101则+X,再右移111001右移1位111100111.0101移出去后丢掉-X00110110则-X,再右移001001右移1位0001001111.010移出去后丢掉+X11001101则+X,再右移110111右移1位11101111111.01移出去后丢掉-X00110110则-X0010001111不右移乘积高位乘积低位 定点原码2位乘法原理:两位乘数有4种可能组合,对应以下操作。00─相当于0•X,部分积为Pi+0,然后右移两位;01─相当于1•X,部分积为Pi+X,然后右移两位;10─相当于2•X,部分积为Pi+2X,然后右移两位;11─相当于3•X,部分积为Pi+3X,然后右移两位。Pi+3X用(Pi-X)+4X来替代,4X用C=1来标志,并归到下一步执行。在下一步执行时由于部分积已右移了2位,此时4X已变成了X(即4X/22=X)。实现的法则如表所示:Yn-1YnC操作000(Pi+0)×2-20→C001(Pi+X)×2-20→C010(Pi+X)×2-20→C011(Pi+2X)×2-20→C100(Pi+2X)×2-20→C101(Pi﹣X)×2-21→C110(Pi﹣X)×2-21→C111(Pi+0)×2-21→C 定点原码2位乘法实现过程例3.36假定X=0.100111,Y=0.100111则:[–X]补=11.0110012X=01.001110部分积乘数欠位C00.0000001001110(Pi–X)2–21→C–X11.01100111.011001右移两位11.1101100110011(Pi+2X)2–20→C+2X01.00111001.000100右移两位00.0100010001100(Pi+2X)2–20→C+2X01.00111001.011111右移两位00.0101111100010X×Y=0.010111110001如果最后一次操作欠下+4X,则最后一次右移2位后还需补充+X操作,+X后不再移位。 定点补码2位乘法根据布斯算法,将两步合并成一步,可推导出补码2位乘法的公式。[Pi+2]补={[Pi]补+(Yn+1+Yn-2Yn-1)[X]补}2-2。规则:当乘数由1位符号位和n(奇数)位数值位组成时,做(n+1)/2次运算,最后一次操作仅右移1位。当数值位n为偶数时,有2种方法:(1)取1位符号位,在乘数最后补一个0,使乘数的数值位成为奇数,做n/2+1次运算,最后一次操作仅右移1位。见例3.37①。(2)取2位符号位,做n/2+1次运算,最后一次不必再进行右移操作。见例3.37②。实现的法则如表所示:Yn-1YnYn+1Yn+1+Yn-2×Yn-10000001+[X]补010+[X]补011+[2X]补100+[-2X]补101+[-X]补110+[-X]补1110 定点补码2位乘法实现过程(1)例3.37①X=–0.1101Y=–0.1011[X]补=1.0011[Y]补=1.0101X取3位符号位,[X]补=111.00112[X]补=110.0110[–X]补=000.11012[–X]补=001.1010部分积乘数附加位00000001.010100100(Pi-2X)2–2+2[-X]补00110100011010右移两位0000110101.0101101(Pi-X)2–2+[-X]补00011010010011右移两位000010011101.01101(Pi–X)2–2+[-X]补00011010010001右移1位0001000111101.0乘积高位乘积低位--------[X×Y]=0.10001111 定点补码2位乘法实现过程(2)例3.37②X=–0.1101Y=–0.1011[X]补=1.0011[Y]补=1.0101取3位符号位,[X]补=111.00112[X]补=110.0110[–X]补=000.11012[–X]补=001.1010部分积乘数附加位000000011.01010010(Pi+X)2–2+X11100111110011右移两位11111001111.010010(Pi+X)2–2+X11100111101111右移两位11110111111.110110(Pi–X)2–2–X00011010001000不需右移乘积高位乘积低位[X×Y]=0.10001111 阵列乘法(快速乘法)a4a3a2a1a0b4b3b2b1b0a4b0a3b0a2b0a1b0a0b0a4b1a3b1a2b1a1b1a0b1a4b2a3b2a2b2a1b2a0b2a4b3a3b3a2b3a1b3a0b3a4b4a3b4a2b4a1b4a0b4P9p8p7p6p5p4p3p2p1p0阵列乘法器实现电路见图3.7返回 3.4二进制除法运算X=0.1011,Y=0.1101,求X/Y0.1101110110110110110010110110100X/Y=0.11011101余数=0.0111x2-40111商的符号为0(正) 原码1位恢复余数除法设:X=XsXnXn-1…X3X2X1Y=YsYnYn-1…Y3Y2Y1则X/Y=(XsYs)|(XnXn-1….X3X2X1)/(YnYn-1…Y3Y2Y1)规则:商的符号位独立运算;1.比较被除数X与除数Y的大小,若|X|≥|Y|,则溢出,否则继续。2.被除数(余数)左移1位,与除数Y相减,若余数大于等于0,则商上1;若余数小于0,则商上0,先恢复余数;重复上述2步过程n+1次(除数的尾数位数+符号位数),得到商及余数。最后一次不移位。 例3.38例3.38X=0.1011,Y=0.1101,求X/Y。解:[-Y]补=11.0011,取双符号位,-Y用+[-Y]补取代。被除数(余数)商操作说明00101100000初始值+110011+[-Y]补11111000000不够减,商上0+001101+Y,恢复余数00101101011000000余数与商左移一位+110011+[-Y]补00100100001够减,商上101001000010余数与商左移一位+110011+[-Y]补00010100011够减,商上100101000110余数与商左移一位+110011+[-Y]补11110100110不够减,商上0+001101+Y,恢复余数00101001010001100余数与商左移一位+110011+[-Y]补00011101101够减,商上1余数商 原码1位不恢复除法原码1位恢复余数除法的缺点是:当某一次减Y的差值为负时,要多一次加Y恢复余数的操作,降低了执行速度,又使控制电路变得复杂,因此在计算机很少采用。计算机中普遍采用的是不恢复余数的除法方案,又称为加减交替除法。在恢复余数的除法中,第i-1次求商后下一步余数:Ri=2Ri-1-Y(R0=X)若Ri<0,则第i位商上0,且恢复余数(Ri+Y),并求Ri+1,下一步的余数为:Ri+1=2(Ri+Y)-Y=2Ri+Y所以可得出加减交替法的规则如下:当余数为正时,商上1,求下一位商的办法是余数左移一位(乘2)再减去除数;当余数为负时,商上0,求下一位商的办法是余数左移一位(乘2)再加上除数。若最后一步不够减,则仍需作恢复余数处理。举例见例3.39。 例3.39例3.39X=0.1011,Y=0.1101,用加减交替法求X/Y。解:[-Y]补=11.0011,取双符号位,-Y用+[-Y]补取代。被除数(余数)商操作说明00101100000初始值-Y110011+[-Y]补11111000000不够减,商上011110000000左移一位+Y001101+Y00100100001够减,商上101001000010左移一位-Y110011+[-Y]补00010100011够减,商上100101000110左移一位-Y110011+[-Y]补11110100110不够减,商上011101001100左移一位+Y001101+Y00011101101够减,商上1余数商 补码1位加减交替除法含符号位一起参与运算规则:第一步是求商的符号位,以后的步骤是求商的值。商的最后一位一般采用恒置1的办法。[X]补[Y]的数符第一步操作[R]补[Y]的数符上商下一步操作(共n步)同号12[R]补﹣[Y]补同号被除数减去除数异号02[R]补+[Y]补同号12[R]补﹣[Y]补异号被除数加上除数异号02[R]补+[Y]补补补 补码1位加减交替除法的实现方法一:严格按照上述表中的操作进行,但机器实现时,第一步操作与其余的操作不一致,控制稍微复杂一些。(例3.40)方法二:改进表中的操作一开始就将被除数X作为初始余数[R0]补,如[R0]补与[Y]补同号,商上1;如异号,商上0。但是,如果商为负,则要在最低位加1修正。(例3.42) 补码1位加减交替除法举例(例3.40)[X]补=1.0111[Y]补=0.1101[–Y]补=11.0011被除数(余数)商操作说明11011100000开始情形+001101两数异号,+[Y]补00010000001余数与除数同号,上商1←00100000010左移–110011上次商1,+[–Y]补11101100010余数与除数异号,上商0←11011000100左移+001101上次商0,+[Y]补00001100101余数与除数同号,上商1←00011001010左移–110011上次商1,+[–Y]补11100101010余数与除数异号,上商0←11001010101左移,商的最低位恒置1[X/Y]补=1.0101 提高除法运算速度的方法1.跳0跳1除法规则(1)如果R≥0,且R的高K个数位均为0,则本次直接得商1,后跟K-1个0。R左移K位后,减去除数Y,得新余数。(2)如果R<0,且R的高K个数位均为1,则本次商为0,后跟K-1个1。R左移K位后,加上除数Y,得新余数。(3)不满足上述规则(1)和(2)中条件时,按一位除法上商。(例3.43) 提高除法运算速度的方法2.除法运算通过乘法操作来实现X/Y=X•F0•F1…Fr/(Y•F0•F1…Fr)式中Fi(0≤i≤r)为迭代系数,如果迭代几次后,可以使分母Y•F0•F1…Fr1,则分子即为商。其中:δ=1–Y,第一次F0=1+δ,以后Fi=2-Yi-1。例3.44:X=0.1000Y=0.1011=0.0101,F0=1+δ=1.0101X0/Y0=(X*F0)/(Y*F0)=(0.1000*1.0101)/(0.1011*1.0101)=0.1011/0.1110F1=2–Y0=2–0.1110=1.0010X1/Y1=(X0*F1)/(Y0*F1)=(0.1011*1.0010)/(0.1110*1.0010)=0.1100/0.1111返回 3.5浮点数的运算方法浮点数的加减法运算设X=Mx•2Ex,Y=My•2Ey,求X±Y=?规则:(流程见图3.8)对阶:E=Ex-Ey;小阶向大阶看齐。实现尾数的加(减)运算。规格化处理如果结果的两个符号位的值不同,表示运算尾数结果溢出,应“右规”,即尾数结果右移一位,阶码+1。如果最高数值位与符号位相同,应“左规”,此时尾数连续左移,直到最高数值位与符号位的值不同为止;同时从阶码中减去移位的位数。舍入处理。检查是否溢出。 浮点数的加、减运算举例X=2010•0.11011011,Y=2100•(-0.10101100)计算过程:①对阶操作:阶差△E=[Ex]补+[-Ey]补=00010+11100=11110X阶码小,Mx右移2位,保留阶码E=00100[Mx]补=000011011011②尾数相加:[Mx]补+[My]补=000011011011+1101010100=111000101011③规格化操作:左规,移一位,结果=110001010110阶码减1,E=00011④舍入:附加位最高位为1,在结果的最低位+1,得新结果[M]补=1100010110,M=-0.11101010⑤判溢出:阶符为00,不溢出,最终结果为X+Y=2011·(-0.11101010) 浮点乘法运算方法X*Y=(Mx*My)*2(Ex+Ey)规则:检测操作数是否为0,若其中有一个操作数为0,则置结果为0;阶码相加,阶符相同的加可能会溢出,若溢出,则作溢出处理;(阶码一般是移码)尾数相乘;尾数乘积规格化,只有左规.舍入截断处理:无条件地丢掉正常尾数最低位之后的全部数值舍入处理:运算过程中保留右移中移出的若干高位的值,然而再按某种规则用这些位上的值修正尾数判溢出 浮点乘法运算举例(例3.47)X=2-5•0.1110011,Y=23•(-0.1110010)计算过程①求乘积的阶码:[Ex+Ey]移=[Ex]移+[Ey]补=00011+00011=00110②尾数相乘:[X·Y]补=1.00110011001010(尾数部分)③规格化处理:本例已规格化不需再处理④舍入:积的低位部分最高位为1,据0舍1入,给积的高位部分的最低位加1,因此[X·Y]补=1.0011010(尾数部分)⑤判溢出:阶码未溢出 浮点数的舍入处理截断处理:无条件地丢掉正常尾数最低位之后的全部数值舍入处理:最低位恒置1除非最低位与移出位均为0,否则最低位置10舍1入:丢失的最高位为1时,最低位置1例:[X]原=0.11011舍入后[X]原=0.1110[X]原=0.11100舍入后[X]原=0.1110[X]补=1.00101舍入后[X]补=1.0011[X]补=1.00100舍入后[X]补=1.0010 运算精度考虑保护位+/-+/-保护位使运算精度提高舍入(round):就近舍入:结果被舍入成最近的可表示的数朝+舍入:结果向正无穷大方向取舍;朝-舍入:结果向负无穷大方向取舍;朝0舍入:结果朝0取舍。 阶码的底为8或16的浮点数乘法运算IBM的计算机中阶码的底为8或16即:设X=Mx*8Ex,Y=My*8Ey;或:设X=Mx*16Ex,Y=My*16Ey。当阶码以8为底时尾数满足1/8≦M<1或–1≦M<-1/8就是规格化数。规格化操作时,阶码的值增1或减1,尾数要相应右移或左移3位。当阶码以16为底时尾数满足1/16≦M<1或–1≦M<-1/16就是规格化数。规格化操作时,阶码的值增1或减1,尾数要相应右移或左移4位。 浮点除法运算方法X/Y=(Mx/My)*2(Ex-Ey)规则:检测操作数是否为0,并置结果数符若被除数为0,则商为0;若除数为0,则置溢出;尾数调整,使得|Mx|<|My|被除数阶码减除数阶码被除数尾数除以除数尾数结果规格化(舍入)判断是否溢出 作业Page113:19,21,23,25以32位单精度浮点格式表示下面各数(尾数用补码,阶码用移码,尾数要求规格化):-5;-1.5;384;1/16;-1/32返回 返回 返回

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭