§4.1机器数的加减运算及其实现补码加法特点:符号与数值部分都参加运算运算结果按2取模(小数),或按2n取模(整数)运算结果仍为补码形式补码相加的规则总结:若两数的符号不同,相加的结果即为和的补码若两数符号相同,相加后若其符号不变,结果正确若两数符号相同,相加后若其符号改变,结果错误:负溢出、正溢出当发生错误时,采用除以比例因子H的方法求解§4.1机器数的加减运算及其实现三、补码减法原理:减法运算转换为加法运算性质三:两数之差的补码等于被减数的补码与负的减数补码之和[X-Y]补=[X]补+[-Y]补例:两正数相减,被减数大于减数。已知X=+11001,Y=+10001,求真值X-Y§4.1机器数的加减运算及其实现解:[X]补=00.11001,[Y]补=00.10001[-Y]补=11.01111[X-Y]补=[X]补+[-Y]补=00.11001+11.0111100.11001+11.01111100.01000mod22符号位溢出位所以,X-Y=+1000§4.1机器数的加减运算及其实现例:两正数相减,被减数小于减数。已知X=+10011,Y=+11001,求真值X-Y解:[X]补=00.10011,[-Y]补=11.00111[X-Y]补=[X]补+[-Y]补=00.10011+11.0011100.10011+11.0011111.11010mod22符号位所以,X-Y=-110§4.1机器数的加减运算及其实现例:两负数相减,被减数大于减数。已知X=-10011,Y=-11001,求真值X-Y解:[X]补=11.01101,[-Y]补=00.11001[X-Y]补=[X]补+[-Y]补=11.01101+00.1100111.01101+00.11001100.00110mod22符号位溢出位所以,X-Y=+110§4.1机器数的加减运算及其实现例:两负数相减,被减数小于减数。已知X=-11001,Y=-10011,求真值X-Y解:[X]补=11.00111,[-Y]补=00.10011[X-Y]补=[X]补+[-Y]补=11.00111+00.1001111.00111+00.1001111.11010mod22符号位所以,X-Y=-110§4.1机器数的加减运算及其实现补码加减法运算规则总结:参加运算的操作数用补码表示符号位与数值位一起参加运算若为加法操作,则两数直接相加;若为减法,则减数连同符号位一起变反加1,再与被减数相加运算的结果仍然是补码的形式.§4.1机器数的加减运算及其实现例:已知X=+110110,Y=-110011,求X+Y,X-Y.解:设机器字长为8,则:[X]补=00110110,[Y]补=11001101,[-Y]补=00110011[X+Y]补=[X]补+[X]补,[X-Y]补=[X]补+[-X]补00110110+11001101100000011符号位溢出位00110110+0011001101101001符号位正溢出§4.1机器数的加减运算及其实现四、补码加减法线路的实现逻辑电路如图所示:§4.1机器数的加减运算及其实现图中各个部件的名称和功能是:F表示多位并行加法器,它的功能是接收参加运算的两个数X和Y,实现加法运算,并在输出端给出本次运算结果。加法器的最低一位可以接收一个进位信号1→F。X和Y临时存放参加运算数据的两个寄存器,X还用来保存运算的结果。A“与”门,功能是控制寄存器X输出的内容是否送到加法器F的左输入端,用X→F信号控制。C“与”门,功能是控制加法器F的运算结果是否写回寄存器X,用F→X信号控制。B“与或”门,功能是通过控制信号Y→F和→F分别把Y寄存器中的内容是原数据送加法器F还是各位取反后送加法器F。§4.1机器数的加减运算及其实现运算原理如下:参加运算的两个数被送到寄存器X和Y,以补码的形式保存。要实现[X+Y]补→X,需给出X→F、Y→F两个控制信号,就可以把[X]补和[Y]补送入加法器F的两个输入端,加法器再完成两个补码[X]补和[Y]补的相加。加法完成之后,再通过F→X命令,把相加结果送入寄存器X。若要完成[X-Y]补→X,“与”门A送出的还是[X]补,但“与或”门B送出的应是Y每一位的取反值,并在加法器的最低位加进位信号1→F,这样就得到[-Y]补,通过加法器F相加,就实现了[X]补+[-Y]补,也就是[X-Y]补。再通过F→X命令,把[X-Y]补送入寄存器X。§4.2定点数乘法及其实现一、原码一位乘法及其实现乘法规则:符号由两数的符号位异或得到数值部分是两数的绝对值相乘之积例:有两个数X和Y[X]原=XsX1X2…Xn[Y]原=YsY1Y2…Yn则[X×Y]原=[X]原×[Y]原。乘积的符号位为:Xs⊕Ys乘积的数值部分为:(X1X2…Xn)×(Y1Y2…Yn)。§4.2定点数乘法及其实现手工运算规则:1-部分积加上被乘数X的绝对值0-部分积加上加上全“0”重复上面的动作,直到乘法做完为止例:X=0.1001,Y=0.1101,求X×Y。0.1001×0.11010.011101011001000010011001§4.2定点数乘法及其实现机器运算规则:1-部分积加上被乘数X的绝对值0-部分积加上加上全“0”相加后的部分积右移一位重复上面的动作,直到乘法做完为止例:X=+11010,Y=+10110,求X×Y。解:[X]原=0.11010,[Y]原=0.10110乘积的符号位Z0=0⊕0=0乘积的数值部分是两数的绝对值相乘。§4.2定点数乘法及其实现部分积乘数判别位说明0.0000010110判别为0,加全0+0.000000.000000.00000010110右移1位,判别位为1,部分积加X+0.110100.110100.01101001011右移1位,判别位为1,部分积加X+0.110101.001110.10011100101右移1位,判别位为0,部分积加全0+0.000000.100110.01001110010右移1位,判别位为1,部分积加X+0.110101.000110.10001111000部分积右移1位§4.2定点数乘法及其实现说明:有时部分积的符号位出现“1”,并不是出现了负数,而是部分积的值超出了“1”,右移时符号位应补“0”运算规律:部分积每次右移一位,其最低位进入到乘数中作为最高位,不参加运算;乘数中的最低位移出,自动丢失;N位数相乘,只需n+1位全加器,结果占2n位§4.2定点数乘法及其实现原码一位乘法逻辑电路图§4.2定点数乘法及其实现主要组成部件有:寄存器A,存放计算的部分积Z,具有自动移位功能;寄存器B,存放被乘数X;寄存器C,存放乘数Y,具有自动移位功能;加法器F,进行部分积和被乘数相加;计数器i,用来控制逐位相乘的次数。控制信号A→F、B→F分别通过与门控制部分积、被乘数送入加法器F进行相加;控制信号A/2→A、C/2→C分别控制寄存器A、C自行右移一位。§4.2定点数乘法及其实现二、定点补码一位乘法及其实现补码运算的特点:符号参与运算1.补码与真值的关系设[X]补=X0.X1X2···Xn当X≥0时,X0=0,则:[X]补=0.X1X2···Xn=∑Xi2-i=X当X0时,X0=1,则:[X]补=1.X1X2···Xn=2+XX=[X]补-2=1.X1X2···Xn-2=-1+0.X1X2···Xn=-1+∑Xi2-i则:X=-X0+∑Xi2-i=-X0+0.X1X2···Xn§4.2定点数乘法及其实现2.补码的右移设[X]补=X0.X1X2···Xn,则:由于X=-X0+0.X1X2···Xn=-X0+∑Xi2-i½X=-½X0+½∑Xi2-i=-X0+½X0+½∑Xi2-i=-X0+½(X0+∑Xi2-i)=-X0+∑Xi2-i-1=-X0+0.X0X1X2···Xn所以[½X]补=X0.X0X1X2···Xn§4.2定点数乘法及其实现3.定点补码一位乘法设被乘数:[X]补=X0.X1X2···Xn乘数:[Y]补=Y0.Y1Y2···Yn则有[X×Y]补=[X]补×(-Y0+∑Yi2-i)希望:[X×Y]补=[X]补×[Y]补讨论:a.设X符号任意,Y为正数[Y]补=0.Y1Y2···Yn则:[X]补×[Y]补=[X]补×Y=[X×Y]补=[X]补×(0.Y1Y2···Yn)§4.2定点数乘法及其实现b.设X符号任意,Y为负数,则被乘数:[X]补=X0.X1X2···Xn乘数:[Y]补=1.Y1Y2···Yn=2+Y得Y=[Y]补-2=0.Y1Y2···Yn-1X×Y=X(0.Y1Y2···Yn)-X[X×Y]补=[X(0.Y1Y2···Yn)]补+[-X]补因为0.Y1Y2···Yn0,有[X(0.Y1Y2···Yn)]补=[X]补(0.Y1Y2···Yn)[X×Y]补=[X]补(0.Y1Y2···Yn)+[-X]补修正法§4.2定点数乘法及其实现c.当X与Y得符号均任意时,由[X×Y]补=[X]补(-Y0+0.Y1Y2···Yn)=[X]补(-Y0+∑Yi2-i)=[X]补(-Y0+Y12-1+Y22-2+···Yn2-n)=[X]补[-Y0+(Y1-Y12-1)+(Y22-1-Y22-2)+···(Yn2-(n-1)-Yn2-n)]=[X]补((Y1-Y0)+(Y2-Y1)2-1+···+(Yn-Yn-1)2-(n-1)+(0-Yn)2-n)=[X]补∑(Yi+1-Yi)2-i§4.2定点数乘法及其实现其递推公式:[Z0]补=2-1*(Yn-Yn-1)*[X]补*2n[Z1]补=2-1*([Z0]补+(Yn-1-Yn-2)*[X]补*2n)[Z2]补=2-1*([Z1]补+(Yn-2-Yn-3)*[X]补*2n)┇[Zi]补=2-1*([Zi-1]补+(Yn-i-1-Yn-i-2)*[X]补*2n)┇[Zn-1]补=2-1*([Zn-2]补+(Y1-Y0)*[X]补*2n)§4.2定点数乘法及其实现可见,乘法的每次计算都取决于相邻两位Yi值得比较,因此称为比较法。乘法规则:首先在乘数的最末位后面加一位附加位yn。开始时,yn=0,第一步运算是根据yn-1yn这两位的值判断后决定,然后再根据yn-2yn-1这两位的值判断第二步该作什么运算,再根据yn-3yn-2这两位的值判断第三步该作什么运算,如此等等。因为每进行一步,乘数都要右移一位,yn-2yn-1就移到yn-1yn位置上。§4.2定点数乘法及其实现补码一位比较乘法规则§4.2定点数乘法及其实现比较法计算用流程图表示§4.2定点数乘法及其实现例:利用补码一位乘法计算Z=X*Y,其中X=-0.1101,Y=0.1011。解:[X]补=11.0011,[Y]补=0.1011,[-X]补=00.1101乘积的数值部分是两数的绝对值相乘。开始时,部分积为全“0”。部分积乘数判别位说明00.0000010110部分积+[-X]补+00.110100.110100.0110101011右移1位右移1位,部分积+[-X]补00.001111.001111.0110右移1位,判别位为1,部分积加X11.101100.1101右移1位,判别位为0,部分积加全000.100000.011111.0011右移1位,判别位为1,部分积加X11.0111010101部分积右移1位0010100001010001§4.2定点数乘法及其实现§4.2定点数乘法及其实现