《运算方法与运算部.ppt》由会员分享,可在线阅读,更多相关《运算方法与运算部.ppt(46页珍藏版)》请在三一办公上搜索。
1、运算方法与运算部件,定点运算,郑州大学软件学院,2,定点运算,郑州大学软件学院,3,移位运算,计算机中小数点位置是约定的,当对计算机中的数进行左右移操作时,相当于对其进行了相应的乘除运算十进制:100左移一位成为1000,相当于乘以10;右移两位为1,相当于除以100=102二进制:1101=13,左移一位,低位补什么?右移一位,低位补什么?,机器数移位后空出的位置补0还是1,取决于该数是有符号数还是无符号数对有符号数的移位称为算术移位,对无符号数的移位称为逻辑移位,郑州大学软件学院,4,移位运算,算术移位规则移位后符号位不变正数:移位后的空位均用 0 补足负数:原码补 0,反码补 1,补码左
2、 0 右1(左移时空位补0,右移时空位补1),郑州大学软件学院,5,移位运算,算术移位例1设机器字长为8位(含1位符号位),将十进制数26的原、反、补码分别左、右移一位和两位后的结果及其对应真值,并分析结果的正确性。解:26=11010B,26原=0,0011010,+6,0,0000110,+13,0,0001101,+104,0,1101000,+52,0,0110100,+26,0,0011010,移位前,A原=A补=A反,对应的真值,机 器 数,移位操作,左移一位,左移两位,右移一位,右移两位,正数移位后符号位均不变,但左移后最高位丢失1时,结果出错;右移后最低位丢1时,精度降低,若对
3、此数左移三位,结果如何?,郑州大学软件学院,6,移位运算,算术移位例1设机器字长为8位(含1位符号位),将十进制数-26的原、反、补码分别左、右移一位和两位后的结果及其对应真值,并分析结果的正确性。解:-26=-11010B,26原=1,0011010,6,1,0000110,13,1,0001101,104,1,1101000,52,1,0110100,26,1,0011010,移位前,原码,左移一位,左移两位,右移一位,右移两位,负数原码移位后,前后空位均补 0,郑州大学软件学院,7,移位运算,6,1,1111001,13,1,1110010,104,1,0010111,52,1,1001
4、011,26,1,1100101,移位前,7,1,1111001,13,1,1110011,104,1,0011000,52,1,1001100,26,1,1100110,移位前,补码,反码,左移一位,左移两位,右移一位,右移两位,左移一位,左移两位,右移一位,右移两位,负数反码移位后,前后空位均补 1,负数补码移位后,后空补 0,前空补1,各种码制的负数移位后符号位均不变 负数原码左移后最高位丢失1时,结果出错;右移后最低位丢1时,精度降低 负数补码左移后最高位丢失0时,结果出错;右移后最低位丢1时,精度降低 负数反码左移后最高位丢失0时,结果出错;右移后最低位丢0时,精度降低,郑州大学软件
5、学院,8,移位运算,算术移位的硬件实现,(a)真值为正,(b)负数的原码,(c)负数的补码,(d)负数的反码,郑州大学软件学院,9,逻辑移位,逻辑移位规则逻辑左移时,高位丢弃,低位补0逻辑右移时,低位丢弃,高位补0eg:01010011,逻辑左移为10100110 算术左移为00100110 10110010,逻辑右移为01011001(视为补码)算术右移为11011001为避免算术左移时丢失有效位,通常在状态寄存器中指定一位存放算术左移时移出的进位信息,郑州大学软件学院,10,知识回顾,数制数值的处理定点数小数点问题有符号数符号问题码制原码解决了负数问题,但运算复杂补码解决了负数运算问题定点
6、移位运算帮助解决乘除问题,郑州大学软件学院,11,定点加减运算,郑州大学软件学院,12,1、补码加法 两个补码表示的数相加,符号位参加运算,且两数和的补码等于 两数补码之和。即:X+Y 补=X 补+Y 补2、补码减法 原则上讲:X-Y 补=X 补-Y 补 可见需要一个减法器,而现在只有加法器,如何得到 X-Y 补呢?我们可以根据补码加法公式推出:X-Y 补=X+(-Y)补=X 补+-Y 补 这样,减法的问题就归结到如何求-Y 补的问题了。知识回顾:-Y 补=/Y 补+1 即,-Y 补 等于 Y 补连同符号位在内求反加1。,补码定点加、减运算,郑州大学软件学院,13,例1、Y=0.1010 Y补
7、=0.1010-Y 补=1.0110例2、Y=-0.1010 Y补=1.0110-Y 补=0.1010例3、已知 X 补=0.0010,Y补=1.1010 求 X-Y 补=?解:X 补=0.0010+)-Y补=0.0110 X-Y 补=0.1000 这就是运算求得的正确结果。,补码定点加、减运算,郑州大学软件学院,14,例4、已知 X 补=1.1011,Y补=0.0110 求 X-Y 补=?解:X 补=0.0010+)-Y补=1.1010 Y补 是正数,-Y补 变成一负数 X-Y 补=11.0101 以2为模的情况下,符号位的进位1在机器中将会自动舍弃,故得出的就是正确的结果 X-Y 补。,补
8、码定点加、减运算,郑州大学软件学院,15,溢出的产生 例1:X 补=0.1011+)Y 补=0.0111 X+Y 补=1.0010 例2:X 补=1.0101+)Y补=1.1001 X+Y 补=0.1110,从例1例2中看出,两个正数相加,结果是一负数(符号位为1),而两个负数相加,结果是一个正数(符号位为0),显然结果错误。,溢出及其检测方法,郑州大学软件学院,16,溢出原因分析:寄存器的位数一旦确定下来,就有了容量的限制,数值表示的范围就固定了。如果运算过程中数值位超出了机器允许表示的范围,进入符号位上,造成符号性质的改变,就产生溢出。,符号位,数值位,显然,机器允许表示范围应该为+127
9、 到-128 之间,大于 127 称为上溢或正溢出,小于-128 称为下溢或负溢出。,溢出及其检测方法,郑州大学软件学院,17,2)溢出的判断方法 计算机只能判断溢出,不能处理溢出!下面介绍计算机判断溢出的方法。方法一:设 X补=X0 X1 X2 Xn,Y补=Y0 Y1 Y2 Yn,其和(或差)为 S 补=S0 S1 S2 Sn。则溢出条件为:V=X0 Y0/S0+/X0/Y0 S0,溢出及其检测方法,郑州大学软件学院,18,00.1001+00.0011 00.1100 不溢出,11.0111+11.1101 11.0100 不溢出,00.1101+00.1001 01.0110 溢出,11
10、.0011+11.0111 10.1010 溢出,观察下列算式:,可见,当结果两个符号位的值不一致时,表示溢出,若设两符号位 Sf1 和 Sf2,则:V=Sf1 Sf2,2)溢出的判断方法 方法二:采用变形补码(双符号位补码),比喻:比如第一道河坝拦不住水了,就再设一道。,这种方法好,但是增加一个符号位后,数据表示范围缩小了,最好改进只设置一个符号位!,溢出及其检测方法,郑州大学软件学院,19,2)溢出的判断方法 方法三:采用双高位判断 数值部分最高位产生的进位为Cs;(设置一触发器)符号位部分向上产生的进位为Cf。(设置一触发器)溢出条件公式:V=Cs Cf,0.1001+0.0011 0.
11、1100 不溢出,1.0111+1.1101 1.0100 不溢出,0.1101+0.1001 1.0110 溢出,1.0011+1.0111 0.1010 溢出,Cf=0 Cs=0,Cf=1 Cs=1,Cf=0 Cs=1,Cf=1 Cs=0,溢出及其检测方法,郑州大学软件学院,20,设两寄存器中存放A,B两数,进行运算.A寄存器:A0.A1 A2 An B寄存器:B0.B1 B2 Bn 则:A+B=A0.A1 A2 An+B0.B1 B2 Bn A-B=A0.A1 A2 An+B0.B1 B2 Bn+0.0001,且:A+B A AB A,累加器:硬件要支持软件,软件中有循环程序设计,所以要
12、设计累加器。SUM=1+2+3+4+5+100 S=S+X,补码定点加法器,X 补,Y 补,X+Y 补=X 补+Y 补,X-Y 补=X 补+/Y 补+1,郑州大学软件学院,21,四片4位ALU电路可组成16位ALU。(1110 1101 0101 0001)片内进位是快速的,但片间进位是逐片传递的,形成F0F15时间长。,知识回顾:算术逻辑单元,把16位ALU中的每四位作为一组,用类似四位超前进位加法器“位间快速进位”的形成方法来实现16位ALU(由四片ALU组成)中的“组间快速进位”,那么就能得到16位快速ALU。,郑州大学软件学院,22,CPA,2.3、补码定点加法器,+A,+B,-B,实
13、现加法运算的逻辑示例,A+B A AB A,郑州大学软件学院,23,定点乘法运算,注释:前面讲的内容帮助同学们打开怎么设计运算器的思路,分析怎么样的数的表示方法对运算有利,怎么样的数的表示方法对运算不利。硬件设计时,还要考虑怎样提高硬件运算速度。所以,以后讲的乘法除法要逐渐从怎么样提高计算机的运算速度来考虑。,郑州大学软件学院,24,乘法运算可以通过硬件实现,也可以通过软件来实现,硬件实现乘法是以加法器为基础逐步累加而成。1)、软件方法:通过乘法子程序在加/减运算器中实现。该方法经济,但是运算速度慢。2)、硬件方法:A、在加/减法运算器中增加一些移位和控制部件来实现。这种方法在早期的计算机采用
14、。B、随着大规模集成电路的发展,现在设计了阵列乘法器。设置专门的多位乘法部件,适用于高速大中型计算机。,定点乘法运算,郑州大学软件学院,25,根据数的表示方法,乘法器又有:原码乘法器,补码乘法器。原码乘法器实现乘法运算方法简单,补码乘法器实现加/减运算比较简单。所以在以加/减运算为主的机器中多采用补码乘法器。下面分别介绍原码、补码乘法。,定点乘法运算,郑州大学软件学院,26,原码一位乘法基本上是从手算演变过来,符号位单独处理。两个原码表示的数相乘,它的运算规则是:乘积的符号位通过两数的符号按异或运算得到,乘积则是两个操作数的绝对值相乘之积。运算方法与普通的十进制小数乘法相类似,对二进制更为简单
15、。设 n 位被乘数X 和 乘数Y 用定点小数表示(定点整数同样)被乘数:X原=Xf.Xn-1 X1 X0乘数:Y原=Yf.Yn-1 Y1 Y0乘积符号:Xf Yf 乘积:|X|Y|Z原=(Xf Yf)+(0.Xn-1 X1 X0)(0.Yn-1 Y1 Y0)于是原码与原码相乘就变成如何进行两个正数相乘的问题了。,原码一位乘法,郑州大学软件学院,27,设 X=0.1101,Y=-0.1011。让我们先用习惯的笔算方法求其乘积,其过程如下:,0.1101 乘数 X(4位)0.1011 被乘数 Y(4位)0.1101 0.1101 0.0000 0.1101 0.10001111 乘积 Z(8位),
16、注意:原码的符号位单独处理。,XY 原=1.10001111,原码一位乘法,郑州大学软件学院,28,手算方法存在的问题:1、小数点是移动的。2、常规加法器中,一次只能进行两个数相加,无法解决n个数一次性相加。3、n位数相乘用2n+1位加法器。所以需要解决的问题:1、小数点固定。2、一次只进行两个数相加。3、由n位加法器完成。,原码一位乘法,郑州大学软件学院,29,算法改造:X Y=X*0.1011=X*(0.1+0.00+0.001+0.0001)=0.1*X+0.00*X+0.001*X+0.0001*X=0.1 X+0.0*X+0.01*X+0.001*X=0.1 X+0.1 0+0.1*
17、X+0.01*X=0.1 X+0.1 0+0.1 X+0.1*X 0.1=2-1 指前次的和右移一位。XY=2-1 X+2-1 0+2-1 X+2-1(X+0),原码一位乘法,郑州大学软件学院,30,0.00000+0.1101+X 0.1101X+0 0.0110 12-1(X+0)+0.1101+X 1.0011 1X+2-1(X+0)0.1001 11 2-1(X+2-1(X+0)+0.0000+0 0.1001 110+2-1(X+2-1(X+0)0.0100 1112-10+2-1(X+2-1(X+0)+0.1101+X 1.0001 111X+2-10+2-1(X+2-1(X+0)
18、0.1000 11112-1X+2-10+2-1(X+2-1(X+0),设:X=0.1101,Y=-0.1011。XY=2-1 X+2-1 0+2-1 X+2-1(X+0)步骤如下:,1,1,0,1,Y,XY 原=1.10001111,原码一位乘法,郑州大学软件学院,31,改造算法以后分析:1、小数点固定了。2、一次只进行两个数相加。3、由于相加在高n位进行,所以只设n位加法器就可以了。上述三个问题得到了解决。但是只能说这个算法可行,如果引入计算机执行,还要与计算机的具体实现相结合。,原码一位乘法,郑州大学软件学院,32,实施方案:1、运算中,若 Yi=1 则+X;若 Yi=0 则+0。说明
19、Yi 起到判断运算的作用,运算后,Y 的值无需保留。这样,可以将 Yi 操作固定在最低位,即要求乘数Y每完成一步操作,右移一位。2、由于相加在高 n 位进行,乘积右移出的低位部分,可存入乘数Y的寄存器高位空出的位置中。3、为了在机器中实现乘法运算,运算器必须设置三个寄存器 A、B、C。寄存器 A 存放部分积(其初值为 0)和最后乘积的高位部分 寄存器 B 存放被乘数 X 寄存器 C 存放乘数 Y 运算后不再保留乘数Y,运算完成后存放乘积的低位部分。,原码一位乘法,郑州大学软件学院,33,0.00000+0.1101+X 0.1101X+0 0.0110 12-1(X+0)+0.1101+X 1
20、.0011 1X+2-1(X+0)0.1001 11 2-1(X+2-1(X+0)+0.0000+0 0.1001 110+2-1(X+2-1(X+0)0.0100 1112-10+2-1(X+2-1(X+0)+0.1101+X 1.0001 111X+2-10+2-1(X+2-1(X+0)0.1000 11112-1X+2-10+2-1(X+2-1(X+0),设:X=0.1101,Y=-0.1011。,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,Y,Y中最初装的是被乘数,最后装的是积的低位部分。,XY 原=1.10001111,原码一位乘法,郑州大学软件学
21、院,34,0.0000 设部分乘积 A=0+0.1101 Cn=1,+B 0.1101 0.0110 1 A、C 同时右移一位+0.1101 Cn=1,+B 1.0011 0.1001 11 A、C 同时右移一位+0.0000 Cn=0,再右移一位 0.1001 0.0100 111+0.1101 Cn=1,+B 1.0001 1.1000 1111 A、C 同时右移一位,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,设:X=0.1101,Y=1.1011。(绝对值相乘),0,0,0,0,寄存器A,1,1,0,1,寄存器C(Y),1,0,1,1,寄存器B(X)
22、,符号位=0+1=1,0,0,0,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,原码一位乘法,郑州大学软件学院,35,实现原码一位乘法的逻辑电路框图,X=1101,Y=1011X*Y低位:1111,X=0.1101 被乘数Y=0.1011 乘数X*Y=0.10001111,X*Y 初始:0000X*Y 高位:1000,郑州大学软件学院,36,X=0.1101 被乘数,Y=-0.1011 乘数,X*Y=1.100011111、A寄存器被清为零,作为初始部分积。被乘数放在 B寄存器中,乘数放在 C寄存器中。2、给
23、出控制命令 AALU 和 BALU,在ALU完成部分积和被乘数相加。3、ALU的输出经过移位电路向右移一位送入 A寄存器中。4、C寄存器是用移位寄存器实现的,其最低位用作BALU的控制命令。加法器最低一位的值,右移时将移入C寄存器的最高数值位,使相乘之积的低位部分保存进C寄存器中,原保存乘数逐位丢失。,原码一位乘法,郑州大学软件学院,37,1)校正法 采用补码后,当Y0时,Y补的各位除最后一个“1”与原码相同外,前面每位都相反,所以不能套用原码一位乘法法则。是否可以将补码按照原码一位法则运算,然后对乘的结果进行校 正,得到正确的XY补呢?,X补=X0.X1 X2 Xn Y补=Y0.Y1 Y2
24、Yn(X0 Y0 为符号位)X补*Y补=X补*(0.Y1 Y2 Yn)+-X补*Y0X符号任意,Y0 X补*Y补=X补*(0.Y1 Y2 Yn)X符号任意,Y0 X补*Y补=X补*(0.Y1 Y2 Yn)+-X补,补码一位乘法,郑州大学软件学院,38,0.0000 设部分乘积A=0+0.1101 Cn=1,+B 0.1101 0.0110 1 A、C 同时右移一位+0.0000 Cn=0,右移一位 0.0110 0.0011 01 A、C 同时右移一位+0.1101 Cn=1,+B 1.0000 0.1000 001+0.0000 Cn=0,右移一位 0.1000 0.0100 0001+-X
25、补 1.0011 XY补=1.0111 0001,设:X原=0.1101,Y原=1.1011。XY原=1.1000 1111 X补=0.1101,Y补=1.0101。XY补=|X|Y|+-X补,补码一位乘法,郑州大学软件学院,39,当代计算机都是补码运算,所以不用校正法,用比较法,比较法无需区别乘数的正负号,即X、Y符号均任意。2)比较法 比较法是由 布斯(Booth)夫妇提出的,故又称为Booth乘法。它是由校正法的统一公式:X补*Y补=X补*(0.Y1 Y2 Yn)+-X补*Y0 出发进一步推导变换,按机器执行顺序求出每一步的部分积如下:,Z0补=0Z1补=2-1 Z0补+(Yn+1-Yn
26、)X补 设:Yn+1=0Z2补=2-1 Z1补+(Yn-Yn-1)X补Zn补=2-1 Zn-1补+(Y2-Y1)X补所以:XY补=Zn+1补=Zn补+(Y1-Y0)X补,补码一位乘法,郑州大学软件学院,40,根据以上公式,在机器中具体实现时要做适当修正。实际在机器中并不计算 Yn+1-Yn,而是比较乘数相邻两位Yn+1 和 Yn。于是补码一位乘法法则为:判断位 Yi Yi+1 操作内容 00部分积加0,右移1位 11部分积加0,右移1位 10部分积加-X补,右移1位 01部分积加X补,右移1位,1)被乘数 X 与 部分积 Z 取双符号位,并参与运算。2)乘数 Y 末增设 Yn+1=0;设部分积
27、初始=0。3)根据Yn,Yn+1判断位,按上述算法进行n+1步乘法,最后一步不移位。,补码一位乘法,郑州大学软件学院,41,X=-0.1101 Y=0.1011X补=11.0011-X补=00.1101 Y补=0.1011部分积初始=0 乘数Y 设Yn+1=0判断 YnYn+1 00.0000 010110+00.1101 10:+-X补 00.1101 00.0110 1 01011 右移一位+00.0000 11:+0 00.0110 00.0011 01 0101 右移一位+11.001101:+X补 11.0110 11.1011 001 010 右移一位+00.1101 10:+-X
28、补 00.1000 00.0100 0001 01+11.0011 01:+X补 11.0111 0001 最后一步不移位,补码右移位前面补符号位,XY补=1.01110001,补码一位乘法,郑州大学软件学院,42,A,C,Yn Yn+1,LDR0,LDR1,加法器,+,B,原码,反码,&,Yn,Yn+1,&,Yn,Yn+1,+1,多路开关,被乘数X,乘数Y,部分积,01,10,计数器,补码一位乘法,郑州大学软件学院,43,将补码一位乘法(比较法)合成两步进而得补码两位乘法法则为:,1)符号参加运算。2)初始设置:设部分积为0,Yn+1=0 设置部分积与被乘数三个符号位。乘数Y数值部分为偶数设
29、两个符号位;为奇数设一个符号位;3)运算步骤:根据 Yn-1,Yn,Y n+1 判断操作如表所示;4)最后一步:乘数Y数值部分为偶数最后一步不移位;为奇数最后移一位。,补码两位乘法,组合值=Yn+Yn+1-2*Yn-1,郑州大学软件学院,44,X=-0.1101 Y=0.1011X补=111.0011-X补=000.1101 Y补=00.1011部分积初始=0 乘数Y 设Yn+1=0判断 Yn-1YnYn+1 000.0000 0010110+000.1101 110:+-X补 000.1101 000.0011 01 00101 右移两位+000.1101 101:+-X补 001.0000 000.0100 0001 001 右移两位+111.0011 001:+X补 111.0111 0001 001,XY补=1.01110001,补码两位乘法,郑州大学软件学院,45,作业,P290 6.19 6.20,Thank You!,
链接地址:https://www.31ppt.com/p-6063969.html