计算机组成原理_白中英_第二章__运算方法和运算器2

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

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

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

资源描述

2020年2月6日4时55分12020年2月6日4时55分§2.2定点加法、减法运算一、补码的加减法运算1、加法任意两个数的补码之和,等于该两数和的补码。[X+Y]补=[X]补+[Y]补(mod2)两个数不管正负,均用补码表示,符号位应当做数值参加运算,符号位相加所产生的进位要丢掉,结果为补码。2020年2月6日4时55分22020年2月6日4时55分可以证明:[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补+[-Y]补•[-Y]补的求法:将[Y]补连同符号位求反加1。例:X=1001Y=0101,求X+Y=?解:[X]补=01001[Y]补=00101[X+Y]补=[X]补+[Y]补=01001+00101=01110例:X=1001Y=-0101,求X+Y=?解:[X]补=01001[Y]补=11011[X+Y]补=[X]补+[Y]补=01001+11011=001102020年2月6日4时55分32020年2月6日4时55分定点运算器——定点加减法•例:X=0.1011Y=-0.0101,求X+Y=?解:[X]补=0.1011[Y]补=1.1011+011010.丢到1[X]补+[Y]补=0.0110X+Y=0.01102020年2月6日4时55分42020年2月6日4时55分定点运算器——定点加减法•例:X=-11001,Y=-00011,求X+Y=?解:[X]补=100111[Y]补=111101+001011丢到1[X]补+[Y]补=100100X+Y=-111000由以上两例看到,补码加法的特点:一是符号位要作为数的一部分一起参加运算。二是要在模2的意义下相加,即超过2的进位要丢掉!2020年2月6日4时55分52020年2月6日4时55分定点运算器——定点加减法•补码的减法:[X]补-[Y]补=[X+(-Y)]补=[X]补+[-Y]补(-Y)的补码称为[Y]补的机器负数,由[Y]补求[-Y]补的过程称为将[Y]补“变补”或对[Y]补求补,由[Y]补求[-Y]补的方法是,不管Y的真值为正或为负,都是将[Y]补的各位连同符号位在内全变反后,最低位加1。2020年2月6日4时55分62020年2月6日4时55分定点运算器——定点加减法•例:X=-0.1011Y=-0.0110,求X-Y=?解:[X]补=1.0101[-Y]补=0.0110+11011.[X-Y]补=1.1011X-Y=-0.01012020年2月6日4时55分72020年2月6日4时55分二、溢出及其判别方法:•在计算机中,由于机器码的尾数通常是给定的(如16位字长,32位字长),因此,在计算机中数的表示范围是有限的,若两数进行加减运算的结果超出了给定的取值范围,就称为溢出。一旦出现溢出,必须及时处理,否则会出现错误。2020年2月6日4时55分82020年2月6日4时55分1、溢出例1:X=1010Y=1001求X+Y解:[X]补=01010+[Y]补=0100110011例2:X=-1010Y=-1011求X+Y解:[X]补=10110+[Y]补=1010101011较大正数相加产生进位,影响符号位较大的负数对应较小的正数补码相加无进位,符号位自己相加2020年2月6日4时55分92020年2月6日4时55分2、溢出原因:1)两个正数太大:产生进位而改变了符号位;2)两个负数绝对值太大:对应的补码太小,不能向符号位产生进位,使符号位相加后,向前产生进位。1、两异号数相加或两同号数相减是否会产生溢出?2、仅当两同号数相加或两异号数相减时才有可能产生溢出?问题:决不会产生溢出正确2020年2月6日4时55分102020年2月6日4时55分•例:X=-0.100Y=-0.101,求X+Y=?解:[X]补=1.100[Y]补=1.011+11110.丢到1两负数相加,结果应为负数,但运算结果为正数,表明有溢出发生。数据向前无进位,符号位向前有进位3、溢出的判断1)采用单符号位的判断方法2020年2月6日4时55分112020年2月6日4时55分•例:X=100,Y=-110,求X-Y=?解:[X]补=0100[-Y]补=0110+011一个正数减去一个负数,结果为正数,但计算结果为负数,表明有溢出发生,出错数据向前有进位,符号位向前无进位0溢出逻辑表达式为:V=Cf⊕C0(其中Cf为符号位产生的进位,C0为最高有效位产生的进位)2020年2月6日4时55分122020年2月6日4时55分•溢出的原因:•之所以发生错误,是因为运算结果产生了溢出。两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。•为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法是采用双符号位法,这称为“变形补码”或“模4补码”。从而可使模2补码所能表示的数的范围扩大一倍。2020年2月6日4时55分132020年2月6日4时55分定点运算器——定点加减法•采用双符号位的判断方法每个操作数的补码符号用两个二进制数表示,称为交形补码,用“00”表示正数,“11”表示负数,左边第一位叫第一符号位,右边第一位称为第二符号位,两个符号位同时参加运算,如果运算结果两符号位相同,则没有溢出发生。如果运算结果两符号位不同,则表明产生了溢出。“10”表示负溢出(下溢出),说明运算结果为负数,“01”表示正溢出(上溢出),说明运算结果为正数。2020年2月6日4时55分142020年2月6日4时55分定点运算器——定点加减法采用双符号位的判断方法高符号位低符号位结果00正01上溢10下溢11负2020年2月6日4时55分152020年2月6日4时55分定点运算器——定点加减法•利用进位值的判断方法两补码数进行加减运算时,若最高数值位产生向符号的进位而符号位不产生进位时,发生正溢出,若最高数值位无进位而符号位有进位时,发生负溢出。2020年2月6日4时55分162020年2月6日4时55分•例:X=+0.1100Y=+0.1000,求X+Y=?解:[X]补=00.1100[Y]补=00.1000+01.0100正数太大了,向前有进位,而符号位向前无进位;两个符号位:01,表示溢出2020年2月6日4时55分172020年2月6日4时55分例:X=-0.1100Y=-0.1000,求X+Y=?解:[X]补=11.0100[Y]补=11.1000+10.1100负数绝对值太大了对应的补码小,向前无进位,而符号位向前有进位;两个符号位:10,表示溢出溢出逻辑表达式为:V=Sf1⊕Sf2(其中Sf1为最高符号位,Sf2为第二符号位)2020年2月6日4时55分182020年2月6日4时55分•由此可以得出如下结论:•1.当以模4补码运算,运算结果的二符号位相异时,表示溢出;相同时,表示未溢出。•2.模4补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。2020年2月6日4时55分192020年2月6日4时55分三、基本的加法/减法器1、一位全加器FAAiBiCiCi+1Si向高位进位本位输出结果输入输出AiBiCiSiCi+10000000110010100110110010101011100111111表2.2一位全加器真值表两个输出端的逻辑表达式:Si=Ai⊕Bi⊕CiCi+1=AiBi+BiCi+CiAi2020年2月6日4时55分202020年2月6日4时55分Si=Ai⊕Bi⊕CiCi+1=AiBi+BiCi+CiAi按此表达式组成的一位全加器示图:Ci+1=(Ai⊕Bi)CiAiBi2020年2月6日4时55分212020年2月6日4时55分n个1位的全加器(FA)可级联成一个n位的行波进位加减器。M为方式控制输入线,当M=0时,作加法(A+B)运算;当M=1时,作减法(A-B)运算,在后一种情况下,A-B运算转化成[A]补+[-B]补运算,求补过程由B+1来实现。2020年2月6日4时55分222020年2月6日4时55分单符号位判溢出双符号正溢出0.100100.1001+0.110000.11001.010110.0101负溢出1.011111.0111+1.0011+11.001110.101010.10102020年2月6日4时55分232020年2月6日4时55分补码加减法的逻辑实现图示:n个1位全加器组成。单符号位判溢出。V=c0⊕c1双符号位判溢出。V=Sf1⊕Sf2y0y1V=1cn=0做加法c0=1做减法(求反加1)2020年2月6日4时55分242020年2月6日4时55分定点运算器——定点乘法•定点原码一位乘法设被乘数[X]原=XfXn-1Xn-2……X1X0乘数[Y]原=YfYn-1Yn-2…Y1Y0乘积[X]原=ZfZ2n-1Z2n-2……Z1Z0运算原则:同号相乘为正,异号相乘为负,符号可按:异或运算得到,数值部分的运算方法与普通的十进制乘数相类似。2020年2月6日4时55分252020年2月6日4时55分定点运算器——定点乘法•手工算法0.11010.1011×1101110100001101+100011110.l两个n位数相乘,其积为2n位,则需要2n位长的加法器,这不适用于定点机的形式。l机器一次只能进行两个数的相加,不能进行多个数据的加法。l手工计算中,乘数的每一位是0还是1都可直接看见,而在计算机中,采用放乘数的寄存器的每一位直接决定本次相加数是被乘数还是0是很不方便的,若采用该寄存器的最低一位来执行这种判断就简便了。2020年2月6日4时55分262020年2月6日4时55分定点运算器——定点乘法•运算法则:计算机中执行乘法时,积的符号位由被乘数和乘数的符号位通过一个半加器实现。数值部分的运算规则是:从最低位Y0开始,当乘数Yi为1时,将上次部分积加上被乘数的绝对值,然后右移一位,得到新的部分积;当Yi为0时,则写下全0。然后再对乘数Y的高一位进行类似乘法运算。重复“加—右移”操作N次,可得到最后的乘积。2020年2月6日4时55分272020年2月6日4时55分定点运算器——定点乘法•例:X=0.1101,Y=0.1011,求X*Y=?解:|X|=00.1101|Y|=00.1011部分积乘数说明00.000000.1101+Yf101100.110100.011000.1101→+01.001100.100100.0000+00.100100.010000.110101.000100.1000→→+→1Yf10111Yf10111Yf11111YfZ0=0Y0=1,+XY2=1,+XY1=0,+0Y0=1,+X右移,得Z1右移,得Z2右移,得Z3右移,得Z4=X*Y2020年2月6日4时55分282020年2月6日4时55分定点运算器——定点乘法•结果:计算:X=-0.1101Y=0.0110,用原码阵列乘法器求X*Y?X*Y=0.10001111X*Y=1.010011102020年2月6日4时55分292020年2月6日4时55分定点运算器——定点乘法原码一位乘法的逻辑电路图R0存放部分积,R2存放被乘数,R1存放乘数。一、R0清零,R2存放被乘数,R1存放乘数。乘法开始时,“启动”信号时控制CX置1,于是开启时序脉冲T,当乘数寄存器R1最末位为“1“时,部分积Z和被乘数X在加法器中相加,其结果输出至R0的输入端。一旦控制脉冲T到来,控制信号LDR0使部分积右移1位,与此同时,乘数寄存其R1也在控制型号LDR1作用下右移一位,且计数器I记数一次,二、将步骤三重复执行N次三、当计数器I=n时,计数器I的溢出信号使控制触法器CX置0,关闭时序脉冲T,乘法宣告结束。2020年2月6日4时55分302020年2月6日4时55分定点运算器——定点乘法•原码算法存在的缺点:一是符号位需要单独运算,最后给运算结构以正确的符号;二是对于采用补码存储的机器,从存储器中取出的是操作数的补码,需先将其转换成原码,这样很不方便,而且影响速度。2020年2月6日4时55分

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

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

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

×
保存成功