《第3章运算方法与运算器PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第3章运算方法与运算器PPT讲稿.ppt(156页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章运算方法与运算器2022/9/171第1页,共156页,编辑于2022年,星期二本章学习本章学习内容内容基本算术逻辑运算电路定点加、减、乘、除运算浮点加、减、乘、除运算2022/9/172第2页,共156页,编辑于2022年,星期二3.1 算术逻辑运算的基本部件全加器及其连接(略)2022/9/173第3页,共156页,编辑于2022年,星期二3.2 定点补码加减运算由于原码加减算法复杂,而补码表示可以把加法、减法均转换为加法,大大简化了加减运算算法,所以在计算机中均采用补码加减运算。补码运算:参加运算的操作数均用补码表示并且运算结果也以补码表示。2022/9/174第4页,共156页,
2、编辑于2022年,星期二3.2.1 补码运算的基础1.补码运算的基本关系:x补y补xy补 x补y补xy补即:两数补码之和等于两数和的补码 两数补码之差等于两数差的补码2022/9/175第5页,共156页,编辑于2022年,星期二以定点小数为例证明上述关系的正确性。(1)设x0,y0,则x+y0由补码定义:x补x,y补y,x补+y补x+yx+y补(2)设x0,y0 且|x|y|由补码定义:x补x,y补2+y (mod2)x补+y补2+x+y|x|y|,x+y0 x+y补x+y2+x+y2 x补+y补x+y(mod2)即证得x补+y补x+y补 2022/9/176第6页,共156页,编辑于202
3、2年,星期二(3)设x0,y0 且|x|y|由补码定义:x补x,y补2+y (mod2)x补+y补2+x+y|x|y|x+y0因此 x+y补2+x+yx补+y补 (mod2)(4)设x0,y0由补码定义:x补2+x,y补2+y(mod2)x补+y补2+x+2+y2+2+x+y根据定点数数据表示范围的要求,舍去模2,得 x补+y补2+x+y2022/9/177第7页,共156页,编辑于2022年,星期二由于x0,y0 x+y0因而 x+y补2+x+yx补+y补当x0,y0时,证明方法与(2)、(3)相同。到此得证:x补+y补x+y补2022/9/178第8页,共156页,编辑于2022年,星期二
4、再证明x补y补x补y补xy补 x+y补x补+y补 x补y补xy补,所以只要证明一y补y补,则x补y补x补y补xy补 即可成立。证明:x+y补x补y补 y补xy补x补xy补x补+y补 y补xy补x朴2022/9/179第9页,共156页,编辑于2022年,星期二因此:y补+y补xy补xy补x补x补x+y+xy补x补x补x+x补x补x补x补+x补x补x补0 y补y补2022/9/1710第10页,共156页,编辑于2022年,星期二补码运算的基本规则:参加运算的各个操作数均以补码表示,运算结果仍以补码表示。符号位与数值位一样参加运算。若求和,则将两补码数直接相加,得到两数之和的补码;若求差,则将减
5、数变补(由y补求y补),然后与被减数相加,得到两数之差的补码。补码总是对确定的模而言,若运算结果超过模(有从符号位上产生的进位),则将模自动丢掉。2022/9/1711第11页,共156页,编辑于2022年,星期二例1:x0.1001,y0.0101,求xy?解:x补0.1001,y补0.0101,y补1.1011xy补x补y补0.10010.01010.1110 xy0.1110 xy补x补y补0.10011.10110.0100 xy0.01000.10010.10010.01010.01010.11100.11100.10010.10011.10111.10110.01000.01001
6、 1丢模丢模2022/9/1712第12页,共156页,编辑于2022年,星期二例2:x0.0110,y0.0011,求xy?解:x补1.1010,y补1.1101,y补0.0011xy补x补y补1.10101.11011.0111xy0.1001xy补x补y补1.10100.00111.1101xy0.00111.10101.10101.11011.11011.01111.01111.10101.10100.00110.00111.11011.11011 1丢模丢模2022/9/1713第13页,共156页,编辑于2022年,星期二例3:x0.1010,y0.1001,求xy?解:x补0.1
7、010,y补0.1001,xy补x补y补0.10100.1001结果溢出0.10100.10100.10010.10011.00111.00112022/9/1714第14页,共156页,编辑于2022年,星期二例4:x0.1101,y0.1011,求xy?解:x补1.0011,y补1.0101,xy补x补y补1.00111.0101结果溢出1.00111.00111.01011.01010.10000.10001 12022/9/1715第15页,共156页,编辑于2022年,星期二如果两个正数相加,得到结果的符号为负;两个负数相加,得到的结果为正,则运算结果是错误的。造成错误的原因,是因为
8、运算结果超出了机器所能表示的数据范围,数值位侵占了符号位,正确符号被挤走了。正溢出:两个正数相加的结果超出机器所能表示的最大正数。负溢出:两个负数相加的结果小于机器所能表示的最小负数。出现溢出后,机器将无法正确表示,因此必须正确判别溢出并及时加以处理。2022/9/1716第16页,共156页,编辑于2022年,星期二 3.2.2 溢出判别与变形补码设参加运算的操作数为x补Xf.X1X2Xn y补Yf.Y1Y2Yn x补y补的和为:s补Sf.S1S2Sn 发生溢出时 OVR1判断溢出的方法(1)根据两个操作数的符号与结果的符号判别由于参加运算的数都是定点数,所以只有两数同号时相加才可能溢出。所
9、以溢出的条件为:OVRXfYfSfXfYfSf(XfSf)(YfSf)即Xf和Yf均与Sf不同时,产生溢出。2022/9/1717第17页,共156页,编辑于2022年,星期二(2)根据两数相加时产生的进位判别设Cf为符号位上产生的进位,C1为最高数值位上产生的进位,则溢出的条件为:OVRCfC1CfC1CfC1 即若进入符号位的进位和从符号位上产生的进位不相等,则产生溢出。有的资料中将Cf写为C0,所以溢出条件为OVRC0C1C0C1C0C1如 XfYfSfXfYfSf1 CfC111.00111.00111.01011.01010.10000.10001 12022/9/1718第18页,
10、共156页,编辑于2022年,星期二溢出判断电路&=1=1XfSfYfOVR=1OVRCfC12022/9/1719第19页,共156页,编辑于2022年,星期二(3)采用变形补码运算使用一个符号位进行运算,当出现溢出时,正确的符号将被数值位侵占,符号位含义就会发生混乱。如果采用两个符号位进行运算,即使因出现溢出侵占了一个符号位,仍能保持最左边符号是正确的。变形补码:用两个符号位表示的补码。2022/9/1720第20页,共156页,编辑于2022年,星期二变形补码的定义纯小数的变形补码纯整数的变形补码2022/9/1721第21页,共156页,编辑于2022年,星期二变形补码的形式:x变形补
11、Xf1Xf2.X1X2Xn 设和的变形补码为 s变形补Sf1Sf2.S1S2Sn 变形补码的溢出判断条件:OVRSf1Sf2即当结果的两个符号位不一致时,出现溢出。其中:Sf1Sf200 或 11 表示正常补码Sf1Sf201 表示正溢出Sf1Sf210 表示负溢出2022/9/1722第22页,共156页,编辑于2022年,星期二例1:x0.1001,y0.0101,求xy?解:x变形补00.1001,y变形补00.0101 xy变形补00.100100.010100.1110 xy0.111000.100100.100100.010100.010100.111000.11102022/9/
12、1723第23页,共156页,编辑于2022年,星期二例2:x0.0110,y0.0011,求xy?解:x变形补11.1010,y变形补11.1101,xy变形补11.101011.110111.0111xy0.100111.101011.101011.110111.110111.011111.01111 1丢模丢模2022/9/1724第24页,共156页,编辑于2022年,星期二例3:x0.1010,y0.1001,求xy?解:x变形补00.1010,y变形补00.1001,xy变形补00.101000.1001Sf1Sf21 运算结果溢出00.101000.101000.100100.1
13、00101.001101.0011正溢出正溢出2022/9/1725第25页,共156页,编辑于2022年,星期二例4:x0.1101,y0.1011,求xy?解:x变形补11.0011,y变形补11.0101,xy变形补11.001111.0101Sf1Sf21 运算结果溢出11.001111.001111.010111.010110.100010.10001 1负溢出负溢出2022/9/1726第26页,共156页,编辑于2022年,星期二变形补码在正常情况下,Sf1Sf2,所以存储数据时采用正常补码,只在运算时采用变形补码,以便判别溢出。变形补码的溢出判断电路=1OVRSf1Sf2202
14、2/9/1727第27页,共156页,编辑于2022年,星期二3.2.3补码加减运算实现电路补码加减运算的硬件实现电路的基本原理仍是加法器。只是为了实现减法,需要在加法器电路中增加取反加1的功能。1.行波进位的补码加/减法器 AB补A补-B补A补B补1且 A1A 在需要作减法时,将B取反(B1)后送入加法器,并使C01,即可实现减法运算。2022/9/1728第28页,共156页,编辑于2022年,星期二行波进位的补码加/减法器电路2022/9/1729第29页,共156页,编辑于2022年,星期二M0 Bi通过异或门与0异或,Bi0Bi,C00 作 ABM1 Bi通过异或门与1异或,Bi1B
15、i,C01 作 AB电路中采用进出符号位的进位进行溢出判断。OVRCnCn12022/9/1730第30页,共156页,编辑于2022年,星期二2.实现补码加减运算的逻辑电路在实际应用中,两个操作数需要存放在寄存器中,运算时送到运算器中进行运算,运算结果再送到寄存器中保存。SUBSUBA 1&BADDADDB BB BC C0 02022/9/1731第31页,共156页,编辑于2022年,星期二A寄存器:运算前存放操作数,运算后存放运算结果。也称为累加器。B寄存器:有两个输出端 B 和 B。ADD和SUB:由加、减法指令控制。ADD1 执行加法指令SUB1 执行减法指令ADD0&SUB0 执
16、行的不是加、减法指令2022/9/1732第32页,共156页,编辑于2022年,星期二补码加减运算的逻辑电路的控制信号2022/9/1733第33页,共156页,编辑于2022年,星期二上图是实现A(A)(B)的补码加减运算的逻辑电路。参加运算的两个补码数分别存放在寄存器A、B中,运算结果保存在寄存器A中。运算控制信号的逻辑条件为:AADD+SUB BADD BSUB C01SUB AADD+SUB2022/9/1734第34页,共156页,编辑于2022年,星期二3.3 定点乘法运算利用乘除运算子程序实现乘除运算基本思想:采用软件实现乘除运算。通常是利用计算机中的加/减运算指令、移位指令及
17、控制类指令组成循环程序,通过在运算器中的加法器、移位器等基本部件上的反复加/减操作,得到运算结果。这种方式所需硬件简单,但实现速度较慢,主要应用在早期的小、微型机上。2022/9/1735第35页,共156页,编辑于2022年,星期二采用乘除运算部件实现乘除运算基本思想:在加法器的基础上增加左、右移位及计数器等逻辑线路构成乘除运算部件来实现乘除运算。设置有乘除运算指令,用户只需执行乘除指令即可进行乘除运算。实现乘除运算的速度比上一种方式快,但需要根据一定的乘除算法构建乘除运算部件,所需的硬件线路较复杂。2022/9/1736第36页,共156页,编辑于2022年,星期二利用专用阵列乘除运算器实
18、现乘除运算基本思想:将多个加减运算部件排成乘除运算阵列,依靠硬件资源的重复设置,同时进行多位乘除运算的乘除运算,从而赢得乘除运算的高速度。2022/9/1737第37页,共156页,编辑于2022年,星期二定点乘法运算原码乘法运算 补码乘法运算定点除法运算原码除法运算 补码除法运算 采用乘除运算部件实现乘除运算采用乘除运算部件实现乘除运算2022/9/1738第38页,共156页,编辑于2022年,星期二例3.8:x0.1101,y0.1011 求xy?2022/9/1739第39页,共156页,编辑于2022年,星期二现象:(1)每个部分积的值是由乘数y对应位的数值决定的。当乘数对应位数值为
19、1时部分积取值为被乘数x,当乘数对应位数值为0时部分积取值为全0。(2)各相加数从乘数的最低位到最高位,逐位求取,并将求得的各相加数逐个左移一位,最后一步一次求和。(3)两个n位数相乘得8位乘积,共n个部分积需2n位加法器相加。2022/9/1740第40页,共156页,编辑于2022年,星期二有问题!(1)在最后一步一次完成了n个部分积的求和,而计算机运算器很难实现一次完成多个数据的同时相加,通常只能完成对两个数的求和。(2)每次得到的部分积都需左移一位,最终部分积的位数将变为乘数y位数的两倍,这将要求计算机加法器的位数是寄存器位数的两倍,而计算机设计时加法器的位数一般与寄存器的位数相同。(
20、3)部分积取被乘数x的值还是取零值是由乘数对应位上的取值为1还是0决定的,乘数y每一位的值是0还是1都能直接看见。而在计算机内从存放乘数的寄存器中逐位取出每一位来判别该位值是0还是1来决定相加数的值是不方便的。2022/9/1741第41页,共156页,编辑于2022年,星期二3.3.1 原码乘法运算在定点机中,两个数的原码乘法运算包括:(1)乘积的符号处理(2)两数绝对值相乘设 x原xf.x1x2xn y原yf.y1y2yn Z原x原y原zf.z1z2zn符号处理:根据“同号相乘,乘积为正;异号相乘,乘积为负”,得符号运算的表达式为 zfxfyf。2022/9/1742第42页,共156页,
21、编辑于2022年,星期二一位原码乘法运算xyx0.y1y2y3y4 x(2-1y12-2y22-3y32-4y4)2-1xy12-2xy22-3xy32-4xy4 2-12-3xy42-2xy32-1xy2xy1 2-12-12-2xy42-1xy3xy2xy1 2-12-12-1(2-1xy4xy3)xy2xy1 2-12-12-1(2-1xy3)xy2xy12022/9/1743第43页,共156页,编辑于2022年,星期二根据上式,可将乘法转换为一系列加法与移位操作。将递推公式推广到n位,得:Z00(初始部分积为0)Z12-1(Z0 xyn)Z22-1(Z1xyn-1)Zn2-1(Zn-
22、1xy1)xy2022/9/1744第44页,共156页,编辑于2022年,星期二原码一位乘法的算法积的符号单独按两操作数的符号模2加(异或)得到。用被乘数和乘数的数值部分进行运算。以乘数的最低位作为乘法判别位,若判别位为1,则在前次部分积(初始部分积为0)上加上被乘数,然后连同乘数一起右移一位;若判别位为0,则在前次部分积上加0(或不加),然后连同乘数一起右移一位。重复第步直到运算n次为止。(n为乘数数值部分的长度)2022/9/1745第45页,共156页,编辑于2022年,星期二例3.9 根据原码一位乘法的算法计算例3.8。解:x原0.1101,y原1.1011,乘积 z原xy原 符号位
23、单独处理得 zf011 将被乘数和乘数的绝对值的数值部分相乘。|x|原0.1101|y|原0.1011 原码一位乘法计算演示动画数值部分为4位,共需运算4次。得:|xy|0.10001111加上符号部分得:xy原1.10001111 即:xy0.10001111 2022/9/1746第46页,共156页,编辑于2022年,星期二原码一位乘法的硬件实现2022/9/1747第47页,共156页,编辑于2022年,星期二A寄存器:存放部分积高位部分,初始为0B寄存器:存放被乘数xC寄存器:存放乘数y和部分积低位部分,初始为乘数yCR:计数器。用于记录乘法次数 运算初始时,CR0,每进行一次运算C
24、R1,当计数到CRn时,将CT清0,结束运算。Cj:进位位CT:乘法控制触发器,CT1,允许发出移位脉冲,进行乘法运算 CT0,不允许发出移位脉冲,停止乘法运算2022/9/1748第48页,共156页,编辑于2022年,星期二问题回顾(1)在最后一步一次完成了n个部分积的求和,而计算机运算器很难实现一次完成多个数据的同时相加,通常只能完成对两个数的求和。(2)每次得到的部分积都需左移一位,最终部分积的位数将变为乘数y位数的两倍,这将要求计算机加法器的位数是寄存器位数的两倍,而计算机设计时加法器的位数一般与寄存器的位数相同。(3)部分积取被乘数x的值还是取零值是由乘数对应位上的取值为1还是0决
25、定的,乘数y每一位的值是0还是1都能直接看见。而在计算机内从存放乘数的寄存器中逐位取出每一位来判别该位值是0还是1来决定相加数的值是不方便的。2022/9/1749第49页,共156页,编辑于2022年,星期二问题解决啦!(1)设初始部分积的值为0,每求得一个部分积,就同时与上一次部分积相加,每次运算器都是完成两个数据的加法,最终可得到结果。(2)将每次的部分积左移一位操作变为加法之前部分积右移一位来实现,因为前一次部分积的最低位是不参与相加计算的,将右移操作移出位用专门的寄存器来保存。(3)每求一次部分积时,使存放乘数y的寄存器执行一次右移操作,这样每次就从寄存器的最低位直接取值就可以了。2
26、022/9/1750第50页,共156页,编辑于2022年,星期二原码一位乘法的运算流程2022/9/1751第51页,共156页,编辑于2022年,星期二课后延伸编写一个程序计算123456789012345678990,将结果输出。提示:大数相乘过程中会超过计算机中整型数据的表示范围,因此必须利用本次学习的乘法运算过程借助于字符串实现。2022/9/1752第52页,共156页,编辑于2022年,星期二2.原码两位乘法多位乘法的思想原码一位乘法每次判别乘数的一位,因此n位乘数需做n次加法与移位,从而使乘法速度较慢。如果一次判别乘数的多位,就会提高乘法速度。原码两位乘法的算法:每次判别乘数的
27、两位,将一位乘法中的两步用一步替代。2022/9/1753第53页,共156页,编辑于2022年,星期二Yn-1Yn部分积 Zi 0 0(Zi-10)0=1/4(Zi-10)0 1(Zi-1x)0=1/4(Zi-1x)1 0(Zi-10)x=1/4(Zi-12x)1 1(Zi-1x)x=1/4(Zi-13x)=1/4(Zi-1x)x原码两位乘法的算法2022/9/1754第54页,共156页,编辑于2022年,星期二由于加三倍被乘数难以实现,所以需要进行适当变换。本次仅作1/4(Zi-1x),+x到下次再做,本次先欠着。为此设一个欠帐触发器CJ,记录本次欠帐的情况。若CJ1,则下次需多加一个x
28、 CJ0,下次就不多加x2022/9/1755第55页,共156页,编辑于2022年,星期二Yn1YnCJ操作000Zi-1 CJ0001(Zi-1x)CJ0 还上次欠帐010(Zi-1x)CJ0011(Zi-12x)CJ0 还上次欠帐100(Zi-12x)CJ0101(Zi-1x)CJ1 为了3x,欠帐110(Zi-1x)CJ1 留下欠帐111Zi-1 CJ1 还上次欠帐,再留下欠帐原码两位乘法的运算规则2022/9/1756第56页,共156页,编辑于2022年,星期二原码两位乘法的运算次数当数值部分长度n为奇数时,将乘数加一符号且为0,以便形成偶数位,此时共做(n+1)/2次运算,最后一
29、次仅移一位。若操作数字长为奇数,去掉一位符号位后,数值部分长度n为偶数,则共做n/2次。若最后一次CJ仍为1,则需再做一次加x操作,以便还清欠帐。2022/9/1757第57页,共156页,编辑于2022年,星期二因为在二位乘法中,需要作2x,即左移2位,会侵占符号位。而作加法时,进位不能丢失,所以二位乘法乘法需要使用三个符号位。000 表示 111 表示注意:操作数本身的符号不参加运算。在运算初始时,被乘数和乘数的符号位均为000。因为在运算过程中,需要作x操作,因此在作减法时,需要用到-|x|补。2022/9/1758第58页,共156页,编辑于2022年,星期二例:x原1.01101 y
30、原1.10111 求xy原?|x|原000.01101|y|原0.101112|x|原000.11010|x|补111.10011 Zf110 xy原0.01001010112022/9/1759第59页,共156页,编辑于2022年,星期二2022/9/1760第60页,共156页,编辑于2022年,星期二例:x原0.1101 y原1.1111 求xy?|x|原000.1101|y|原0.11112|x|原001.1010|x|补111.0011 Zf011xy原1.11000011 xy0.11000011 2022/9/1761第61页,共156页,编辑于2022年,星期二000.000
31、0000.0000111.0011111.001111 11 11 011 0部分积部分积C CJ J乘数乘数x x111.0011111.0011111.1100111.110011 11 11 11 1 12 2111.1111111.11110011 0011 1 1000.1101000.1101x x000.1100000.1100C CJ J1 12 2001100112022/9/1762第62页,共156页,编辑于2022年,星期二3.2.2 补码乘法运算因为补码加减运算简单,在实际机器中都采用补码加减运算,因此不少机器也采用补码乘法,以减少原码与补码之间的不断转换。计算机中常
32、用的补码乘法算法,称为比较法或加减交替乘法。因为是由布斯夫妇提出的,所以也称布斯乘法。2022/9/1763第63页,共156页,编辑于2022年,星期二1.补码一位乘法2022/9/1764第64页,共156页,编辑于2022年,星期二2022/9/1765第65页,共156页,编辑于2022年,星期二2022/9/1766第66页,共156页,编辑于2022年,星期二2022/9/1767第67页,共156页,编辑于2022年,星期二(1)参加运算的数均以补码表示,符号位参加运算且部分积与被乘数采用双符号位。(2)乘数末位增设附加位yn+1,且初始yn+10。(3)以ynyn+1作为乘法判
33、别位:若ynyn+100或11,则前次部分积(初始部分积为0)加0(或不加),然后连同乘数右移一位。若ynyn+101,则前次部分积加x补,然后连同乘数右移一位;若ynyn+110,则前次部分积加x补,然后连同乘数右移一位。(4)重复上面第(3)步,共做n+1次,最后一次不移位。补码一位乘法算法(布斯乘法)2022/9/1768第68页,共156页,编辑于2022年,星期二例:x0.1101 y0.1011 求xy?解:x补1.0011,y补1.0101,x补0.1101 共运算415次xy补0.10001111xy0.10001111注意:运算初始时,部分积Z00部分积右移时,必须按补码移位
34、规则,连同符号位同时右移。运算n+1次的“n”是指数值位的长度。2022/9/1769第69页,共156页,编辑于2022年,星期二2022/9/1770第70页,共156页,编辑于2022年,星期二例:x10110 y11001 求xy?解:x补1101010,y补011001,x补0010110 xy补10111011010 xy10001001102022/9/1771第71页,共156页,编辑于2022年,星期二2022/9/1772第72页,共156页,编辑于2022年,星期二补码一位乘法的硬件实现逻辑图2022/9/1773第73页,共156页,编辑于2022年,星期二A寄存器:存
35、放乘积和部分积高位部分B寄存器:存放被乘数,可以输出 B 和 B。C寄存器:存放乘数和部分积低位部分CR:计数器。用于记录乘法次数运算初始时,CR0,每进行一次运算CR1,当计数到CRn1时,结束运算。由于CRn时,就将CT清0,所以在n1次运算不再进行移位。Af1、Af2:双符号位,符号位和数值位同时参加运算。CT:乘法控制触发器,CT1,允许发出移位脉冲,进行乘法运算CT0,不允许发出移位脉冲,停止乘法运算2022/9/1774第74页,共156页,编辑于2022年,星期二Cn和Cn1:控制电路中是作x补还是x补。Cn Cn1操 作01前次部分积加 B,然后连同乘数右移一位10前次部分积加
36、 B1,然后连同乘数右移一位0011前次部分积加0,然后连同乘数右移一位2022/9/1775第75页,共156页,编辑于2022年,星期二补码一位乘法的流程图2022/9/1776第76页,共156页,编辑于2022年,星期二补码一位乘法的流程图中,对寄存器A和C的移位是在对CR进行判断之后进行的,表示在第n1次运算后不进行移位。2022/9/1777第77页,共156页,编辑于2022年,星期二补码两位乘法补码两位乘法算法的判别位是yn1yn yn1,它实际是把比较ynyn1与比较yn1yn两步并做一步。当n为奇数时,乘数采用一个符号位,共做(n+1)/2次,最后一次仅移一位;当n为偶数时
37、,乘数采用两个符号位,共做n/2+1次,最后一次不移位。运算时部分积与被乘数采用三个符号位。2022/9/1778第78页,共156页,编辑于2022年,星期二2022/9/1779第79页,共156页,编辑于2022年,星期二例:x补0.11011 y补1.10110 求xy补?解:x补000.11011,x补111.00101 2x补001.10110,2x补110.01010 xy补1.1011110010 xy0.01000011102022/9/1780第80页,共156页,编辑于2022年,星期二2022/9/1781第81页,共156页,编辑于2022年,星期二3.4 定点除法运
38、算除法运算的处理思想与乘法运算的处理思想相似,其常规算法也是转换成若干次“加减移位”循环来实现。由于定点运算的结果不应超过机器的所能表示的数据范围,所以为了不使商产生溢出,在进行定点除法时应满足:对定点小数要求:|被除数|除数|对定点整数要求:|被除数|除数|2022/9/1782第82页,共156页,编辑于2022年,星期二3.4.1 原码除法运算例:x0.1011,y0.1101 求x/y商 q0.1101 余数 r0.0111242022/9/1783第83页,共156页,编辑于2022年,星期二1.原码恢复余数法原码恢复余数法算法:判溢出,要求|被除数|除数|;符号位单独按两数符号的模
39、2相加求得;被除数减去除数;若所得余数为正,表示够减,相应位上商为1,余数左移一位(相当于除数右移)减去除数;若所得余数为负,表示不够减,相应位上商为0,余数加上除数(恢复余数),再左移一位减去除数;重复第步,直到求得所要求的商的各位为止。2022/9/1784第84页,共156页,编辑于2022年,星期二例:x0.1011 y0.1101 求x/y原。解:|x|00.1011|y|00.1101-|y|补11.00112022/9/1785第85页,共156页,编辑于2022年,星期二2022/9/1786第86页,共156页,编辑于2022年,星期二得 商|q|0.1101,余数|r|0.
40、0111商的符号qfxfyf101 商 q原1.1101余数 r原1.011124注意:余数符号与被除数符号相一致。2022/9/1787第87页,共156页,编辑于2022年,星期二在恢复余数法中:余数为正时,需作余数左移、相减,共两步操作;余数为负时,需作相加、左移、相减,共三步操作。由于操作步骤的不一致,控制复杂。且恢复余数的过程也降低了除法速度。因此在实际应用中,很少采用恢复余数法。2022/9/1788第88页,共156页,编辑于2022年,星期二2.原码不恢复余数法(加减交替法)在恢复余数法中,若某次余数ri0,它的操作是相加(恢复余数)左移减除数,结果是2(riy)y。把它变换一
41、下,即 2(riy)y2ri2yy2riy 原码不恢复余数法将原码恢复余数法中余数ri0时的操作相加、左移、相减三步,用左移、相加两步来代替。这样,既可节省恢复余数的时间,又简化了控制逻辑(余数为正为负,均为左移、加/减两步)。2022/9/1789第89页,共156页,编辑于2022年,星期二原码不恢复余数法算法 判溢出,若|被除数|除数|,则除法将发生溢出,不需进行除法运算;商的符号单独按两个操作数符号的模2加法求得;被除数减去除数;若所得余数为正,表示够减,相应位上商为1,将余数左移一位减去除数;若所得余数为负,表示不够减,相应位上商为0,将余数左移一位加上除数;重复第步,直到求得所要求
42、的商的各位为止。2022/9/1790第90页,共156页,编辑于2022年,星期二在原码不恢复余数法中,如果最后一次所得余数仍为负,表示不够减,这时需要在做一次加除数的操作,以便得到正确的余数。例1:x原1.1011,y原0.1101,求x/y。解:|x|00.1011|y|00.1101-|y|补11.0011得 商|q|0.1101,余数|r|0.0111商的符号qfxfyf101 商 q原1.1101余数 r原1.0111242022/9/1791第91页,共156页,编辑于2022年,星期二2022/9/1792第92页,共156页,编辑于2022年,星期二例2:x原0.10101,
43、y原0.11110,求x/y。解:|x|00.10101|y|00.11110-|y|补11.00010 商 q原0.10110余数 r原0.01100252022/9/1793第93页,共156页,编辑于2022年,星期二2022/9/1794第94页,共156页,编辑于2022年,星期二原码不恢复余数法的硬件实现Af2022/9/1795第95页,共156页,编辑于2022年,星期二在除法运算中,2n位被除数除以n位除数可得到n位的商。因此要求被除数采用双字长,即需要两个n位字长的寄存器存放被除数。这种方法称为双精度除法。A寄存器:存放被除数和余数,最终结果是余数。B寄存器:存放除数。C寄
44、存器:存放被除数和商,最终结果是商。运算过程中寄存器A、C联合左移。商的符号Cf:CfAfBf运算过程中用f控制上商。f0,说明余数r0,商1,作B操作,即 B1。f1,说明余数r0,商0,作B操作。2022/9/1796第96页,共156页,编辑于2022年,星期二以上算法同样适用于定点整数除法。实现定点整数除法时,注意要满足|被除数|除数|,且被除数的高n位要比n位除数小,否则即为溢出。在实现定点小数和定点整数除法时,寄存器的分配使用略有不同。2022/9/1797第97页,共156页,编辑于2022年,星期二2022/9/1798第98页,共156页,编辑于2022年,星期二例3 x27
45、,y2,求x/y?解:x(27)10(11011)2 y(2)10(00010)2 x原111011,y原000010|x|000000011011,|y|0000010,|y|补11111102022/9/1799第99页,共156页,编辑于2022年,星期二第一个商若为第一个商若为0 0,表示,表示未溢出;若为未溢出;若为1 1,表示,表示溢出溢出2022/9/17100第100页,共156页,编辑于2022年,星期二运算后得:|x/y|001101,|r|000001xfyf101x/y原101101,r原100001x/y(01101)213r(00001)212022/9/17101
46、第101页,共156页,编辑于2022年,星期二例4:设n5,x567,y27,求x/y?解:x(567)10(1000110111)2 y(27)10(11011)2|x|001000110111|y|0011011|y|补11001012022/9/17102第102页,共156页,编辑于2022年,星期二2022/9/17103第103页,共156页,编辑于2022年,星期二运算后得:|x/y|010101,|r|000000 xfyf000 x/y原010101,r原000000 x/y(10101)221r02022/9/17104第104页,共156页,编辑于2022年,星期二3.
47、5 定点运算器的基本结构及举例3.5.1 运算器的基本结构 运算器是CPU的重要组成部分,它是计算机对数据进行加工处理的部件,不仅可以完成数据信息的算术逻辑运算,而且也作为数据信息的主要通路。运算器结构的基本组成部分:包括ALU、寄存器、多路开关和数据总线等基本逻辑部件。运算器设计主要是围绕着ALU和寄存器同数据总线之间如何传送操作数和运算结果而进行的。2022/9/17105第105页,共156页,编辑于2022年,星期二1单总线结构运算器单总线结构运算器:所有部件都接在同一总线上。在同一时间内,只能有一个操作数放在单总线上,所以需要A、B两个缓冲器。执行双操作数运算的操作步骤:把一个操作数
48、送入A缓冲器。把另一操作数送入B缓冲器,只有两个操作数同时出现在ALU的输入端时,ALU才能正确执行相应运算,并将运算结果送上单总线。把结果存入目的寄存器中。单总线结构运算器的主要缺点是操作速度慢。2022/9/17106第106页,共156页,编辑于2022年,星期二单总线结构运算器2022/9/17107第107页,共156页,编辑于2022年,星期二2双总线结构运算器双总线结构运算器:操作部件连接在两组总线上。执行双操作数运算的操作步骤:两个操作数同时加到ALU输入端进行运算,一步完成操作并得到结果。但ALU输出不能直接加到数据总线上,需要用输出缓冲器暂存运算结果。把结果从缓冲器中传送到
49、目标寄存器中。双总线结构运算器的执行速度比单总线结构运算器的执行速度快。2022/9/17108第108页,共156页,编辑于2022年,星期二双总线结构运算器2022/9/17109第109页,共156页,编辑于2022年,星期二3三总线结构运算器三总线结构运算器:操作部件连接在三组总线上。执行双操作数运算的操作步骤:由于三总线结构运算器有三组总线,能够分别接收两个操作数和ALU结果,因此只需一步就可完成一次双操作数运算。与前两种结构的运算器相比较,三总线结构运算器的操作速度最快,不过其控制也更复杂。在三总线结构运算器中,还可以设置总线旁路器。如果一个操作数不需运算操作或修改,可通过总线旁路
50、器直接从总线2传送到总线3,而不必经过ALU。2022/9/17110第110页,共156页,编辑于2022年,星期二三总线结构运算器2022/9/17111第111页,共156页,编辑于2022年,星期二3.5.2 运算器的组成实例1最简单的运算器最基本的运算器由算术逻辑部件ALU、累加器(AC)、数据缓冲寄存器(MDR)组成。运算器与存储器之间通过一条双向数据总线进行联系,可以实现从存储器中读取一个数据经MDR、ALU存放在AC中,也可把AC中信息经MDR存入主存的指定单元。它也可以实现AC中数据与主存某一单元的数据经ALU运算,结果暂存于AC中。2022/9/17112第112页,共15