




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.3 定点数的运算定点数的运算3.3.1 移位运算移位运算3.3.2 补码加减运算与溢出补码加减运算与溢出3.3.3 乘法运算乘法运算3.3.4 除法运算除法运算3.3.1 移位运算移位运算 移位运算在计算机中有着非常重要移位运算在计算机中有着非常重要的意义。例如在计算机中没有乘、的意义。例如在计算机中没有乘、除法运算的实现时,可以用移位与除法运算的实现时,可以用移位与加、减法运算相结合的办法进行处加、减法运算相结合的办法进行处理。理。 对定点表示的数据,计算机中小数点的位对定点表示的数据,计算机中小数点的位置是事先约定的,因此,二进制表示的机置是事先约定的,因此,二进制表示的机器数在相对于
2、小数点作器数在相对于小数点作n位左移或右移时,位左移或右移时,其实质就是对该数乘以或除以其实质就是对该数乘以或除以2n。由于计。由于计算机中机器数的字长往往是固定的,当机算机中机器数的字长往往是固定的,当机器数左移或右移时,必然会使数据的低位器数左移或右移时,必然会使数据的低位或高位出现空位,对空位是进行补或高位出现空位,对空位是进行补0还是补还是补1与机器数表示的是有符号数还是无符号数与机器数表示的是有符号数还是无符号数有关,对于有符号数的移位叫算术移位。有关,对于有符号数的移位叫算术移位。 对于正数,由于对于正数,由于X原原=X补补=X反反=真值,真值,故移位后出现的空位均以故移位后出现的
3、空位均以0进行补充。对于进行补充。对于负数,由于原码、补码和反码的表示形式负数,由于原码、补码和反码的表示形式不同,故当机器数移位时,对其空位的填不同,故当机器数移位时,对其空位的填充规则也不同。表充规则也不同。表3-12列出了三种不同码列出了三种不同码制的机器数移位后的添补规则。必须注意制的机器数移位后的添补规则。必须注意的是:不论是正数还是负数,移位后其符的是:不论是正数还是负数,移位后其符号位均不变,这是算术移位的重要特点。号位均不变,这是算术移位的重要特点。表表3-12 不同编码机器数移位后的添补规则不同编码机器数移位后的添补规则码制码制添补代码添补代码正数正数原码、补码、反码原码、补
4、码、反码0负负数数原码原码0补补码码左移添左移添0右移添右移添1反码反码1 由上表可得出如下结论:由上表可得出如下结论:(1)机器数为正时,不论左移或右移,添)机器数为正时,不论左移或右移,添补代码都为补代码都为0。(2)由于负数的原码其数值部分与真值相)由于负数的原码其数值部分与真值相同,故在移位时不论左移或右移,只要使同,故在移位时不论左移或右移,只要使符号位不变,其空位均补符号位不变,其空位均补0。(3)由于负数的反码其数值位表示与真值)由于负数的反码其数值位表示与真值正好相反,故移位后添补的均为正好相反,故移位后添补的均为1(此时(此时仍需保持符号位不变),即相当于对真值仍需保持符号位
5、不变),即相当于对真值补补0。(4)分析任意负数的补码可发现当对其由低)分析任意负数的补码可发现当对其由低位向高位找到第一个位向高位找到第一个“1”时,在此时,在此“1”左左边的各位均与对应的反码相同,而在此边的各位均与对应的反码相同,而在此“1”右边的各位均与对应的原码相同。故负数右边的各位均与对应的原码相同。故负数的补码左移时,空位出现在低位,添补的的补码左移时,空位出现在低位,添补的代码与原码相同,即为代码与原码相同,即为0;右移时,空位出;右移时,空位出现在高位,添补的代码与反码相同,即为现在高位,添补的代码与反码相同,即为1。 例:设机器数字长为例:设机器数字长为8位(含一位符号位(
6、含一位符号位),若位),若X=27,写出,写出X对应的原码、对应的原码、反码和补码的形式,并求出三种机器数反码和补码的形式,并求出三种机器数左、右移一位后的表示形式及对应的真左、右移一位后的表示形式及对应的真值。值。 有符号数的移位称为算术移位,无符号有符号数的移位称为算术移位,无符号数的移位称为逻辑移位。逻辑移位的规数的移位称为逻辑移位。逻辑移位的规则是:逻辑左移时,高位移出,低位空则是:逻辑左移时,高位移出,低位空位补位补0;逻辑右移时,低位移出,高位空;逻辑右移时,低位移出,高位空位补位补0。3.3.2 补码加减运算与溢出补码加减运算与溢出 加减法运算是计算机中最基本的算术运加减法运算是
7、计算机中最基本的算术运算,一般计算机中都采用补码表示来进算,一般计算机中都采用补码表示来进行实现。行实现。1、补码加减运算的基本公式补码加减运算的基本公式 补码加法的基本公式为:补码加法的基本公式为:X+Y补补=X补补+Y补补 按照补码的定义,此公式可进行严格的按照补码的定义,此公式可进行严格的数学证明,以小数为例证明如下:数学证明,以小数为例证明如下: 证明:真值证明:真值X、Y的符号共有四种情况。的符号共有四种情况。(1)X0,Y0,则,则X+Y0 根据补码定义可得:根据补码定义可得:X补补+Y补补=X+Y=X+Y补补 (Mod 2)(2)X0,Y0根据补码定义:根据补码定义:X补补=X,
8、Y补补=2+Y,则,则X补补+Y补补=2+(X+Y)当当|X|Y|时,时,0X+Y1(正数),模(正数),模2时,时,2+(X+Y)=X+Y所以所以X补补+Y补补=2+(X+Y) =X+Y=X+Y补补 (Mod 2)当当|X|Y|时,时,-1X+Y0(负数),(负数),X补补+Y补补=2+(X+Y)=X+Y补补(3)X0(可仿照(可仿照(2)证明)证明)(4)X0,Y0,则,则X+Y0根据补码定义:根据补码定义:X补补=2+X,Y补补=2+Y,则,则X补补+Y补补=2+X+2+Y=2+(2+X+Y)因为(因为(X+Y)0,而且其绝对值又小于,而且其绝对值又小于2,则则0(2+X+Y)2;在模在
9、模2情况下,情况下,2+(2+X+Y)=2+X+Y =2+(X+Y)=X+Y补补所以:所以:X补补+Y补补=X+Y补补由以上各种情况的证明,可得到结论:由以上各种情况的证明,可得到结论:X补补+Y补补=X+Y补补 由补码加法的基本公式,可得到补码减法由补码加法的基本公式,可得到补码减法的基本公式:的基本公式:X-Y补补=X补补+-Y补补 即:即:X-Y补补=X+(-Y)补补= X补补+-Y补补。 根据以上加减运算的基本公式,可得到根据以上加减运算的基本公式,可得到补码运算的规则如下:补码运算的规则如下:、参加运算的操作数均用补码表示。、参加运算的操作数均用补码表示。、符号位参与运算。、符号位参
10、与运算。、对于两数相加减的各种情况,计算机、对于两数相加减的各种情况,计算机都执行求和操作。都执行求和操作。、运算结果仍为补码表示。、运算结果仍为补码表示。 在补码机器中,对于参与运算的在补码机器中,对于参与运算的X和和Y两两个数,都以补码形式表示在机器中,即个数,都以补码形式表示在机器中,即机器内存放的是机器内存放的是X补补和和Y补补的形式,所的形式,所以对于加法运算来说,比较简单,而对以对于加法运算来说,比较简单,而对于减法运算,需要考虑怎样从于减法运算,需要考虑怎样从Y补补变换变换到到-Y补补的形式,然后参加运算。的形式,然后参加运算。 不论不论Y的真值是正是负,已知的真值是正是负,已知
11、Y补补求求-Y补补的方法都是将的方法都是将Y补补的符号位连同数值位的符号位连同数值位一起求反后末位加一起求反后末位加1,这是因为,这是因为Y和和-Y肯肯定为一正一负,且绝对值相同。定为一正一负,且绝对值相同。 例:已知:例:已知:x=0.1001,y=-0.0110,求求x+y=? 例:已知:例:已知:x=-0.1001,y=-0.0101,求求x+y=? 例:已知:例:已知:x=0.1001,y=0.0110,求,求x-y=? 例:已知:例:已知:x=-0.1001,y=-0.0110,求求x-y=?2、溢出及其判别方法、溢出及其判别方法 计算机的加法器和寄存器都有固定的位计算机的加法器和寄
12、存器都有固定的位数,当选定了数据表示格式后,所能表数,当选定了数据表示格式后,所能表示的数据范围也就相应确定了。当运算示的数据范围也就相应确定了。当运算结果超出机器数所能表示的范围时,称结果超出机器数所能表示的范围时,称为溢出。为溢出。 例如:字长例如:字长4位,采用补码表示,则表数位,采用补码表示,则表数范围为范围为-8+7。如果。如果x=+6,y=+3,则:,则: x补补+y补补=0 110+0 011 =1 001=x+y补补 可得可得x+y=-7,而正确结果应该是,而正确结果应该是+9。这。这是因为只有一个符号位,使得结果符号错是因为只有一个符号位,使得结果符号错乱。在这种情况下,符号
13、位是数值,如果乱。在这种情况下,符号位是数值,如果当作符号,留下的结果将是不正确的。当作符号,留下的结果将是不正确的。 两个异号数相加不会产生溢出,只有两两个异号数相加不会产生溢出,只有两同号数相加才有可能产生溢出。两个同同号数相加才有可能产生溢出。两个同号数相减也不会出现溢出,只有两个异号数相减也不会出现溢出,只有两个异号数相减才会出现溢出。当两个数据运号数相减才会出现溢出。当两个数据运算的结果大于机器所能表示的最大正数算的结果大于机器所能表示的最大正数时称为正溢。运算结果小于机器所能表时称为正溢。运算结果小于机器所能表示的最小负数时称为负溢。示的最小负数时称为负溢。 需要说明的是,溢出是指
14、运算结果超出需要说明的是,溢出是指运算结果超出表数范围,它既不是最高数值位向符号表数范围,它既不是最高数值位向符号位的进位,也不是符号位本身产生的进位的进位,也不是符号位本身产生的进位。下面通过几个例子加以说明。位。下面通过几个例子加以说明。 当最高数值位向符号位产生进位时,可当最高数值位向符号位产生进位时,可能产生溢出(能产生溢出(c),也可能不产生溢出),也可能不产生溢出(a)和()和(b);符号位本身产生的进位);符号位本身产生的进位也是如此。只有在最高数值位向符号位也是如此。只有在最高数值位向符号位有进位而符号位本身不产生进位(有进位而符号位本身不产生进位(c),),或者最高数值位不向
15、符号位产生进位而或者最高数值位不向符号位产生进位而符号位本身却产生进位(符号位本身却产生进位(d)时,才发)时,才发生溢出。这可作为判断溢出的条件。生溢出。这可作为判断溢出的条件。 补码定点加减法运算中,常用的判断溢补码定点加减法运算中,常用的判断溢出的方法有两种:出的方法有两种:(1)采用变形补码判断溢出)采用变形补码判断溢出 变形补码是采用变形补码是采用2位符号位的补码,即位符号位的补码,即用用“00”表示正号,用表示正号,用“11”表示负号。表示负号。它是以它是以4为模的(对小数来说),其定为模的(对小数来说),其定义为:义为:XX补补= =X 0X 0X1 X1 4+X -14+X -
16、1X0 X0 (mod 4mod 4) 在采用变形补码进行加法运算时,两位在采用变形补码进行加法运算时,两位符号位与数值位同时参与运算,而且高符号位与数值位同时参与运算,而且高位产生的进位自动丢失(执行了模位产生的进位自动丢失(执行了模4操操作),则可以得到正确的结果。作),则可以得到正确的结果。 X+Y补补=X补补+Y补补 利用变形补码进行溢出判断的原则是:利用变形补码进行溢出判断的原则是:如果结果的两位符号位不相同,则表示如果结果的两位符号位不相同,则表示溢出,否则没有溢出(此时等同异或运溢出,否则没有溢出(此时等同异或运算)。不论在何种情况下,最高位即第算)。不论在何种情况下,最高位即第
17、一位符号位为真正的符号。一位符号位为真正的符号。 例如:例如:x补补=00 1010 y补补=00 1001 则则x+y补补=01 0011 x补补=11 0001 y补补=11 0111 则则x+y补补=10 1000 此两例都为溢出的情况。此两例都为溢出的情况。 例如:例如:x补补=00 0101 y补补=00 0111 则则x+y补补=00 1100 x补补=11 1011 y补补=11 0111 则则x+y补补=11 0010 此两例都为不溢出的情况。此两例都为不溢出的情况。 在采用变形补码进行加减运算时,运算在采用变形补码进行加减运算时,运算结果的两位符号应该相同。如果两个符结果的两
18、位符号应该相同。如果两个符号位同时为号位同时为0,则表示结果为正数;如,则表示结果为正数;如果同时为果同时为1,则表示结果为负数。如果,则表示结果为负数。如果两个符号位不同,则表示产生了溢出,两个符号位不同,则表示产生了溢出,且左边的符号位表示结果的正确符号,且左边的符号位表示结果的正确符号,所以如果运算结果的两位符号位为所以如果运算结果的两位符号位为“01”,则表示产生了正溢出;如果运,则表示产生了正溢出;如果运算结果的符号位为算结果的符号位为“10”,则表示产生,则表示产生了负溢出。了负溢出。 需要说明的是,在使用双符号位时,寄需要说明的是,在使用双符号位时,寄存器内的操作数其实只需保存一
19、个符号存器内的操作数其实只需保存一个符号位就可以了,因为对于任何正确的数据,位就可以了,因为对于任何正确的数据,它的两个符号位的值都是相同的。但是它的两个符号位的值都是相同的。但是在加法器中又要有双符号位,所以在相在加法器中又要有双符号位,所以在相加时,寄存器中的一位符号位的值要同加时,寄存器中的一位符号位的值要同时输入到加法器中的两个符号位中。时输入到加法器中的两个符号位中。(2)利用符号位的进位信息判断溢出)利用符号位的进位信息判断溢出 由于减法运算在计算机中也是利用加法由于减法运算在计算机中也是利用加法实现的,所以符号不同的数在进行减法实现的,所以符号不同的数在进行减法时,减数的相反数在
20、求补后的符号与被时,减数的相反数在求补后的符号与被减数的符号应该是一致的。因此,不论减数的符号应该是一致的。因此,不论作加法还是减法,只要参加运算的两个作加法还是减法,只要参加运算的两个操作数的符号相同,而运算结果与参加操作数的符号相同,而运算结果与参加运算的原操作数的符号不同,就可以判运算的原操作数的符号不同,就可以判定为溢出。定为溢出。 例如:例如:x补补=1 1011 y补补=1 0011 x+y补补=0 1110 由于操作数的符号都为由于操作数的符号都为1,但结果的符,但结果的符号位为号位为0,所以判定为溢出。,所以判定为溢出。 又如:又如:x补补=1 1010 y补补=1 0111
21、x+y补补=1 0001 由于结果的符号位与原操作数的符号位由于结果的符号位与原操作数的符号位相同,所以判定为无溢出。相同,所以判定为无溢出。 采用一位符号位进行判断是否溢出时,采用一位符号位进行判断是否溢出时,为了节省时间,通常也可以使用符号位为了节省时间,通常也可以使用符号位产生的进位和数值最高有效位产生的进产生的进位和数值最高有效位产生的进位进行异或操作。如果异或的结果为位进行异或操作。如果异或的结果为1则表示有溢出;异或结果为则表示有溢出;异或结果为0则表示没则表示没有溢出。有溢出。3、补码加减运算的电路、补码加减运算的电路图图3-6 实现补码加减运算的逻辑电路实现补码加减运算的逻辑电
22、路 在该图中,被加数(或被减数)在该图中,被加数(或被减数)X和加数和加数(或减数)(或减数)Y分别存放在分别存放在A寄存器和寄存器和B寄寄存器中,当执行加法运算时,执行存器中,当执行加法运算时,执行X补补+Y补补,将,将X补补和和Y补补从从A寄存器和寄存器和B寄寄存器送到加法器的两个输入端。当执行存器送到加法器的两个输入端。当执行减法运算时,执行减法运算时,执行X补补+-Y补补,将运算,将运算结果保存在结果保存在A寄存器中。寄存器中。 在逻辑电路中,在逻辑电路中,ALU由多个全加器及其由多个全加器及其他电路组成。每个全加器有三个输入端,他电路组成。每个全加器有三个输入端,其中一个接收从低位来
23、的进位信号,而其中一个接收从低位来的进位信号,而最低位没有进位信号输入,因此可利用最低位没有进位信号输入,因此可利用来作为来作为“+1”信号。信号。 当执行加法时,提供控制信号有:当执行加法时,提供控制信号有:AALU,BALU,M=0(经异或门控制(经异或门控制BALU,同时最低位加,同时最低位加0),),ALUA。 当执行减法时,提供控制信号有:当执行减法时,提供控制信号有:AALU,BALU,M=1(经异或门控制(经异或门控制B#ALU,同时最低位加,同时最低位加1),),ALUA。 其中其中ALU+1操作可以和加法操作同时进操作可以和加法操作同时进行,所以总共只需要一次加法运算。行,所
24、以总共只需要一次加法运算。3.3.3 乘法运算乘法运算 在计算机中,乘法运算是一种很重要的在计算机中,乘法运算是一种很重要的运算,有的机器由硬件乘法器(见附录运算,有的机器由硬件乘法器(见附录1)直接完成乘法运算,有的机器内没有乘直接完成乘法运算,有的机器内没有乘法器,但可以按机器作乘法运算的方法,法器,但可以按机器作乘法运算的方法,用软件编程实现。下面分别讨论原码和用软件编程实现。下面分别讨论原码和补码的乘法运算方法。补码的乘法运算方法。 1、原码乘法、原码乘法(1)定点原码一位乘法)定点原码一位乘法 考虑十进制数的乘法规则及原码表示方考虑十进制数的乘法规则及原码表示方法的特点,可得到原码乘
25、法的规则如下:法的特点,可得到原码乘法的规则如下:两个原码数相乘,其乘积的符号为相乘两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对两数符号的异或值,数值则为两数绝对值之积。值之积。 假设:假设:X原原=X0X1X2Xn Y原原=Y0Y1Y2Yn则:则:XY原原=X原原Y原原 =(X0 Y0)|(X1X2Xn)(Y1Y2Yn) 符号符号“|”表示把符号位和数值位拼接起表示把符号位和数值位拼接起来。来。 先来看手工乘法的运算过程。先来看手工乘法的运算过程。 设设X=0.1101 Y=0.1011,计算乘积,计算乘积XY。 0 . 1 1 0 1 0 . 1 1 0 1 0 .
26、 1 0 1 1 0 . 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 . 1 0 0 0 1 1 1 1 0 . 1 0 0 0 1 1 1 1 即即XY=0.10001111,相乘两数同号,相乘两数同号,结果符号为正。结果符号为正。 在手工计算时,逐次按乘数每位的取值是在手工计算时,逐次按乘数每位的取值是1还是还是0,决定相加数取被乘数的值还是,决定相加数取被乘数的值还是取零值,而且相加数逐次向左偏移取零值,而且相加数逐次向左偏移1位,位,最后一起相加求积。若计算机完全模拟笔最后一起相加求
27、积。若计算机完全模拟笔算乘法步骤,将会有困难:第一,机器难算乘法步骤,将会有困难:第一,机器难以实现四个位积的一次相加;第二,乘积以实现四个位积的一次相加;第二,乘积位数增长了一倍。位数增长了一倍。 为此,在计算机中的运算方法作了如下为此,在计算机中的运算方法作了如下改进:改进:、计算机一次加法操作只能求出两数之、计算机一次加法操作只能求出两数之和,因此每求得一个相加数,就与上次和,因此每求得一个相加数,就与上次部分积相加。部分积相加。、在求本次部分积时,前一次部分积的、在求本次部分积时,前一次部分积的最低位不再参与运算,因此可将其右移最低位不再参与运算,因此可将其右移一位,相加数可直送而不必
28、偏移,于是一位,相加数可直送而不必偏移,于是用用N位加法器就可以实现两个位加法器就可以实现两个N位数相乘。位数相乘。、部分积右移时,乘数寄存器同时右移、部分积右移时,乘数寄存器同时右移一位,这样可以一直用乘数寄存器的最一位,这样可以一直用乘数寄存器的最低位来控制相加数(取被乘数或零),低位来控制相加数(取被乘数或零),同时乘数寄存器的最高位可接收部分积同时乘数寄存器的最高位可接收部分积右移出来的一位,因此,完成乘法运算右移出来的一位,因此,完成乘法运算后,乘积分开放在了两个寄存器中。后,乘积分开放在了两个寄存器中。 如图如图3-7是计算机内实现原码乘法的逻是计算机内实现原码乘法的逻辑框图,其中
29、辑框图,其中A、B、C三个寄存器分别三个寄存器分别存放部分积、被乘数和乘数。存放部分积、被乘数和乘数。图图3-7 实现原码一位乘的逻辑电路框图实现原码一位乘的逻辑电路框图 乘法开始时,乘法开始时,A寄存器被清为零,作为初寄存器被清为零,作为初始部分积。被乘数放在始部分积。被乘数放在B寄存器中,乘数寄存器中,乘数放在放在C寄存器中。实现部分积和被乘数相寄存器中。实现部分积和被乘数相加是通过给出加是通过给出AALU和和BALU命令,命令,在在ALU中完成的。中完成的。ALU的输出经过移位的输出经过移位电路向右移一位送入电路向右移一位送入A寄存器中。寄存器中。C寄存寄存器是用移位寄存器实现的,其最低
30、位用器是用移位寄存器实现的,其最低位用作作BALU的控制命令。的控制命令。 加法器最低一位的值右移时将移入加法器最低一位的值右移时将移入C寄存寄存器的最高数值位,使相乘之积的低位部器的最高数值位,使相乘之积的低位部分保存进分保存进C寄存器中,原来的乘数在逐次寄存器中,原来的乘数在逐次右移过程中丢失了。右移过程中丢失了。 图中还给出了一个计数器,用来控制逐图中还给出了一个计数器,用来控制逐次相乘的次数。它的初始值放乘数位数,次相乘的次数。它的初始值放乘数位数,计算结束时给出结束乘运算的控制信号。计算结束时给出结束乘运算的控制信号。 由于在运算过程中,被乘数寄存器的值由于在运算过程中,被乘数寄存器
31、的值保持不变,而部分积寄存器和乘数寄存保持不变,而部分积寄存器和乘数寄存器的值一直变化,可以用这两个寄存器器的值一直变化,可以用这两个寄存器值的变化过程描述这种计算方法。值的变化过程描述这种计算方法。 例:设例:设X=0.1101,Y=0.1011,求,求XY=? 解:解:X原原=0 1101 Y原原=0 1011,用,用数值位计算,部分积取双符号位,实际数值位计算,部分积取双符号位,实际用来保存加运算时的进位信息。用来保存加运算时的进位信息。部分积部分积 乘乘数数说明说明 00 0000 + 00 11011011初始条件,部分初始条件,部分积为积为0乘数低位为乘数低位为1,加被乘数加被乘数
32、 00 1101 00 0110 + 00 110110111101右移右移1位,形成位,形成新的部分积,新的部分积,乘数右移,低位乘数右移,低位为为1,加被乘,加被乘数数 01 0011 00 1001 + 00 000011011110右移右移1位,形成位,形成新的部分积,新的部分积,乘数也右移,低乘数也右移,低位为位为0,加,加0 判定符号,因为判定符号,因为X0 Y0=0 0=0,所以,所以得到:得到: XY原原=0 10001111 即:即:XY=+0.10001111(2)定点原码两位乘法)定点原码两位乘法 原码两位乘即从乘数的最低位开始每次原码两位乘即从乘数的最低位开始每次取两位
33、乘数与被乘数相乘得到一次部分取两位乘数与被乘数相乘得到一次部分积,它与原码一位乘一样,符号位的运积,它与原码一位乘一样,符号位的运算和数值部分是分开进行的,但由于每算和数值部分是分开进行的,但由于每次是用两位乘数的状态来决定新的部分次是用两位乘数的状态来决定新的部分积如何形成,因此运算步骤减少,提高积如何形成,因此运算步骤减少,提高了运算速度。了运算速度。 两位乘数共有四种可能组合,每种组两位乘数共有四种可能组合,每种组合对应于以下操作:合对应于以下操作:00相当于相当于0X。部分积。部分积Pi右移两位,右移两位,不进行其他运算。不进行其他运算。01相当于相当于1X。部分积。部分积Pi+X,右
34、,右移两位。移两位。10相当于相当于2X。部分积。部分积Pi+2X,右,右移两位。移两位。11相当于相当于3X。部分积。部分积Pi+3X,右,右移两位。移两位。 与前面的一位乘法相比,多出了与前面的一位乘法相比,多出了+2X和和+3X两种情况。把两种情况。把X左移一位可得左移一位可得2X,在机器上可采用向左斜送在机器上可采用向左斜送1位来实现。可位来实现。可是是+3X一般不能一次完成,如分成两次一般不能一次完成,如分成两次进行,又降低了计算速度。解决问题的进行,又降低了计算速度。解决问题的办法是:以(办法是:以(4X-X)来代替)来代替3X运算,运算,在本次运算中只执行在本次运算中只执行-X,
35、而,而+4X归并到归并到下一步执行。下一步执行。 此时部分积已右移了两位,上一步欠此时部分积已右移了两位,上一步欠下的下的+4X已变成已变成+X。推导过程如下:。推导过程如下:设之前得到的部分积为设之前得到的部分积为Pi,右移两位,右移两位相当于乘相当于乘2-2。正常运算为加。正常运算为加3X右移右移两位,即(两位,即(Pi+4X-X)2-2;此式子;此式子等于(等于(Pi-X)2-2+X,此时表示操作,此时表示操作步骤为步骤为Pi减减X后右移两位再加后右移两位再加X。 在实际线路中用一个触发器在实际线路中用一个触发器C来记录是否来记录是否欠下欠下+4X,若是,则,若是,则1C,控制在下一,控
36、制在下一步补上所欠数据。因此实际操作用步补上所欠数据。因此实际操作用Yi-1、Yi、C三位来控制,运算规则可如表三位来控制,运算规则可如表3-13所示。所示。表表3-13 原码两位乘法规则原码两位乘法规则Yi-1i-1 Yi i C操操 作作0 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1(Pi i+0)2-2-2(Pi i+X)2-2-2(Pi i+X)2-2-2(Pi i+2X)2-2-2(Pi i+2X)2-2-2(Pi i- -X)2-2-2(Pi i- -X)2-2-2(Pi i+0)2-2-20C0C0C0C0C1C1C1C 例:已知例:已知X=-0
37、.100111,Y=0.101110,求求XY=? 解:解:X原原=1.100111,Y原原=0.101110, |X|=0.100111,|X|补补=0.100111, -|X|补补=1.011001部分积部分积乘数乘数 欠位欠位说明说明 000 000000 +)001 00111000101110 0初始状态初始状态100,部分积,部分积+2X 0C 001 001110 000 010011 +)111 01100110001011 0右移两位右移两位110,部分积,部分积- -|X| 1C 111 101100 111 111011 +)111 01100100100010 1右移两
38、位右移两位101,部分积,部分积- -|X| 1C 111 010100 111 110101 +)000 10011100001000 1右移两位右移两位001,部分积,部分积+X 000 01110000001000 1不移位,得到结果不移位,得到结果 判定符号,因为判定符号,因为X0 Y0=1 0=1,所,所以得到:以得到:XY原原=1 011100000010 即即XY=-0.011100000010 对于原码两位乘,需注意:对于原码两位乘,需注意:、部分积和被乘数采用三个符号位。、部分积和被乘数采用三个符号位。因为在原码两位乘法中,有加因为在原码两位乘法中,有加2X的操的操作,因此绝
39、对值有可能大于作,因此绝对值有可能大于2。此时仍。此时仍需保留进位,以最高位的符号位作为需保留进位,以最高位的符号位作为处理过程中的符号。处理过程中的符号。 、减、减|X|的操作是通过加的操作是通过加-|X|补补来实现来实现的。这是因为原码的减法实现麻烦,需考的。这是因为原码的减法实现麻烦,需考虑绝对值大小,并判断结果符号,不如先虑绝对值大小,并判断结果符号,不如先当成补码处理,因此,右移时按补码的移当成补码处理,因此,右移时按补码的移位规则进行处理。(减位规则进行处理。(减X时当成补码处理,时当成补码处理,有可能结果为负,但每次的减都意味着下有可能结果为负,但每次的减都意味着下一步会补上所欠
40、的一步会补上所欠的4X,当补上后结果肯,当补上后结果肯定为正值,此时正数的补码、原码、绝对定为正值,此时正数的补码、原码、绝对值都是一样的。)值都是一样的。)、当乘数为偶数个数值位时,乘数的符、当乘数为偶数个数值位时,乘数的符号位设置两位号位设置两位“00”,以便最后一步能处,以便最后一步能处理前面可能留下的欠帐,但不用移位。理前面可能留下的欠帐,但不用移位。当乘数为奇数个数值位时,乘数符号位当乘数为奇数个数值位时,乘数符号位可设置一位可设置一位“0”,此时最后一次移一位。,此时最后一次移一位。2、补码乘法、补码乘法(1)定点补码一位乘法)定点补码一位乘法 原码乘法存在两个明显的缺点:一是符号
41、原码乘法存在两个明显的缺点:一是符号位需要单独运算,最后给运算结果赋以正位需要单独运算,最后给运算结果赋以正确符号,这给运算带来麻烦;二是对于采确符号,这给运算带来麻烦;二是对于采用补码存储的机器,从存储器或寄存器中用补码存储的机器,从存储器或寄存器中取出的是操作数的补码,需先将其转换成取出的是操作数的补码,需先将其转换成原码,然后才能进行乘法运算,再对结果原码,然后才能进行乘法运算,再对结果转换成补码保存。很不方便。转换成补码保存。很不方便。、补码与真值之间的关系、补码与真值之间的关系 设设X补补=Xs.X1X2Xn当当X0时,时,Xs=0,X补补=0.X1X2Xn=X当当X0,根据上面的讨
42、论,则:,根据上面的讨论,则: X(0.Y1Y2Yn)补补 =X补补(0.Y1Y2Yn) 得到:得到: XY补补=X补补(0.Y1Y2Yn)-X补补 综合上面两种情况,则当被乘数综合上面两种情况,则当被乘数X和乘数和乘数Y的符号都任意时的符号都任意时XY补补=X补补(0.Y1Y2Yn)-X补补Ys =X补补(-Ys+0.Y1Y2Yn) =X补补Y、补码乘法比较法、补码乘法比较法布斯(布斯(Booth)乘法乘法 为了得出补码一位乘法算法,将上式为了得出补码一位乘法算法,将上式展开加以变换,即:展开加以变换,即:XY补补=X补补-Ys+ Y12-1+ Y22-2+ Yn2-n =X补补-Ys+(Y
43、1- Y12-1)+(Y22-1- Y22-2)+(Yn2-(n-1)- Yn2-n) =X补补(Y1- Ys)+(Y2- Y1)2-1+(Yn- Yn-1)2-(n-1)+(0- Yn)2-n =X补补(Y1- Ys)+2-1(X补补(Y2-Y1)+2-1(X补补(Y3-Y2)+2-1(X补补(Yn-Yn-1)+2-1(X补补(Yn+1-Yn)()(Yn+1=0) 由上式可以发现,每一步乘法在前次部分由上式可以发现,每一步乘法在前次部分积的基础上(开始时部分积为积的基础上(开始时部分积为0),根据),根据Yi+1-Yi(i=n,2,1)的值决定对)的值决定对X补补的操作,然后右移一位,得到新
44、的部分积。的操作,然后右移一位,得到新的部分积。如此重复如此重复n步。第步。第n+1步由(步由(Y1-Ys)的值)的值决定对决定对X补补的操作,但不用移位,即得到的操作,但不用移位,即得到XY补补。 在计算机中,由在计算机中,由Yi+1-Yi的值决定进行什的值决定进行什么操作,实际上并不是做减法,而是比么操作,实际上并不是做减法,而是比较较Yi、Yi+1的值。这种根据相邻两位的比的值。这种根据相邻两位的比较结果决定运算操作的方法称为较结果决定运算操作的方法称为“比较比较法法”。因为此方法是由。因为此方法是由Booth夫妇最早提夫妇最早提出来的,又称为出来的,又称为Booth算法。算法。 Boo
45、th算法描述如下:算法描述如下:、参加运算的数用补码表示;、参加运算的数用补码表示;、符号位参加运算;、符号位参加运算;、乘数最低位后面增加一位附加位、乘数最低位后面增加一位附加位Yi+1(初值为(初值为0),以后逐次比较相邻两位并),以后逐次比较相邻两位并按表按表3-14所列规则运算,算法进行所列规则运算,算法进行n+1步(步(n是不包括符号位在内的字长),但是不包括符号位在内的字长),但第第n+1步不移位。步不移位。、移位要按补码的移位规则进行。、移位要按补码的移位规则进行。表表3-14 Booth比较法运算规则比较法运算规则Yn nYn+1n+1操操 作作Yn nYn+1n+1操操 作作
46、0 00 1部分积加部分积加0,右移一位右移一位部分积加部分积加X补补,右,右移一位移一位01 1部分积加部分积加- -X补补,右移,右移一位一位部分积加部分积加0,右移一位右移一位 例:已知:例:已知:X=0.0101,Y=-0.1101, 求求XY=? 解:解:X补补=0.0101, Y补补=1.0011, -X补补=1.1011部分积部分积乘数乘数说明说明 00 0000 +)11 101110011 0初始状态初始状态Yn nYn+1n+1=10,部分积加,部分积加-X补补 11 1011 11 1101 +)00 000011001 1部分积和乘数右移一位部分积和乘数右移一位Yn n
47、Yn+1n+1=11,部分积加,部分积加0 11 1101 11 1110 +)00 010111100 1部分积和乘数右移一位部分积和乘数右移一位Yn nYn+1n+1=01,部分积加,部分积加X补补 00 0011 00 0001 +)00 000011110 0部分积和乘数右移一位部分积和乘数右移一位Yn nYn+1n+1=00,部分积加,部分积加0 00 0001 00 0000 +)11 101111111 0部分积和乘数右移一位部分积和乘数右移一位Yn nYn+1n+1=10,部分积加,部分积加-X补补 11 101111111 0最后不移位最后不移位 XY补补=1.1011111
48、1, XY=-0.01000001 实现补码一位乘法(实现补码一位乘法(Booth算法)的硬件算法)的硬件原理框图如图原理框图如图3-8所示。所示。图图3-8 实现补码一位乘的逻辑电路框图实现补码一位乘的逻辑电路框图 乘法步骤如下:乘法步骤如下:、初始化时被乘数、初始化时被乘数B,乘数,乘数C,并增,并增加一位附加位,初值为加一位附加位,初值为0,0A,0CTR;、CnCn+1=00或或11时,时,A+0A; CnCn+1=01时,时,A+BA; CnCn+1=10时,时,A-BA。、CTR+1CTR,若,若CTRn+1,继续;,继续;若若CTR=n+1,结束。,结束。、A、C联合右移一位,转
49、步骤联合右移一位,转步骤。、最后乘积高位在、最后乘积高位在A,低位在,低位在C(除去最(除去最后两位)。后两位)。 此算法的优点是当遇到代码为连续此算法的优点是当遇到代码为连续“1”或或连续连续“0”时,只需连续移位,为实现加速时,只需连续移位,为实现加速乘法创造了条件。缺点是乘数要增加一个乘法创造了条件。缺点是乘数要增加一个附加位,第附加位,第n+1步不移位,而且乘法结束步不移位,而且乘法结束时,乘积低位在寄存器中的位置不符合要时,乘积低位在寄存器中的位置不符合要求(需丢掉最后两位)。求(需丢掉最后两位)。(2)定点补码两位乘法)定点补码两位乘法 根据补码一位乘法的规则,将比较根据补码一位乘
50、法的规则,将比较YnYn+1的状态与比较的状态与比较Yn-1Yn的状态所执的状态所执行的操作合并成一步,便很容易推导行的操作合并成一步,便很容易推导出补码两位乘法的算法,运算规则如出补码两位乘法的算法,运算规则如表表3-15所示。所示。表表3-15 补码两位乘法运算规则补码两位乘法运算规则Yn-1n-1Yn nYn+1n+1操操 作作Yn-1n-1Yn nYn+1n+1操操 作作000部分积部分积+0,右移,右移两位两位100部分积部分积+2- -X补补,右移两位右移两位001部分积部分积+X补补,右移两位右移两位101部分积部分积+- -X补补,右移两位右移两位010部分积部分积+X补补,右
51、移两位右移两位110部分积部分积+- -X补补,右移两位右移两位011部分积部分积+2X补补,右移两位右移两位111部分积部分积+0,右移,右移两位两位 进行定点补码两位乘法运算需注意如下问进行定点补码两位乘法运算需注意如下问题:题:、判别位。乘数的判别位涉及其附加位、判别位。乘数的判别位涉及其附加位和符号位。在乘数的最低位后,一定要增和符号位。在乘数的最低位后,一定要增加一位附加位,其初始值为加一位附加位,其初始值为0。定点补码。定点补码两位乘法是从判别乘数的最低两位与附加两位乘法是从判别乘数的最低两位与附加位的组合值开始的。位的组合值开始的。 乘数的符号位要视数值部分的位数来决乘数的符号位
52、要视数值部分的位数来决定。若数值部分的位数为偶数,则必须定。若数值部分的位数为偶数,则必须采用采用2位符号位;否则,就采用位符号位;否则,就采用1位符号位符号位。这就是说,乘数的数值部分连同符位。这就是说,乘数的数值部分连同符号位要保证为偶数。实际上,我们所使号位要保证为偶数。实际上,我们所使用的计算机,一般地说,其字长均为偶用的计算机,一般地说,其字长均为偶数,因此,若乘数的位数(包括数,因此,若乘数的位数(包括1位符号位符号位)为计算机的字长,符号位取位)为计算机的字长,符号位取1位即可。位即可。、加法操作的次数。定点补码两位乘法、加法操作的次数。定点补码两位乘法运算所做加法操作的次数为乘
53、数的位数运算所做加法操作的次数为乘数的位数(包括符号位)除以(包括符号位)除以2的值。的值。、部分积的符号位。可采用、部分积的符号位。可采用3位符号位,位符号位,以保留正确的进位及符号位。以保留正确的进位及符号位。、符号位扩展。在进行定点补码两位乘、符号位扩展。在进行定点补码两位乘法运算中,在进行右移法运算中,在进行右移2位操作时,要注位操作时,要注意符号位的扩展,即右移时符号要一起意符号位的扩展,即右移时符号要一起移,空出的符号位以符号的原值填充。移,空出的符号位以符号的原值填充。、最后一步的移位。视乘数的符号位而、最后一步的移位。视乘数的符号位而定。若符号位为定。若符号位为2位,则不用移位
54、;若符位,则不用移位;若符号位为号位为1位,则要进行右移位,则要进行右移1位的操作。位的操作。 例:已知例:已知X=0.0110011, Y=-0.0110010,求,求XY=? 解:解:X补补=000.0110011, Y补补=1.1001110, -X补补=111.1001101 2X补补=000.1100110, 2-X补补=111.0011010部分积部分积乘数乘数 附加位附加位说明说明 000 0000000+)111 00110101 1001110 0初始状态初始状态Cn-1CnCn+1=100,+2- -X补补 111 0011010 111 1100110+)000 0000
55、0001 0110011 1右移两位,右移两位,Cn-1CnCn+1=111,+0 111 1100110 111 1111001+)000 01100111 0101100 1右移两位,右移两位,Cn-1CnCn+1=001,+X补补 000 0101100 000 0001011+)111 10011010 0101011 0右移两位,右移两位,Cn-1CnCn+1=110,+- -X补补 111 1011000 111 11011000 0010101 1最后一次右移一位最后一次右移一位 所以所以XY补补=1.1101100 0001010 XY=-0.0010011 11101103.
56、3.4 除法运算除法运算1、原码除法、原码除法 两个原码表示的数相除,其商的符号为相除两个原码表示的数相除,其商的符号为相除两数符号的异或值,数值则用两数的绝对值两数符号的异或值,数值则用两数的绝对值相除求得。相除求得。设设x原原=xs.x1x2xn,y原原=ys.y1y2yn,则则q原原=(xs ys)|(x1x2xn / y1y2yn) 定点机中的除法运算对被除数和除数有一定点机中的除法运算对被除数和除数有一定的约束。对小数除法,要求定的约束。对小数除法,要求0|被除数被除数|除数除数|,同时必须规定除数,同时必须规定除数0。商的位。商的位数一般与操作数位数相等。数一般与操作数位数相等。(
57、1)恢复余数法)恢复余数法 原码除法也是从手工除法演变而来的。先原码除法也是从手工除法演变而来的。先看手工除法的计算过程。看手工除法的计算过程。 设定设定 x=0.1011,y=0.1101,求,求x/y=? 手工计算二进制除法的规则是:手工计算二进制除法的规则是:、比较被除数与除数的大小。根据前面的、比较被除数与除数的大小。根据前面的约定,被除数一定小于除数,则上商约定,被除数一定小于除数,则上商“0”不做减法,在被除数最低位后补不做减法,在被除数最低位后补“0”得到得到新余数,再与右移一位的除数比较;新余数,再与右移一位的除数比较;、如果余数大于除数,则上商、如果余数大于除数,则上商“1”
58、,并,并执行一次减法,得到一个新的余数,将执行一次减法,得到一个新的余数,将余数最低位补余数最低位补“0”,再与右移一位的除,再与右移一位的除数比较;如果余数小于除数,则上商数比较;如果余数小于除数,则上商“0”不做减法,将余数最低位补不做减法,将余数最低位补“0”,再与,再与右移一位的除数比较。右移一位的除数比较。、重复步骤、重复步骤,直到余数为,直到余数为0或得到的或得到的商的位数满足精度要求为止。商的位数满足精度要求为止。 在计算机中实现除法运算要考虑硬件电在计算机中实现除法运算要考虑硬件电路结构特点,因此在计算机中除法有如路结构特点,因此在计算机中除法有如下改进做法。下改进做法。、计算
59、机直接做减法试探,根据所得余、计算机直接做减法试探,根据所得余数的符号来判断被除数(余数)与除数数的符号来判断被除数(余数)与除数的大小。的大小。 如果余数符号为如果余数符号为0(差为正数),表示(差为正数),表示被除数(余数)大于除数(够减),上被除数(余数)大于除数(够减),上商商“1”;如果余数符号为;如果余数符号为1(差为负(差为负数),表示被除数(余数)小于除数数),表示被除数(余数)小于除数(不够减),上商(不够减),上商“0”,不够减而减了,不够减而减了,说明此次减法运算是不该进行的,必须说明此次减法运算是不该进行的,必须加上除数以恢复原来的余数。加上除数以恢复原来的余数。、手工
60、算法中,被除数(余数)补、手工算法中,被除数(余数)补“0”与右移一位的除数比较,计算机是用左与右移一位的除数比较,计算机是用左移被除数(余数)来实现的。移被除数(余数)来实现的。、手工除法中,从高位向低位逐位求商。、手工除法中,从高位向低位逐位求商。在计算机中,直接把求得的每一位商写在计算机中,直接把求得的每一位商写进商寄存器不易实现,通常是把求得的进商寄存器不易实现,通常是把求得的每一位商上到商值寄存器的最低一位。每一位商上到商值寄存器的最低一位。做法是:每次上商前将商值寄存器与被做法是:每次上商前将商值寄存器与被除数(余数)寄存器联合左移一位,空除数(余数)寄存器联合左移一位,空出最低一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 从传统到智慧医护人员培训模式的变革与创新
- 2025至2030中国蜂蜜市场销售模式及竞争前景研究报告
- 数学期中教学工作总结
- 实习教师试用期工作总结
- 健康产业的可持续发展与伦理责任
- Unit1-Reading-公共课课件(二)
- 区块链技术的商业应用安全性分析及保障方案
- 2025年中国葛洲坝集团易普力股份有限公司禹州分公司招聘22人(河南)笔试参考题库附带答案详解
- 2025至2031年中国大白芸豆下脚料行业投资前景及策略咨询研究报告
- 健康教育材料在提高糖尿病患者自我管理能力中的作用研究报告分享
- 电厂烟囱外壁防腐工程项目施工方案
- 专业工程分包业主审批表
- 药剂科终止妊娠药品管理制度
- 除草剂分类和使用方法
- 合同制消防员绩效考核细则详解
- 中远集团养老保险工作管理程序
- 留守儿童帮扶记录表
- 变电站第二种工作票
- 煤矿机电运输专业质量标准化管理制度
- 机电一体化专业毕业论文43973
- 基于PLC的变频中央空调温度控制系统的毕业设计
评论
0/150
提交评论