《运算方法与运算部件08本.ppt》由会员分享,可在线阅读,更多相关《运算方法与运算部件08本.ppt(146页珍藏版)》请在三一办公上搜索。
1、计算机组成原理,第三章 运算方法与运算部件,计算机中完成运算的主要部件就是CPU中的算术逻辑运算单元ALU计算机的运算可以分为:数值运算和非数值运算 数值运算的基础是定点与浮点,其中以加法为核心,1.定点加减运算,一、补码加减运算计算机中,常用补码进行加减运算。补码可将减法变加法进行运算。补码运算特点:符号位与数值位一同运算。运算的基本规则:X补+Y补=X+Y补 X-Y补=X补-Y补=X补+-Y补 由Y补求得-Y补 的方法:对Y补(包含符号位)求反且末位加1。,1.X补+Y补=2 X0+X+2 Y0+Y=2(X0+Y0)+(X+Y)(1)若X0Y0=00,则 X补+Y补=X+Y=X+Y补;(2
2、)若X0Y0=01或10,则 X补+Y补=2+(X+Y)当X+Y0时,2+(X+Y)2,进位丢失,得:X补+Y补=X+Y=X+Y补;当X+Y X+Y-1,2 2+(X+Y)1此时,X补+Y补=2+(X+Y)=X+Y补(2自然丢失),在模2下,设X补=X0X1X2 Xn,Y补=Y0Y1Y2 Yn 则X补=2 X0+X,Y补=2 Y0+Y,证明:,2、X补+Y补=X+Y补 Y补=X+Y补-X补 又X-Y补=X+(-Y)补=X补+-Y补-Y补=X-Y补-X补+得:Y补+-Y补=X+Y补-X补+X-Y补-X补=X+Y+X-Y补-X补-X补=X+X补-X补-X补=0-Y补=-Y补 即 X-Y补=X补+-
3、Y补=X补-Y补,例1:已知机器字长n=8,X=44,Y=53,求X+Y=?,解:X原=00101100,Y原=00110101 X补=00101100,Y补=00110101 X补=0 0 1 0 1 1 0 0+Y补=0 0 1 1 0 1 0 1 X+Y补=0 1 1 0 0 0 0 1,真值:X+Y=(+1100001)2=+97,例2:已知机器字长n=8,X=-44,Y=-53,求X+Y=?,解:44补=00101100,53补=00110101X补=-44补=11010011+1=11010100,Y补=-53补=11001010+1=11001011 X补=1 1 0 1 0 1
4、 0 0+Y补=1 1 0 0 1 0 1 1 X+Y补=1 1 0 0 1 1 1 1 1 超出8位,舍弃模值 X+Y=(-1100001)2=-97,例3:已知机器字长n=8,X=0.1101,Y=0.0110,求X-Y=?,解:X补=0.1101000,Y补=0.0110000,-Y补=1.1010000 X补=0.1 1 0 1 0 0 0+-Y补=1.1 0 1 0 0 0 0 1 0.0 1 1 1 0 0 0 自然丢失X-Y补=(0.0111000)2,X-Y=(0.0111)2,例4:已知机器字长n=8,X=-0.1101,Y=-0.0110求X-Y=?,解:X补=1.0011
5、000,Y补=1.1010000-Y补=0.0110000 X补=1.0 0 1 1 0 0 0+-Y补=0.0 1 1 0 0 0 0 1.1 0 0 1 0 0 0 X-Y补=(1.1 0 0 1 0 0 0)2,X-Y=(-0.0 1 1 1)2,2.溢出的检测,溢出:运算结果超出了计算机所能表示的数据范围。正溢(上溢):运算结果为正而绝对值超出了表示的范围。负溢(下溢):运算结果为负而绝对值超出了表示的范围。定点数的溢出根据数值本身判断。,例:已知机器字长n=8,X=120,Y=10,求X+Y=?,解:X补=01111000,Y补=00001010,X补=0 1 1 1 1 0 0 0
6、+Y补=0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 X+Y补=10000010,X+Y=11111110 X+Y的真值=-1111110=(-126)10 运算结果超出机器数值范围发生溢出错误。8位计算机数值表达范围:(-128+127),溢出判断规则与判断方法,两个相同符号数相加,其运算结果符号与被加数相反则产生溢出;两个相异符号数相减,其运算结果符号与被减数相反则产生溢出。相同符号数相减,相异符号数相加不会产生溢出。溢出判断方法:进位判断法,双符号位法。,(1)进位溢出判断法 SC,两单符号位的补码进行加减运算时,若最高数值位向符号位的进位值C与符号位产生的进位输出值S
7、相同时则无溢出,否则溢出。例:X补=1.101 X补=1.110+Y补=1.001+Y补=0.100 X+Y补=10.110 X+Y补=10.010 C=0,S=1 有溢出 C=1,S=1 无溢出 X+Y=+0.010即:溢出 OVR=SC=1 有溢出 S C=01 正溢;S C=10 负溢 OVR=SC=0 无溢出,(2)双符号位(变形补码)溢出判断法,设第一符号位Sf1,第二符号位Sf2,Sf1 Sf2双符号含义:0 0 表示运算结果为正数;0 1 表示运算结果正向溢出;1 0 表示运算结果负向溢出;1 1 表示运算结果为负数。即:溢出 OVR=Sf1Sf2=1 有溢出 OVR=Sf1Sf
8、2=0 无溢出 左边第一位的Sf1为运算结果的真正符号位。,例1:X=0.1001,Y=0.0101,求X+Y,解:X补=00.1001+Y补=00.0101 X+Y补=00.1110两个符号位相同,运算结果无溢出。X+Y=+0.1110,例2:X=-0.1001,Y=-0.0101,求 X+Y=?,解:X补=11.0111+Y补=11.1011 X+Y补=1 11.0010 丢掉两个符号位相同,运算结果无溢出。X+Y=-0.1110,例3:X=0.1011,Y=0.0111,求 X+Y补=?,解:X补=00.1011+Y补=00.0111 X+Y补=01.0010两个符号位为01,运算结果正
9、向溢出。,解:X补=11.0100+1=11.0101 Y补=00.0111-Y补=11.1001 X补=11.0101+-Y补=11.1001 X+Y补=1 10.1110两个符号位10不同,运算结果负向溢出。,例4:X=-0.1011,Y=0.0111,求 X-Y补=?,补码加减法运算规则如下:参加运算的操作数用补码表示。符号位与数值位一样参加运算。如果是加法运算,则直接相加如果是减法,那么减数连同符号位一起取反,然后末位加1。运算的结果仍然是补码形式。,移位运算,逻辑移位循环移位算术移位,逻辑移位,特点移位操作对象不存在符号和量值的差别,非数值或无符号数仅限于数码位置的变化规则左移或右移
10、时高位或低位补0移出位被丢弃举例:逻辑右移:0101-0010,循环移位,特点移位操作对象不存在符号和量值的差别,非数值或无符号数仅限于数码位置的变化规则左移或右移时高位或低位补0移出位被置于低位或高位举例:循环右移:0101-1010,移位时,数的符号位不变算术运算数的移位操作会引起数值变化右移一位,相当于带符号的数除以2(乘以1/2)左移一位,相当于带符号的数乘以2对于正数原码、反码和补码均相同,移位时只需要在末端补“0”。对于负数的移位,不同码制的处理不同,算术移位,算术移位,特点移位操作对象存在符号和量值的差别,即:有符号数不仅限于数码位置的变化,内涵是数值扩大或缩小两倍规则决定于编码
11、方式,原码算术移位,规则1.符号位不变2.左移:仅移动量值位,低位补03.右移:仅移动量值位,高位补0,原码符号位不参与移位,只是绝对值移位,其末端补入0例:算术右移运算,原码算术移位,原码例:算术左移运算,原码算术移位,补码算术移位,规则1.符号位参与移位2.左移:低位补03.右移:高位补原有符号位溢出左移、符号位发生改变,问题:算术移位怎样才能保持正确的符号和正确的移位值?,补码右移例:设x=-1011000,则x补=10101000,第一位为符号位。现将其真值x右移,再求出其对应补码,列式如下:,不移位 x=-1011000 x补=10101000右移一位x=-0101100 x补=11
12、010100右移二位x=-0010110 x补=11101010,补码算术移位,补码右移:符号位也随之右移且符号位不变例:,补码算术移位,补码左移例:设x=-0010110,则x补=11101010,第一位为符号位。现将其真值x左移,再求出其对应补码,列式如下:,不移位 x=-0010110 x补=11101010左移一位2x=-01011002x补=11010100左移二位4x=-10110004x补=10101000,补码算术移位,补码左移左移时其末端补入0,若符号位与后一位相同,则数值高位移入符号仍会得到正确的符号;若符号位与后一位不同,在左移时会溢出,会破坏正确的符号位,表示超出数的表
13、示范围为了保持正确符号,往往采用补码变形码,使其有两位或多位符号位,补码算术移位,反码右移:符号位也随之右移且符号位不变,反码算术移位,反码左移左移时其末端补入1,若符号位与后一位相同,则数值高位移入符号仍会得到正确的符号;若符号位与后一位不同,在左移时会溢出,会破坏正确的符号位,表示超出数的表示范围为了保持正确符号,往往采用具有两位或多位符号位的变形码,反码算术移位,已知x补=0.1011,y补=1.1011,求算术左移,逻辑左移、算术右移、逻辑右移后的值。,x算术左移后的值=1.0110(溢出)y算术左移后的值=1.0110 x逻辑左移后的值=1.0110y逻辑左移后的值=1.0110 x
14、算术右移后的值=0.0101y算术右移后的值=1.1101x逻辑右移后的值=0.0101y逻辑右移后的值=0.1101,补码移位举例,逻辑运算,1/0表示真或假,位运算与运算:&,有0即0或运算:|,有1即1非运算:,0-1,1-0异或运算:,同0异1,BCD码,二进制的缺点小数部分在二进制下只能表示成n1*(1/2)+n2*(1/4)+n3*(1/8)+.+nn*(1/2n)的形式 造成精度损失十进制数的二进制表示(BCD码)维持十进制的进位数制特点借用四位二进制数的十六个状态组合的其中十个状态来表示十进制数的09 方法:8421、2421、余3码、格雷码,BCD码,8421码每位的权值分别
15、为8、4、2、1例如:(16)10表示为0001 01102421码每位的权值分别为2、4、2、104与8421表示相同,59将高位置1例如:(16)10表示为0001 1100余3码在8421码基础上加3,各位无权值,BCD码运算,加法进位问题矛盾:4比特的可用表示范围为015,但是BCD码要求逢10进位解决:结果大于等于10,必须加6修正,即人为的产生进位,算术逻辑单元(简称ALU),ALU是一种功能较强的组合逻辑电路。它能进行多种算术运算和逻辑运算。ALU的基本逻辑结构是超前进位加法器,它通过改变加法器的进位产生函数G和进位传递函数P来获得多种运算能力。下面通过介绍SN74181型四位A
16、LU中规模集成电路了介绍ALU的原理。在图中功能表中,“加”表示算术加,“+”表示逻辑加。它能执行16种算术运算和16种逻辑运算,M是状态控制端,M=H,执行逻辑运算;M=L执行算术运算。S0 S3是运算选择端,它决定电路执行哪种算术运算或逻辑运算。,常用组合逻辑,常用组合逻辑,三态门“三态”是指电路可以输出正常的 0/1逻辑电平,也可以处于高阻态,取决于输入和控制信号。为高阻态时,“0”和“1”的输出极都截止,相当于与所连接的线路断开,便于实现从多个数据输入中选择其一,当三态控制端/G=0,实现非运算逻辑Y=/A当/G=1,电路输出呈高阻Y=Z,常用组合逻辑,三态门构建的总线,例如,当控制信
17、号/G1为低电平,/G2 和/G3为高电平时,三态门的输入 A 被送到总线上,另外两个三态门的输出处于高阻态。,A B C,/G1/G2/G3,总线,0 1 1,半加器,不考虑进位输入时,两数码Xn,Yn相加称为半加器。,全加器,若考虑低位进位输入Cn-1相加,则称为全加器。,一位全加器真值表如右,其中:Xn 为被加数,Yn为加数,Cn-1为低级进位信号,Fn为和,Cn为本级向上进位信号。,0 0 1 1 0,0 1 0 1 0,1 0 0 1 0,1 1 1 1 1,全加器,全加器,化简可得:Fn=XnYnCn-1Cn=XnYn+(XnYn)Cn=XnYn+(XnYn)Cn-1,半加器与全加
18、器,半加器:Hn=XnYn全加器:Fn=XnYnCn-1Cn=XnYn+(XnYn)Cn-1,Xn,Yn,Hn,/Fn,Cn-1,Cn,串行加法器,步骤加数最低位相加保存求和结果和进位加数右移一位,跳转到第一步特点仅需一位全加器需要N个周期完成N位加法运算,并行加法器,全加器数目=操作数(加数)的位数N个全加器特点同时(同一周期)执行各位的加法运算,并行加法器,缺点逐位完成的进位运算影响求和过程最坏情况下接近串行加法器的性能即1周期=N个加法/进位延迟例如:1111+0001结论并行加法器的性能决定于进位机制的设计,并行加法器的进位链,进位函数串行进位并行进位混合方式,进位函数,根据各位进位的
19、形成条件,可分别写出Ci的逻辑表达式:C1=X1Y1+(X1Y1)C0=G1+P1C0 其中:Gi=XiYi 称为进位产生函数 Pi=XiYi 称为进位传递函数 Gi的意义是:当XiYi均为“1”时定会产生向高位的进位;Pi的意义是:当Xi和Yi中有一个为“1”时,若同时低位有进位输入,则本位也将向高位传送进位。,串行进位,串行进位,缺点逐位完成的进位运算影响求和过程最坏情况下接近串行加法器的性能即1周期=N个加法/进位延迟例如:1111+0001优点实现简单:n-1根进位输入/输出连线,并行进位,根据X0.n-1,Y0.n-1,C0直接/同时确定各位对应的全加器的进位输入消除Cn+1对Cn的
20、依赖关系,四位并行进位加法器,并行进位加法的特点,并行加法进位的优缺点:运算速度快增加了实现复杂度(硬件逻辑电路)可能突破输入信号的扇入系数结论:实现全字长的并行进位不可行对策:分组计算和进位机制,组内并行、组件串行,组内并行、组件并行,G0*=f(G0,G1,G2,G3,P1,P2,P3)P0*=g(P0,P1,P2,P3),ALU举例,ALU是一种功能较强的组合逻辑电路。它能进行多种算术运算和逻辑运算。ALU的基本逻辑结构是超前进位加法器,它通过改变加法器的进位产生函数G和进位传递函数P来获得多种运算能力。下面通过介绍SN74181型四位ALU中规模集成电路了介绍ALU的原理。,ALU结构
21、,全加器与函数发生器的组合丰富的控制信号和求值逻辑复合的算术、逻辑运算功能,74181的控制信号,M=1:逻辑运算(屏蔽Ci,打断进位链)M=0:算术运算(不屏蔽Ci)S3.0:函数发生器功能选择,74181功能,表中的“加”表示算术加,“+”表示逻辑加。能执行16种算术运算和16种逻辑运算,M是状态控制端,M=H,执行逻辑运算;M=L执行算术运算。S0 S3是运算选择端,它决定电路执行哪种算术运算或逻辑运算。注解:正逻辑表示高电平为1,负逻辑表示低电平为1,74181引脚,74181的正负逻辑,74181内部电路,并行进位ALU,用四片74181电路可组成16位ALU。如下图片内进位是快速的
22、,但片间进位是逐片传递的,因此总的形成时间还是比较长的。如果把16位ALU中的每四位作为一组,用类似位间快速进位的方法来实现16位ALU(四片ALU组成),那么就能得到16位快速ALU。推导过程如下:,与前面讲过的一位的进位产生函数Gi的定义相似,根据四位一组的进位产生函数GN为“1”的条件,可以得到GN的表达式为:GN=G3+P3G2+P3P2G1+P3P2P1G0 与前面讲过的一位的进位传递函数Pi的定义相似,根据四位一组的进位传递函数PN为“1”的条件,可以得到PN的表达式为:PN=P3P2P1P0,由式可知,只要74181型ALU能提供输出GN,PN那么就可用3个与或非门和4片ALU相
23、连,这样就能实现16位快速ALU。实现2.33、2.34、2.35式的逻辑电路就成为超前进位扩展器(74182芯片),图3.1是它的逻辑电路图,图中将PNi、GNi分别用Pi、Gi表示。图中P、G输出可用于把4组16位快速ALU扩展成64位快速ALU。图2.18画出了用74181和74182芯片构成的16位快速ALU。,图3.1 与7418型ALU连用的超前进位产生电路,定点乘法运算,在计算机中实现乘除法运算,有三种方式:(1)软件实现:在低档微机中无乘除指令,只能 用乘法或除法子程序实现。(2)在原有实现加减运算的ALU的基础上增加一些 逻辑线路以实现乘除运算。(3)设置专用的乘除法器:主要
24、用于要求快速乘除运算的机器中。,手工乘法:设 X=0.1101 Y=0.1011 求XY=?0.1 1 0 1 0.1 0 1 1 1 1 0 1 1 1 0 1 0 0 0 0 1 1 0 1 0.1 0 0 0 1 1 1 1 XY=0.1 0 0 0 1 1 1 1,一、无符号数一位乘,+,错位相加:加法运算是根本各位乘积结果所需加法运算次数不同,MxN阵列乘法器,由于计算机的局限性,多位数的乘法要执行多次加法而且要浪费大量的器件,因此在计算机中乘法运算采用的方法是:累加与移位相结合,R,由于计算机的局限性,多位数的乘法要执行多次加法而且要浪费大量的器件,因此在计算机中乘法运算采用的方法
25、是:将n位乘转换成n次“累加与移位”,也就是每一步只求一位乘数所对应的新部分积,并与原部分积作一次累加,然后右移一次。计算机内实现原码一位乘:无符号数一位乘的算法流程框图为下图:其中:图中使用了三个寄存器A、B和C B用来存放被乘数,C存放乘数。A初值为0,然后存放部分积,最后存放乘积高位,开始,N位被乘数BN位乘数C,0 A,C0=1?,A+B A,A+0 A,A、C右移一位,重复n 次,结束,Y,N,N,Y,设 X=1101 Y=1011 求XY=?B(被乘数)C0 A C(乘数)C0 A C(乘数)0 0 0 0 0 1 0 1 1 C0 1 B 1 1 0 1 0 1 1 0 1 0
26、0 1 1 0 1 1 0 1 C0 1 B 1 1 0 1 1 0 0 1 1 0 1 0 0 1 1 1 1 0 C0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 1 1 C0 1 B 1 1 0 1 1 0 0 0 1 0 1 0 0 0 1 1 1 1,1 1 0 1,0 0 0 0,0,1 0 1 1,初始状态,第一节拍,第二节拍,第三节拍,第四节拍,1101101110001111,硬件实现无符号数一位乘软件实现无符号数一位乘可用子程序实现乘法运算。算法仍然是将乘法化为多次累加和移位二、带符号数一位乘 定点原码一位乘的方法和无符号数的方法一样。实现方法是
27、将符号位与数值位分别处理 一般带符号数的运算用补码比较方便,可以先讨论论补码一位乘的算法。,原码一位乘法的运算规则,设x=xf.x1x2xn,y=yf.y1y2yn,乘积为P,乘积的符号位为Pf,则求|P|的运算规则如下:被乘数和乘数均取绝对值参加运算,符号位单独考虑。被乘数取双符号,部分积的长度同被乘数,初值为0。从乘数的最低位yn开始判断,若yn=1,则部分积加上被乘数|x|,然后右移一位;若yn=0,则部分积加上0,然后右移一位。重复,判断n次。,原码一位乘法例题,例 已知X=0.1101,Y=-0.1011,用原码一位乘法求XY原。解:|X|=00.1101(取双符号位),|Y|=0.
28、1011(取单符号位),部分积 乘数yn 0 0 0 0 0 0 0.1 0 1 1+X 0 0 1 1 0 1 0 0 1 1 0 1 右移1位 0 0 0 1 1 0 1 0.1 0 1 1(丢失)+X 0 0 1 1 0 1 0 1 0 0 1 1 右移1位 0 0 1 0 0 1 1 1 0.1 0 1(丢失)+0 0 0 0 0 0 0 0 0 1 0 0 1 右移1位 0 0 0 1 0 0 1 1 1 0.1 0(丢失)+X 0 0 1 1 0 1 0 1 0 0 0 1 右移1位 0 0 1 0 0 0 1 1 1 1 0 1(丢失)乘积高位 乘积低位,校正法设X补=X0X1X
29、2 Xn,Y补=Y0Y1Y2 Yn(1)当Y0,即Y0=0时,X补Y补=X补Y=XY补(2)当Y0,即Y0=1时,则 Y补=2+Y,Y=Y补-2=1Y1Y2 Yn 2=0Y1Y2 Yn-1 XY=X(0Y1Y2 Yn)X 则 XY补=X补(0Y1Y2 Yn)+-X补,定点补码一位乘-校正法,校正法定点补码一位乘的规律,(1)乘数Y的符号位不参加运算,用X补 乘上Y补的数值位。(2)若Y为负数,则对求得的积再做一次加-X补的校正。(3)结果的符号由运算结果得出。,例1 X=-0.1101,Y=+0.1011,求XY=?X补=11.0011,Y补=0.1011,高位部分积 低位部分积/乘数 操作说
30、明 0 0.0 0 0 0 1 0 1 1 开始部分积为0,判断乘数末位+)1 1.0 0 1 1 乘数最低位为1,+X补 1 1.0 0 1 1 1 1.1 0 0 1 1 1 0 1 1(丢掉)右移部分积和乘数,判末位+)1 1.0 0 1 1 乘数最低位为1,+X补 1 0.1 1 0 0 1 1.0 1 1 0 0 1 1 0 1(丢掉)右移部分积和乘数,+)0 0.0 0 0 0 乘数最低位为0,+0 1 1.0 1 1 0 1 1.1 0 1 1 0 0 1 1 0(丢掉)右移部分积和乘数,计数+)1 1.0 0 1 1 乘数最低位为1,+X补 1 0.1 1 1 0 1 1.0
31、1 1 1 0 0 0 1 1(丢掉)右移部分积和乘数,计数X*Y补=1 1.0 1 1 1 0 0 0 1,XY=-0.1 0 0 0 1 1 1 1,例2 X=-0.1101,Y=-0.1011,求XY=?,X补=11.0011,Y补=11.0101,-X补=00.1101 高位部分积 低位部分积/乘数 操作说明 0 0.0 0 0 0 0 1 0 1 开始部分积为0,判末位+)1 1.0 0 1 1 乘数最低位为1,+X补 1 1.0 0 1 1 1 1.1 0 0 1 1 0 1 0 1(丢掉)右移部分积和乘数,+)0 0.0 0 0 0 乘数最低位为0,+0 1 1.1 0 0 1
32、1 1.1 1 0 0 1 1 0 1 0(丢掉)右移部分积和乘数,+)1 1.0 0 1 1 乘数最低位为1,+X补 1 0.1 1 1 1 1 1.0 1 1 1 1 1 1 0 1(丢掉)右移部分积和乘数,+)0 0.0 0 0 0 乘数最低位为0,+0 1 1.0 1 1 1 1 1.1 0 1 1 1 1 1 1 0(丢掉)右移部分积和乘数,,XY=1 1.1 0 1 1 1 1 1 1,Y为负数,对求得的积需再做一次加-X补的 校正。-X补=00.1101X+Y补=1 1.1 0 1 1 1 1 1 1+0 0.1 1 0 1=0 0.1 0 0 0 1 1 1 1 所以:XY=+
33、0.1 0 0 0 1 1 1 1,X=-0.1101,Y=-0.1011,求XY=?,比较法(Booth法)这种方法不用区分乘数符号的正负,而且让乘数符号位也参加运算。运算规则如下:(1)参加运算的数用补码表示;(2)符号位参加运算;(3)被乘数一般取双符号位,参加运算,部分积初值为0;(4)乘数取单符号位(5)乘数末位增设附加位Yn+1,且初值为0;(6)逐次比较相邻两位并按Yn+1-Yn的结果运算.(7)移位按补码右移规则进行,即右移过程中符号位也随着右移并且符号位保持不变;但第n+1步不再移位,仅根据Y0和Y1的比较结果作相应的运算即可。,开始,N位被乘数B,0 AN位乘数C,0 C-
34、1,C0C-1=?,A-B A,A+B A,A、C右移一位,重复n 次,结束,Y,N,=01,=10,A+0 A,=00或11,例:设X补=0.1101,Y补=1.0110,求XY=?,加法器和被乘数采用双符号位。-X补=11.0011 高位部分积 低位部分积/乘数 附加位 操作说明 0 0.0 0 0 0 1 0 1 1 0 0 0 0.0 0 0 0 0 1 0 1 1 0 YnYn+1=00,右移部分积和乘数一位+1 1.0 0 1 1 YnYn+1=10,+-X补 1 1.0 0 1 1 1 1.1 0 0 1 1 0 1 0 1 1 右移部分积和乘数一位 1 1.1 1 0 0 1
35、1 0 1 0 1 YnYn+1=11,右移部分积和乘数一位+0 0.1 1 0 1 YnYn+1=01,+X补 0 0.1 0 0 1 0 0.0 1 0 0 1 1 1 0 1 0 右移部分积和乘数一位+1 1.0 0 1 1 YnYn+1=10,+-X补 1 1.0 1 1 1 1 1 1 0 最后一次不右移 XY补=11.01111110,XY=-0.10000010,3.4 定点除法运算,一、无符号数一位除 运算和定点原码的乘法一样,两个原码数相除,通常有恢复余数法和不恢复余数法.1.无符号数恢复余数法 在计算机中实现除法运算,就要解决如何判断够减与否的问题,可用2种方法:(1)设置
36、一个比较线路,专门用来比较被除数(余数)与除数的大小。(2)直接作减法试探。,开始,被除数 A、C除数 B,A 0?,不够减恢复余数:A+B A商0:0 C 0,重复 n 次?,结束,Y,N,A、C左移一位,A B A,Y,N,商1:1 C 0,对于整数而言,A C 操作说明 0 0 0 0 1 0 0 0 初始状态 0 0 0 1 0 0 0 0 A、C左移一位 B 1 1 0 1 减除数 A0 0 0 0 1 0 0 0 1 A0,商1,0 0 1 0 0 0 1 0 A、C左移一位 B 1 1 0 1 减除数 A0 1 1 1 1 0 0 1 0 A0,不够减商0,恢复余数 B 0 0
37、1 1 加除数 0 0 1 0,例1 用恢复余数法计算:X=00001000,Y=0011,求X/Y。-Y补1101,商,余数,对于小数来说,运算规则:第一次做减法即-B补,用来判别溢出的情况当某一次求商,它减得的差值为负,本次商上0,同时把除数加到差上,恢复余数为原来得正值,然后再左移。当某一次求商,减得的差值为正,就没有恢复余数的操作,上商为1,余数左移一位。注意余数一般是通过n次左移后得出的结果,那么真正的结果应该是这个数2n,例3.38 假设X=0.1011,Y=0.1101,求X/Y。解:-Y补=11.0011,取双符号位,-Y用+-Y补取代。得出:X/Y=0.1101 余数=0.0
38、1112-4这种方法的缺点是:当某一次-Y的差值为负时,要多一次+Y恢复余数的操作,降低了执行速度,又使控制线路变得复杂,因此在计算机中很少采用。计算机中普遍采用的是不恢复余数的除法方案,又称之为加减交替法。,当余数为正时,商上1,求下一位商的办法是余数左移一位,再减去除数;当余数为负时,商上0。求下一位商的办法是余数左移一位,再加上除数。如果最后一次上商为0,而又需得到正确余数则在这最后一次仍需恢复余数。,其处理思想是:先减除数后判断,如减后发现不够减,则在下一步改作加除数操作。这样操作步骤固定易于编程。商的符号:Qf=xfyf,商的值:|Q|x|/|y|其运算规则:(1)符号位不参与运算,
39、并要求|X|Y|;(2)取双符号位表示,先用被除数减去除数:余数为正时,商上1,余数左移一位,再减去除数;余数为负时,商上0,余数左移一位,再加上除数;(3)当第n+1步余数为负时,需恢复余数,再加上除数,但不移位,以保持余数为正。,101,2.无符号数不恢复余数法,开始,被除数 A、C除数 B,A 0?,A、C左移一位A+B A,重复n-1 次?,结束,Y,N,A、C左移一位,A B A,Y,N,商0:0 C 0,商1:1 C 0,A、C左移一位A-B A,A 0?,N,A+B A,对于整数而言,A C 操作说明 0 0 0 0 1 0 0 0 初始状态 0 0 0 1 0 0 0 0 A、
40、C左移一位 B 1 1 0 1 减除数 A0,商1,下步左移后B 0 0 1 0 0 0 1 0 A、C左移一位 B 1 1 0 1 减除数 A0 1 1 1 1 0 0 1 0 A0,商0,恢复余数B B 0 0 1 1 加除数 0 0 1 0,例1 用不恢复余数法计算:00001000/0011 除数0011B;被除数放到A、C中 除数的补码-B1101,余数,对于小数来说,运算规则:第一次做减法即-B补,用来判别溢出的情况当某一次求商,它减得的差值为负,本次商上0,然后左移,并且加上除数Y补。当某一次求商,减得的差值为正,上商为1,余数左移一位,然后-Y补。注意余数一般是通过n次左移后得
41、出的结果,那么真正的结果应该是这个数2n如果最后一次的余数为负,正确的余数应为Y恢复后的正余数2n。用不恢复余数除法完全可以代替恢复余数除法,且n位数除以n位数,只用做n1次加减法,n次移位就可以了,缩短了除法时间。,被除数(余数)A 商 C 操作说明 0 0 1 0 1 1 0 0 0 0 0 初始状态)1 1 0 0 1 1+Y补 1 1 1 1 1 0 0 0 0 0 0 不够减,商上0 1 1 1 1 0 0 0 0 0 0 0 左移)0 0 1 1 0 1+Y 0 0 1 0 0 1 0 0 0 0 1 够减,商上1 0 1 0 0 1 0 0 0 0 1 0 左移)1 1 0 0
42、1 1+Y补 0 0 0 1 0 1 0 0 0 1 1 够减,商上1 0 0 1 0 1 0 0 0 1 1 0 左移)1 1 0 0 1 1+Y补 1 1 1 1 0 1 0 0 1 1 0 不够减,商上0 1 1 1 0 1 0 0 1 1 0 0 左移)0 0 1 1 0 1+Y 0 0 0 1 1 1 0 1 1 0 1 够减,商上1,例2 X=0.1011,Y=0.1101,求X/Y=?-Y补=11.0011,商,余数,X/Y=0.1101 余数0.01112-4,例:设X=0.100,Y=-0.101,用加减交替法求X/Y原。-|Y|补=11.011,计算过程如右:,0 0 1
43、0 0 0 0 0 0 开始情形 1 1 0 1 1+-|Y|补 1 1 1 1 1 0 0 0 0 余数为负,商上0 1 1 1 1 0 0 0 0 0 左移 0 0 1 0 1+|Y|补 0 0 0 1 1 0 0 0 1 余数为正,商上1 0 0 1 1 0 0 0 1 0 左移 1 1 0 1 1+-|Y|补 0 0 0 0 1 0 0 1 1余数为正,商上1 0 0 0 1 0 0 1 1 0 左移 1 1 0 1 1+-|Y|补 1 1 1 0 1 0 1 1 0 余数为负,商上0 0 0 1 0 1 最后一步余数为负时需0 0 0 1 0+|Y|补得到正确的余数,被除数(余数R)
44、(被除数)(商)操作说明,余数 商,+)+)+)+)+),注意:余数与被除数同号,3.软件实现无符号数除法 在无除法指令的机器中,可用子程序实现除法运算。二、带符号数一位除 实现符号数一位除的一种方法是:将被除数和除数的绝对值按无符号数除法得到商及 余数;若两数异号,商符取负,否则取正;余数符 号与被除数符号相同。一般符号数用补码表示,所以我们直接用补码进行 进行除法运算。补码一位除(补码不恢复余数法)为:,参加运算的数用补码表示,符号位参加运算,除数与被除数均用双符号补码表示。被除数与除数同号,求商时用被除数高位部分减去除数;被除数与除数异号,被除数高位部分加上除数。若余数与除数同号,上商1
45、,余数左移一位减去除数;若余数与除数异号,上商0,余数左移一位加上除数。注意:余数左移加上或减去除数后就得到了新余数。采用校正法包括符号位在内,应重复3步骤n+1次。,商的校正原则。(采用末位恒置“1”的方法)当刚好能除尽时(即运算过程中任一步余数为0),如果除数为正,则商不必校正,若除数为负,则商需要校正,即加2-n进行修正。不能除尽时,如果商为正,则不必校正;若商为负,则商需要加2-n进行修正。余数的校正原则。若商为正,当余数与被除数异号时,则应将余数加上除数进行修正才能获得正确的余数。若商为负,当余数与被除数异号时,则余数需减去除数进行校正。商的符号。如果第一步操作不发生溢出,得到的就是
46、正确的商符。,例:已知X=0.100,Y=-0.101,用补码一位不恢复余数除法求X/Y补。解:X补=0.100,Y补=11.011,-Y补=00.101,0 0 1 0 0 0 0 0 0 开始情形 1 1 0 1 1 X和Y异号,Y补+Y补 1 1 1 1 1 0 0 0 1 余数与Y同号,商上1 1 1 1 1 0 0 0 1 0 左移 0 0 1 0 1+-Y补 0 0 0 1 1 0 0 1 0 余数与Y异号,商上0 0 0 1 1 0 0 1 0 0 左移 1 1 0 1 1+Y补 0 0 0 0 1 0 1 0 0余数与Y异号,商上0 0 0 0 1 0 1 0 0 0 左移 1
47、 1 0 1 1+Y补 1 1 1 0 1 1 0 0 1 余数与Y同号,商上1,被除数(余数R)(被除数)(商)操作说明,余数 商,+)+)+)+),例:已知X=0.100,Y=-0.101,用补码一位不恢复余数除法求X/Y补。解:X补=0.100,Y补=11.011,-Y补=00.101,不能除尽,商为负,需校正:X/Y补=1.001+0.001=1.010余数与被除数异号,需校正:余数r补=(1.101+0.101)*2-3=0.010*2-3(余数与被除数同号),1 1 1 1 0 0 0 0 0 0 开始情形 1 1 0 1 1 X和Y异号,Y补+Y补 1 1 1 1 1 0 0 0
48、 1 余数与Y同号,商上1 1 1 1 1 0 0 0 1 0 左移 0 0 1 0 1+-Y补 0 0 0 1 1 0 0 1 0 余数与Y异号,商上0 0 0 1 1 0 0 1 0 0 左移 1 1 0 1 1+Y补 0 0 0 0 1 0 1 0 0余数与Y异号,商上0 0 0 0 1 0 1 0 0 0 左移 1 1 0 1 1+Y补 1 1 1 0 1 1 0 0 1 余数与Y同号,商上1,被除数(余数R)(被除数)(商)操作说明,余数 商,+)+)+)+),例:已知X=-0.0100,Y=0.1000,用补码一位不恢复余数除法求X/Y补。解:X补=11.1100,Y补=00.10
49、00,-Y补=11.1000,不能除尽,商为负,需校正:X/Y补=1.001+0.001=1.010余数与被除数异号,需校正:余数r补=(1.101+0.101)*2-3=0.010*2-3(余数与被除数同号),定点数和浮点数,1.定点数定点数是指小数点固定在某个位置上的数据,一般有小数和整数两种表示形式。定点小数是把小数点固定在数据数值部分的左边,符号位的右边;整数是把小数点固定在数据数值部分的右边。我们在前面讨论的数据都是定点数。2.浮点数浮点数是指小数点位置可浮动的数据,通常以下式表示:N为浮点数,M为尾数,E为阶码,R称为“阶的基数(底)”,而且R为一常数,一般为2、8或16。,N=M
50、RE,数值数据的定点、浮点表示法1、定点表示法约定机器中所有数据的小数点位置固定不变。用定点表示法表示的数称为定点数。(1)定点小数(纯小数):小数点在数值最高有效位之前,符号位之后。X=X0.X1X2 Xn,符号位.,尾 数,范围:2-nX1-2-n,(2)定点整数:小数点固定在数的最低位之后。X=X0X1X2 Xn.范围:1X 2n-1,(1)浮点数的表示格式,浮点数的机内表示一般采用以下形式:MS E M1位 n+1位 m位MS是尾数的符号位,设置在最高位上。E为阶码,有n+1位,一般为整数,其中有一位符号位,设置在E的最高位上,用来表示正阶或负阶。M为尾数,有m位,由MS和M组成一个定