第4章计算机组成原理与系统结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章运算方法与运算器定点数的加减运算及实现4.1定点运算器的组成与结构定点数的乘法运算及实现4.2定点数除法运算及实现4.34.4浮点运算及运算器4.5浮点运算器举例4.6本章小结344.1定点数的加减运算及实现补码加减运算与运算器机器数的移位运算移码加减运算与判溢十进制加法运算一二三四MIPS的加减运算五5一、补码加减运算与运算器补码加减运算方法补码加减运算的溢出判断2补码加减运算器的实现3161、补码加减运算方法①补码的加减运算的公式是:[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补+[-Y]补②特点:使用补码进行加减运算,符号位和数值位一样参加运算。补码的减法可以用加法来实现,任意两数之差的补码等于被减数的补码与减数相反数的补码之和。注意:该公式不适合任何其他机器数编码(原码、反码、移码)。7求补运算:[Y]补→[-Y]补③求补规则:将[Y]补包括符号位在内每一位取反,末位加1。若[Y]补=Y0,Y1……Yn,则:若[Y]补=Y0.Y1……Yn,则:1YYY[-Y]n10补1YYY[-Y]n1000.0补例:[X]补=0.1101,则:[-X]补=?[Y]补=1.1101,则:[-Y]补=?1.00110.00118补码加减运算举例例:已知X=+1011,Y=-0100,用补码计算X+Y和X-Y。写出补码:[X]补=0,1011[Y]补=1,1100[-Y]补=0,0100计算:0,1011+1,11000,0111[X+Y]补=0,01110,1011+0,01000,1111[X-Y]补=0,111192、补码加减运算的溢出判断①溢出:当运算结果超出机器数的表示范围时,称为溢出。②对于加减运算,可能发生溢出的情况:同号(两数)相加,或者异号(两数)相减。③确定发生溢出的情况:正数相加,且结果符号位为1;负数相加,且结果符号位为0;正数-负数,且结果符号位为1;负数-正数,且结果符号位为0;10常用的判溢方法(补码加减运算)④单符号位判溢方法2当最高有效位产生的进位和符号位产生的进位不同时,加减运算发生了溢出。V=C1⊕Cf⑤双符号位判溢方法X和Y采用双符号位补码参加运算,正数的双符号位为00,负数的双符号位为11;当运算结果的两位符号Sf1Sf2不同时(01或10),发生溢出。V=Sf1⊕Sf2=Xf⊕Yf⊕Cf⊕SfSf1Sf2=01,则正溢出;Sf1Sf2=10,则负溢出。11双符号位判溢方法举例例:用补码计算X+Y和X-Y(1)X=+1000,Y=+1001(2)X=-1000,Y=1001[X]补00,1000+[Y]补00,1001[X+Y]补01,0001+[-Y]补11,0111[X]补00,1000[X-Y]补11,1111Sf1Sf2=01,正溢出Sf1Sf2=11,无溢出[X]补11,1000+[Y]补00,1001[X+Y]补00,0001+[-Y]补11,0111[X]补11,1000[X-Y]补10,1111Sf1Sf2=00,无溢出Sf1Sf2=10,负溢出123、补码加减运算器二进制并行加法器取反电路ABADD/SUBAfBfSfCfV133、补码加减运算器的实现①核心部件:一个普通的二进制并行加法器。A:累加器,存放[X]补;B:寄存器,存放[Y]补;②取反电路:=0时,补码加法器,将B寄存器直接送入并行加法器;=1时,补码减法器,将B送入并行加法器,同时,并行加法器的最低位产生进位,即B取反加1,此时并行加法器的运算相当于[A]补加[-B]补,完成减法运算。SUBADD/SUBADD/14二、机器数的移位运算二进制数据(真值)每相对于小数点左移一位,相当于乘以2;每相对于小数点右移一位,相当于除以2。1.计算机中的移位运算分为:逻辑移位:对无符号数据移位,导致无符号数据的数值(无正负)放大或缩小。算术移位:对带符号数据(机器数)移位,在数值的绝对值上进行放大或缩小,同时,符号位必须要保持不变。循环移位:所有的数据位在自身范围内进行左移或者右移,左移时最高位移入最低位,右移时最低位移入最高位。15二、机器数的移位运算2.补码的算术移位算术左移:符号位不变,高位移出,低位补0。①为保证补码算术左移时不发生溢出,移位的数据最高有效位必须与符号位相同。②在不发生溢出的前提下,用硬件实现补码的算术左移时,直接将数据最高有效位移入符号位,不会改变机器数的符号。算术右移:符号位不变,低位移出,高位正数补0,负数补1,即高位补符号位。XfX1X2Xn符号位0XfX1X2Xn符号位16补码的算术移位举例例:设X=0.1001,Y=-0.0101,求[X]补=?[2X]补=?[X/2]补=?[Y]补=?[2Y]补=?[Y/2]补=?0.10011.0010(溢出)0.01001.10111.01101.110117三、移码加减运算与判溢1.移码和移码计算[X]移=2n+X[Y]移=2n+Y-2n≤X≤2n-1[X]移+[Y]移=2n+X+2n+Y=2n+(2n+X+Y)=2n+[X+Y]移[X]移+[-Y]移=2n+[X-Y]移2.移码和补码混合计算[Y]补=2n+1+Y(mod2n+1)[X]移+[Y]补=[X+Y]移3.移码运算结果判溢:双符号位[X]移的最高符号位恒为0[Y]补采用双符号位0XfX1X2……XnYfYfY1Y2……YnSf1Sf2S1S2……Sn+18三、移码加减运算与判溢4.移码运算结果溢出的判断条件是:当结果的最高符号位Sf1=1时溢出,Sf1=0时结果正确。①Sf1Sf2=10时,结果正溢出;②Sf1Sf2=11时,结果负溢出。由于移码运算用于浮点数的阶码,当运算结果正溢出时,浮点数上溢;当运算结果负溢出时,浮点数下溢,当作机器零处理。19举例:X=+1000,Y=+1001,用移码计算X+Y和X-Y。解:[X]移=01,1000[Y]补=00,1001[-Y]补=11,0111[X+Y]移=[X]移+[Y]补=01,1000+00,1001=10,0001最高符号位为1,溢出,最低符号位为0,正溢出。[X-Y]移=[X]移+[-Y]补=01,1000+11,0111=00,1111最高符号位为0,无溢出,X-Y=-1。20四、十进制加法运算1.计算机中的十进制加法器通常采用BCD码设计,在二进制加法器的基础上,加上适当的校正电路,可以实现BCD码的加法器。2.对于8421BCD码来说,当相加的两数之和S9时,加6校正;当S≤9时,且无进位时,结果正确,不需校正。四位二进制加法器四位二进制加法器A8A1A2A4B8B1B2B4S8'S1'S2'S4'C00PC0S8S1S2S4C121五、MIPS的加减法指令以及溢出判断1、指令加(add)、立即数加(addi)、减法(sub)溢出时引起中断;无符号数加(addu)、无符号数立即数加(addiu)、无符号数减法(subu)在溢出时不引起中断。22MIPS的加减法运算举例add$t0,$t1,$t2#$t0=$t1+$t2;有符号数的加法运算sub$t2,$t3,$t4#$t2=$t3-$t4有符号数的减法运算addi$t2,$t3,5#$t2=$t3+5;操作数是立即数的加法运算addu$t1,$t6,$t7#$t1=$t6+$t7;无符号数的加法运算subu$t1,$t6,$t7#$t1=$t6-$t7;无符号数的减法运算23MIPS的加减法指令以及溢出判断2、测试溢出程序举例①无符号数加法($t0=$t1+$t2),判溢出测试程序:addu$t0,$t1,$t2nor$t3,$t1,$zero#$t3=~($t1|0)按位或非,即$t3=not$t1=232-1-$t1sltu#t3,$t3,$t2#if($t3=232-1-$t1)$t2即(232-1)($t1+$t2),#then$t3=1;else$t3=0bne$t3,$zero,Overflow#if$t3≠0则溢出24MIPS的加减法指令以及溢出判断有符号数加法($t0=$t1+$t2),判溢出测试程序:addu$t0,$t1,$t2#$t0=sum,但是没有陷入异常xor$t3,$t1,$t2#检查2个操作数符号是否不同slt$t3,$t3,$zero#小于比较,补码表示,if$t30,then$t3=1,else$t3=0,即符号不同$t3=1bne$t3,$zero,No_overflow#if$t3≠0,thengotoNo_overflow(No_overflow的地址是PC←PC+4+符号位扩展immediate2,即当前指令的下一条指令地址+符号位扩展immediate2)即$t1和$t2符号不同,则不会溢出25MIPS的加减法指令以及溢出判断xor$t3,$t0,$t1#如果$t1和$t2符号相同,那么它们与和的符号也相同吗?如果不同,则$t30slt$t3,$t3,$zero#如果操作数的符号相同,而结果与操作数符号不同,则置$t3=0bne$t3,$zero,verflow#if$t3≠0,thengotooverflow,即和与操作数符号不同,则溢出264.2定点数的乘法运算及实现由于计算机的软硬件在逻辑上具有一定的等价性,因此实现乘除法运算,可以有三种方式:⑴用软件实现①硬件上:设计简单,没有乘法器和除法器。②指令系统:没有乘除指令,但有加/减法和移位指令③实现:乘除运算通过编制一段子程序来实现④算法:程序中运用串行乘除运算算法,循环累加、右移指令→乘法,循环减、左移指令→除法。⑤运算速度:较慢。⑥适用场合:单片机。274.2定点数的乘法运算及实现⑵用硬件乘法器和除法器实现①硬件上:设置有并行加法器、移位器和若干循环、计数控制逻辑电路搭成的串行乘除法器。②指令系统:具有乘除法指令。③实现:乘除运算通过微程序一级(硬件+微程序)来实现。④算法:在微程序中依据串行乘除运算算法,循环累加、右移指令→乘法,循环减、左移指令→除法。⑤运算速度:有所提高,但硬件设计也相对复杂。⑥适用场合:低性能CPU。284.2定点数的乘法运算及实现⑶用高速的阵列乘法器和阵列除法器来实现①硬件上:设置有专用的、并行运算的阵列乘法器和阵列除法器。②指令系统:具有乘除法指令。③实现:完全通过硬件来实现。④算法:并行乘/除法。⑤运算速度:很快,但硬件设计相当复杂。⑥适用场合:高性能CPU。29乘除法运算的3种实现方法对比软件实现串行乘除法器并行乘除法器运算器硬件只有加减法器和移位器有乘法器和除法器并行乘、除法器乘除指令无,但有加减法指令和移位指令有有实现方法使用子程序实现硬件+微程序硬件工作原理串行乘除法算法串行算法并行算法运算速度慢较慢快适用场合早期单片机低性能单片机高性能CPU304.2定点数的乘法运算及实现原码乘法及实现补码乘法及实现阵列乘法器一二三串行乘法算法31一、原码乘法及实现手工乘法算法原码一位乘法算法原码乘法的硬件实现123321、手工乘法算法手工计算1011×1101,步骤:手工算法:对应每1位乘数求得1项位积,并将位积逐位左移,然后将所有的位积一次相加,得到最后的乘积。乘法的机器算法:从乘数的最低位开始,每次根据乘数位得到其位积,乘数位为0,位积为0,乘数位为1,则位积为被乘数;用原部分积右移1位加上本次位积,得新部分积;初始部分积为0。10111101×101100001011101110001111332、原码一位乘法算法假设[X]原=XSX1X2……Xn,[Y]原=YSY1Y2……Yn,P=X·Y,PS是积的符号:符号位单独处理Ps=Xs⊕Ys绝对值进行数值运算|P|=|X|*|Y|例:X=+1011,Y=-1101,用原码一位乘法计算P=X·Y。解

1 / 155
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功