1、第第章章 计算机的运算方法计算机的运算方法6.1 无符号数和有符号数无符号数和有符号数6.3 定点运算定点运算6.2 数的定点表示和浮点表示数的定点表示和浮点表示6.4 浮点四则运算浮点四则运算6.5 算术逻辑单元算术逻辑单元6.1 无符号数和有符号数无符号数和有符号数一、无符号数一、无符号数寄存器的位数寄存器的位数反映无符号数的表示范围反映无符号数的表示范围 8 位位 0 25516 位位 0 65535带符号的数带符号的数 符号数字化的数符号数字化的数+0.10110 1011小数点的位置小数点的位置+11000 1100小数点的位置小数点的位置 11001 1100小数点的位置小数点的位
2、置 0.10111 1011小数点的位置小数点的位置真值真值 机器数机器数1.机器数与真值机器数与真值二、有符号数二、有符号数2.原码表示法原码表示法带符号的绝对值表示带符号的绝对值表示(1)定义定义整数整数x 为真值为真值n 为整数的位数为整数的位数如如x=+1110 x原原=0,1110 x原原=24+1110=1,1110 x=1110 x原原=0,x 2n x 02n x 0 x 2n用用 逗号逗号 将符号位将符号位和数值部分隔开和数值部分隔开小数小数x 为真值为真值如如x=+0.1101x原原=0.1101 x=0.1101x原原=1 (0.1101)=1.1101 x 1 x 0
3、x原原=1 x 0 x 1x=0.1000000 x原原=1 (0.1000000)=1.1000000 x=+0.1000000 x原原=0.1000000用用 小数点小数点 将符号将符号位和数值部分隔开位和数值部分隔开用用 小数点小数点 将符号将符号位和数值部分隔开位和数值部分隔开(2)举例举例例例 6.1 已知已知 x原原=1.0011 求求 x解解:例例 6.2 已知已知 x原原=1,1100 求求 x解解:x=1 x原原=1 1.0011=0.0011x=24 x原原=10000 1,1100=1100 0.00111100由定义得由定义得由定义得由定义得例例 6.4 求求 x=0
4、的原码的原码解解:设设 x=+0.0000例例 6.3 已知已知 x原原=0.1101 求求 x解:解:x =+0.1101同理,对于整数同理,对于整数+0 原原=0,0000+0.0000原原=0.0000 x=0.0000 0.0000原原=1.0000 0 原原=1,0000 +0原原 0原原 根据根据 定义定义 x原原=0.1101原码的特点:原码的特点:简单、直观简单、直观但是用原码作加法时,会出现如下问题:但是用原码作加法时,会出现如下问题:能否能否 只作加法只作加法?找到一个与负数等价的正数找到一个与负数等价的正数 来代替这个负数来代替这个负数就可使就可使 减减 加加加法加法 正
5、正 正正加加加法加法 正正 负负加法加法 负负 正正加法加法 负负 负负减减减减加加 要求要求 数数1 数数2 实际操作实际操作 结果符号结果符号正正可正可负可正可负可正可负可正可负负负-123(1)补的概念补的概念 时钟时钟逆时针逆时针-363顺时针顺时针+9 6153.补码表示法补码表示法可见可见 3 可用可用+9 代替代替记作记作 3 +9(mod 12)同理同理 4 +8(mod 12)5 +7(mod 12)时钟以时钟以 12为模为模减法减法 加法加法称称+9 是是 3 以以 12 为模的为模的 补数补数结论结论 一个负数加上一个负数加上“模模”即得该负数的补数即得该负数的补数 一个
6、正数和一个负数互为补数时一个正数和一个负数互为补数时 它们绝对值之和即为它们绝对值之和即为 模模 数数 计数器计数器(模(模 16)101110110000+0101 1011100001011 0000?可见可见 1011 可用可用+0101 代替代替同理同理 011 0.1001自然去掉自然去掉记作记作 1011(mod 24)+0101(mod 23)+101(mod 2)+1.0111+0101(mod24)1011(mod24)(2)正数的补数即为其本身正数的补数即为其本身+10000+10000两个互为补数的数两个互为补数的数+0101+10101分别加上模分别加上模结果仍互为补数
7、结果仍互为补数+0101 +0101 +010124+1 10111,0101用用 逗号逗号 将符号位将符号位和数值部分隔开和数值部分隔开丢掉丢掉 10110,1,?1011(mod24)可见可见?+01010101010110110101+(mod24+1)100000=(3)补码定义补码定义整数整数x 为真值为真值n 为整数的位数为整数的位数x补补=0,x 2n x 02n+1+x 0 x 2n(mod 2n+1)如如x=+1010 x补补=27+1+(1011000)=x补补=0,1010 x=10110001,0101000用用 逗号逗号 将符号位将符号位和数值部分隔开和数值部分隔开1
8、011000100000000小数小数x 为真值为真值x=+0.1110 x补补=x 1 x 02+x 0 x 1(mod 2)如如x补补=0.1110 x=0.11000001.0100000 x补补=2+(0.1100000)=用用 小数点小数点 将符号位将符号位和数值部分隔开和数值部分隔开0.110000010.0000000(4)求补码的快捷方式求补码的快捷方式=100000=1,011010101+1=1,0110 又又x原原=1,1010则则x补补=24+1 1010=11111+1 1010=1111110101010当真值为当真值为 负负 时,时,补码补码 可用可用 原码除符号
9、位外原码除符号位外每位取反,末位加每位取反,末位加 1 求得求得+1设设 x=1010 时时(5)举例举例解:解:x=+0.0001解:由定义得解:由定义得x=x补补 2=1.0001 10.0000 x原原 =1.1111例例 6.6 已知已知 x补补=1.0001求求 xx补补 x原原?由定义得由定义得例例 6.5 已知已知 x补补=0.0001求求 x x =0.1111=0.1111 例例 6.7解:解:x=x补补 24+1=1,1110 100000 x原原 =1,0010当真值为当真值为 负负 时,时,原码原码 可用可用 补码除符号位外补码除符号位外每位取反,末位加每位取反,末位加
10、 1 求得求得x补补 x原原?x=0010=0010求求 x已知已知 x补补=1,1110由定义得由定义得真值真值0,10001101,01110100.11101.00100.00000.00001.00000,10001101,10001100.11101.11100.00001.0000不能表示不能表示练习练习求下列真值的补码求下列真值的补码 1补补=2+x=10.0000 1.0000=1.0000+0补补=0补补由小数补码定义由小数补码定义=1000110 x补补 x原原x=+70 x=0.1110 x=0.0000 x=70 x=0.1110 x=0.0000 x=1.0000=1
11、000110 x补补=x 1 x 02+x 0 x 1(mod 2)4.反码表示法反码表示法(1)定义定义整数整数x反反=0,x 2n x 0(2n+1 1)+x 0 x 2n(mod 2n+1 1)如如x =+1101x反反=0,1101=1,0010 x=1101x反反=(24+1 1)1101=11111 1101用用 逗号逗号 将符号位将符号位和数值部分隔开和数值部分隔开x 为真值为真值n 为整数的位数为整数的位数小数小数x =+0.1101x反反=0.1101x=0.1010 x反反=(2 2-4)0.1010=1.1111 0.1010=1.0101如如x反反=x 1 x 0(2
12、2-n)+x 0 x 1(mod 2 2-n)用用 小数点小数点 将符号位将符号位和数值部分隔开和数值部分隔开x 为真值为真值n 为小数的位数为小数的位数(2)举例举例例例 6.10 求求 0 的反码的反码设设 x=+0.0000+0.0000反反=0.0000解:解:同理,对于整数同理,对于整数+0反反=0,0000例例6.9 已知已知 x反反=1,1110 求求 x例例6.8 已知已知 x反反=0,1110 求求 x解:解:由定义得由定义得 x=+1110解:解:=1,1110 11111=0001由定义得由定义得x=x反反 (24+1 1)x=0.0000 0.0000反反=1.1111
13、 0反反=1,1111 +0反反 0反反 三种机器数的小结三种机器数的小结 对于对于正数正数,原码原码=补码补码=反码反码 对于对于负数负数,符号位为符号位为 1,其其 数值部分数值部分原码除符号位外每位取反末位加原码除符号位外每位取反末位加 1 补码补码原码除符号位外每位取反原码除符号位外每位取反 反码反码 最高位最高位为为符号位符号位,书写上用,书写上用“,”(整数)(整数)或或“.”(小数)将数值部分和符号位隔开(小数)将数值部分和符号位隔开例例6.11 0000000000000001000000100111111110000000100000011111110111111110111
14、11111128129-0-1-128-127-127-126二进制代码二进制代码 无符号数无符号数对应的真值对应的真值原码对应原码对应 的真值的真值补码对应补码对应 的真值的真值反码对应反码对应 的真值的真值012127253254255-125-126-127-3-2-1-2-1-0+0+1+2+127+0+1+2+127+0+1+2+127+0 设机器数字长为设机器数字长为 8 位(其中位为符号位)位(其中位为符号位)对于整数,当其分别代表无符号数、原码、补码和对于整数,当其分别代表无符号数、原码、补码和反码时,对应的真值范围各为多少?反码时,对应的真值范围各为多少?5.移码表示法移码表
15、示法补码表示很难直接判断其真值大小补码表示很难直接判断其真值大小如如 十进制十进制x=+21x=21x=+31x=31x+25+10101+100000+11111+10000010101+10000011111+100000大大大大错错错错大大大大正确正确正确正确0,101011,010110,111111,00001+10101 10101+11111 11111=110101=001011=111111=000001二进制二进制补码补码(1)移码定义移码定义x 为真值,为真值,n 为为 整数的位数整数的位数移码在数轴上的表示移码在数轴上的表示x移码移码2n+112n2n 12n00真值真
16、值如如x=10100 x移移=25+10100用用 逗号逗号 将符号位将符号位和数值部分隔开和数值部分隔开x=10100 x移移=25 10100 x移移=2n+x(2nx 2n)=1,10100=0,01100(2)移码和补码的比较移码和补码的比较设设 x=+1100100 x移移=27+1100100 x补补=0,1100100设设 x=1100100 x移移=27 1100100 x补补=1,0011100补码与移码只差一个符号位补码与移码只差一个符号位=1,1100100=0,00111001001-1 0 0 0 0 0-1 1 1 1 1-1 1 1 1 0-0 0 0 0 1 0
17、 0 0 0 0+0 0 0 0 1+0 0 0 1 0+1 1 1 1 0+1 1 1 1 1真值真值 x(n=5)x补补x移移x 移移对应的对应的十进制整数十进制整数(3)真值、补码和移码的对照表真值、补码和移码的对照表0123132333462630 0 0 0 0 00 0 0 0 1 00 0 0 0 0 10 1 1 1 1 11 0 0 0 0 01 0 0 0 0 11 0 0 0 1 01 1 1 1 1 01 1 1 1 1 10 1 1 1 1 10 1 1 1 1 00 0 0 0 1 00 0 0 0 0 10 0 0 0 0 01 1 1 1 1 11 0 0 0
18、1 01 0 0 0 0 11 0 0 0 0 0-1 0 0 0 0 0 0 0 0 0 0+1 1 1 1 10 0 0 0 0 01 1 1 1 1 10 0 0 0 0 01 0 0 0 0 0 当当 x=0 时时+0移移=25+0 当当 n=5 时时可见,可见,最小真值的移码为全最小真值的移码为全 0(4)移码的特点移码的特点用移码表示浮点数的阶码用移码表示浮点数的阶码能方便地判断浮点数的阶码大小能方便地判断浮点数的阶码大小=1,00000=1,00000=000000 0移移=25 0+0移移=0移移 100000移移=25 100000最小的真值为最小的真值为 25=100000
19、6.2 数的定点表示和浮点表示数的定点表示和浮点表示小数点按约定方式标出小数点按约定方式标出一、定点表示一、定点表示Sf S1S2 Sn数符数符数值部分数值部分小数点位置小数点位置Sf S1S2 Sn数符数符数值部分数值部分小数点位置小数点位置或或定点机定点机小数定点机小数定点机整数定点机整数定点机原码原码补码补码反码反码(1 2-n)+(1 2-n)(2n 1)+(2n 1)1 +(1 2-n)2n +(2n 1)(1 2-n)+(1 2-n)(2n 1)+(2n 1)二、浮点表示二、浮点表示N=Srj浮点数的一般形式浮点数的一般形式S 尾数尾数j 阶码阶码r 基数(基值)基数(基值)计算机
20、中计算机中 r 取取 2、4、8、16 等等当当 r=2N=11.0101=0.110101210=1.1010121=1101.012-10=0.001101012100 计算机中计算机中 S 小数、可正可负小数、可正可负j 整数、可正可负整数、可正可负 规格化数规格化数二进制表示二进制表示1.浮点数的表示形式浮点数的表示形式Sf 代表浮点数的符号代表浮点数的符号n 其位数反映浮点数的精度其位数反映浮点数的精度m 其位数反映浮点数的表示范围其位数反映浮点数的表示范围jf 和和 m 共同表示小数点的实际位置共同表示小数点的实际位置jf j1 j2 jm Sf S1 S2 Sn j 阶码阶码S
21、尾数尾数阶符阶符数符数符阶码的阶码的数值部分数值部分尾数的数值部分尾数的数值部分小数点位置小数点位置2.浮点数的表示范围浮点数的表示范围2(2m1)(1 2n)2(2m1)2n2(2m1)(1 2n)2(2m1)2n最小负数最小负数最大负数最大负数最大正数最大正数最小正数最小正数负数区负数区正数区正数区下溢下溢0上溢上溢上溢上溢215(1 2-10)2-15 2-10 215(1 2-10)设设 m=4 n=10上溢上溢 阶码阶码 最大阶码最大阶码下溢下溢 阶码阶码 最小阶码最小阶码 按按 机器零机器零 处理处理2-15 2-10 练习练习 设机器数字长为设机器数字长为 24 位,欲表示位,欲
22、表示3万的十进制数,万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各试问在保证数的最大精度的前提下,除阶符、数符各 取取1 位外,阶码、尾数各取几位?位外,阶码、尾数各取几位?满足满足 最大精度最大精度 可取可取 m=4,n=18解:解:m=4,5,6,15 位二进制数可反映位二进制数可反映 3 万之间的十进制数万之间的十进制数 215=32768214=16384215 0.15位位3.浮点数的规格化形式浮点数的规格化形式r=2尾数最高位为尾数最高位为 1r=4尾数最高尾数最高 2 位不全为位不全为 0r=8尾数最高尾数最高 3 位不全为位不全为 04.浮点数的规格化浮点数的规格
23、化r=2左规左规 尾数左移尾数左移 1 位,阶码减位,阶码减 1右规右规 尾数右移尾数右移 1 位,阶码加位,阶码加 1r=4左规左规 尾数左移尾数左移 2 位,阶码减位,阶码减 1右规右规 尾数右移尾数右移 2 位,阶码加位,阶码加 1r=8左规左规 尾数左移尾数左移 3 位,阶码减位,阶码减 1右规右规 尾数右移尾数右移 3 位,阶码加位,阶码加 1基数基数 r 越大,可表示的浮点数的范围越大越大,可表示的浮点数的范围越大基数不同,浮点数的基数不同,浮点数的规格化形式不同规格化形式不同基数基数 r 越大,浮点数的精度降低越大,浮点数的精度降低 例如:例如:最大正数最大正数=215(1210
24、)2+1111 0.111111111110 个个 1最小正数最小正数最大负数最大负数最小负数最小负数=21521=215(12 10)=216=21521=2162-1111 0.10000000009 个个 02-1111(0.1000000000)9 个个 02+1111(0.1111111111)10 个个 1设设 m=4,n=10,r=2尾数规格化后的浮点数表示范围尾数规格化后的浮点数表示范围三、举例三、举例例例 6.13 将将+写成二进制定点数、浮点数及在定点写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。其中数值部分均取机和浮点机中的机器数形式。其中数值部分均取 10
25、位,位,数符取数符取 1 位,浮点数阶码取位,浮点数阶码取 5 位(含位(含1位阶符)。位阶符)。19128解:解:设设 x=+19128二进制形式二进制形式定点表示定点表示浮点规格化形式浮点规格化形式x原原=1,0010;0.1001100000 x补补=1,1110;0.1001100000 x反反=1,1101;0.1001100000定点机中定点机中浮点机中浮点机中000 x=0.0010011x=0.0010011x=0.10011000002-10 x原原=x补补=x反反=0.0010011000 x=1110100000例例 6.14 将将 58 表示成二进制定点数和浮点数,表示
26、成二进制定点数和浮点数,并写出它在定点机和浮点机中的三种机器数及阶码并写出它在定点机和浮点机中的三种机器数及阶码为移码、尾数为补码的形式(其他要求同上例)。为移码、尾数为补码的形式(其他要求同上例)。解:解:设设 x=58二进制形式二进制形式定点表示定点表示浮点规格化形式浮点规格化形式x原原=1,0000111010 x补补=1,1111000110 x反反=1,1111000101x原原=0,0110;1.1110100000 x补补=0,0110;1.0001100000 x反反=0,0110;1.0001011111定点机中定点机中浮点机中浮点机中x阶移、尾补阶移、尾补=1,0110;1
27、.0001100000 x=111010 x=(0.1110100000)2110例例6.15 写出对应下图所示的浮点数的补码写出对应下图所示的浮点数的补码 形式。形式。设设 n=10,m=4,阶符、数符各取阶符、数符各取 1位。位。负数区负数区正数区正数区下溢下溢0上溢上溢上溢上溢2(2m1)(1 2n)2(2m1)(1 2n)2(2m1)2n最小负数最小负数最大正数最大正数最小正数最小正数2(2m1)2n最大负数最大负数解:解:真值真值最大正数最大正数最小正数最小正数最大负数最大负数最小负数最小负数215(1 210)215 210215 210 215(1 210)0,1111;0.11
28、111111111,0001;0.00000000011,0001;1.11111111110,1111;1.0000000001补码补码 当浮点数当浮点数 尾数为尾数为 0 时,不论其阶码为何值时,不论其阶码为何值 按机器零处理按机器零处理机器零机器零 当浮点数当浮点数 阶码等于或小于它所表示的最小阶码等于或小于它所表示的最小 数数 时,不论尾数为何值,按机器零处理时,不论尾数为何值,按机器零处理如如 m=4 n=10当阶码用移码,尾数用补码表示时,机器零为当阶码用移码,尾数用补码表示时,机器零为0,0 0 0 0;0.0 0 0 1,0 0 0 0;.,;0.0 0 0有利于机器中有利于机
29、器中“判判 0”电路的实现电路的实现当阶码和尾数都用补码表示时,机器零为当阶码和尾数都用补码表示时,机器零为(阶码(阶码=16)四、四、IEEE 754 标准标准短实数短实数长实数长实数临时实数临时实数符号位符号位 S 阶码阶码 尾数尾数 总位数总位数1 8 23 321 11 52 641 15 64 80S 阶码(含阶符)阶码(含阶符)尾尾 数数数符数符小数点位置小数点位置尾数为规格化表示尾数为规格化表示非非“0”的有效位最高位为的有效位最高位为“1”(隐含)(隐含)6.3 定定 点点 运运 算算一、移位运算一、移位运算1.移位的意义移位的意义15 m=1500 cm 小数点右移小数点右移
30、 2 位位机器用语机器用语15 相对于小数点相对于小数点 左移左移 2 位位(小数点不动小数点不动).左移左移 绝对值扩大绝对值扩大右移右移 绝对值缩小绝对值缩小在计算机中,在计算机中,移位与加减配合,能够实现乘除运算移位与加减配合,能够实现乘除运算2.算术移位规则算术移位规则1右移右移 添添 1左移左移 添添 00反反 码码补补 码码原原 码码负数负数0原码、补码、反码原码、补码、反码正数正数添补代码添补代码码码 制制符号位不变符号位不变例例6.16设机器数字长为设机器数字长为 8 位(含位符号位),写出位(含位符号位),写出A=+26时,三种机器数左、右移一位和两位后的表时,三种机器数左、
31、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。示形式及对应的真值,并分析结果的正确性。解:解:A=+26则则 A原原=A补补=A反反=0,0011010 +60,0000110 +130,0001101+1040,1101000 +520,0110100 +260,0011010移位前移位前A原原=A补补=A反反对应的真值对应的真值机机 器器 数数移位操作移位操作=+11010 左移一位左移一位左移两位左移两位右移一位右移一位右移两位右移两位例例6.17设机器数字长为设机器数字长为 8 位(含位符号位),写出位(含位符号位),写出A=26时,三种机器数左、右移一位和两位后的表时,
32、三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。示形式及对应的真值,并分析结果的正确性。解:解:A=26 61,0000110 131,0001101 1041,1101000 521,0110100 261,0011010移位前移位前对应的真值对应的真值机机 器器 数数移位操作移位操作原码原码=11010 左移一位左移一位左移两位左移两位右移一位右移一位右移两位右移两位 61,1111001 131,1110010 1041,0010111 521,1001011 261,1100101移位前移位前对应的真值对应的真值机机 器器 数数移位操作移位操作 71,1111
33、001 131,1110011 1041,0011000 521,1001100 261,1100110移位前移位前对应的真值对应的真值机机 器器 数数移位操作移位操作补码补码反码反码左移一位左移一位左移两位左移两位右移一位右移一位右移两位右移两位左移一位左移一位左移两位左移两位右移一位右移一位右移两位右移两位4.算术移位和逻辑移位的区别算术移位和逻辑移位的区别算术移位算术移位有符号数的移位有符号数的移位逻辑移位逻辑移位无符号数的移位无符号数的移位逻辑左移逻辑左移逻辑右移逻辑右移低位添低位添 0,高位移丢,高位移丢高位添高位添 0,低位移丢,低位移丢例如例如 01010011逻辑左移逻辑左移1
34、0100110逻辑右移逻辑右移01011001算术左移算术左移算术右移算术右移0010011011011001(补码)(补码)高位高位 1 移丢移丢01 0 1 0 0 1 1 0Cy0 1 0 1 0 0 1 10010110010二、加减法运算二、加减法运算1.补码加减运算公式补码加减运算公式(1)加法加法(2)减法减法 整数整数 A补补+B补补=A+B补补(mod 2n+1)小数小数 A补补+B补补=A+B补补(mod 2)AB=A+(B)整数整数 A B补补=A+(B)补补=A补补+B补补(mod 2n+1)小数小数 A B补补=A+(B)补补(mod 2)连同符号位一起相加,符号位产
35、生的进位自然丢掉连同符号位一起相加,符号位产生的进位自然丢掉=A补补+B补补2.举例举例解:解:A补补B补补A补补+B补补+=0.1 0 1 1=1.1 0 1 1=1 0.0 1 1 0=A+B补补验证验证例例 6.18设设 A=0.1011,B=0.0101求求 A+B补补0.1011 0.01010.0110 A+B =0.0 1 1 0A补补B补补A补补+B补补+=1,0 1 1 1=1,1 0 1 1=1 1,0 0 1 0=A+B补补验证验证 1001 1110 0101+例例 6.19设设 A=9,B=5 求求 A+B补补解:解:A+B =1110例例 6.20设机器数字长为设机
36、器数字长为 8 位(含位(含 1 位符号位)位符号位)且且 A=15,B=24,用补码求,用补码求 A B解:解:A=15 =0001111B=24=0011000A补补+B补补+A补补=0,0001111 B补补=1,1101000=1,1110111=A B补补B补补=0,0011000练习练习 1设设 x=y=,用补码求,用补码求 x+y9161116x+y=0.1100=1216练习练习 2 设机器数字长为设机器数字长为 8 位(含位(含 1 位符号位)位符号位)且且 A=97,B=+41,用补码求,用补码求 A BA B=+1110110=+118 A B=1001=9错错错错Sf1
37、 Sf2=01,正溢出,正溢出Sf1 Sf2=11,无溢出,无溢出Sf1 Sf2=00,无溢出,无溢出Sf1 Sf2=10,负溢出,负溢出三、乘法运算三、乘法运算1.分析笔算乘法分析笔算乘法A=0.1101 B=0.1011AB=0.100011110.1 1 0 10.1 0 1 11 1 0 11 1 0 10 0 0 01 1 0 10.1 0 0 0 1 1 1 1符号位单独处理符号位单独处理乘数的某一位决定是否加被乘数乘数的某一位决定是否加被乘数 4个位积一起相加个位积一起相加乘积的位数扩大一倍乘积的位数扩大一倍乘积的符号心算求得乘积的符号心算求得?2.笔算乘法改进笔算乘法改进A B
38、=A 0.1011=0.1A+0.00A+0.001A+0.0001A=0.1A+0.00A+0.001(A+0.1A)=0.1A+0.010 A+0.1(A+0.1A)=0.1A+0.1 0 A+0.1(A+0.1A)=2-1A+2-1 0 A+2-1(A+2-1(A+0)第一步第一步 被乘数被乘数A+0第二步第二步 右移右移 一一 位,得新的部分积位,得新的部分积第八步第八步 右移右移 一一 位,得结果位,得结果第三步第三步 部分积部分积+被乘数被乘数右移一位右移一位3.改进后的笔算乘法过程(竖式)改进后的笔算乘法过程(竖式)0.0 0 0 00.1 1 0 10.1 1 0 10.1 1
39、 0 10.0 0 0 00.1 1 0 1初态,部分积初态,部分积=0乘数为乘数为 1,加被乘数,加被乘数乘数为乘数为 1,加被乘数,加被乘数乘数为乘数为 0,加,加 01.0 0 1 110.1 0 0 11 11.0 0 0 11 1 1乘数为乘数为 1,加,加 被乘数被乘数0.1 0 0 01 1 1 11,得结果,得结果1 0 1 1=0.0 1 1 01,形成新的部分积,形成新的部分积1 1 0 1=0.1 0 0 11,形成新的部分积,形成新的部分积1 1 1 0=0.0 1 0 01,形成新的部分积,形成新的部分积1 1 1 1=部部 分分 积积 乘乘 数数 说说 明明小结小结
40、 被乘数只与部分积的高位相加被乘数只与部分积的高位相加 由乘数的末位决定被乘数是否与原部分积相加,由乘数的末位决定被乘数是否与原部分积相加,然后然后 1 位形成新的部分积位形成新的部分积,同时,同时 乘数乘数 1位位(末位移丢),空出高位存放部分积的低位。(末位移丢),空出高位存放部分积的低位。硬件硬件3个寄存器,具有移位功能个寄存器,具有移位功能1个全加器个全加器 乘法乘法 运算可用运算可用 加和移位实现加和移位实现n=4,加加 4 次次,移移 4 次次4.原码乘法原码乘法(1)原码一位乘运算规则原码一位乘运算规则以小数为例以小数为例设设x原原=x0.x1x2 xn y原原=y0.y1y2
41、yn=(x0 y0).x*y*x y原原=(x0 y0).(0.x1x2 xn)(0.y1y2 yn)式中式中 x*=0.x1x2 xn 为为 x 的绝对值的绝对值 y*=0.y1y2 yn 为为 y 的绝对值的绝对值 乘积的符号位单独处理乘积的符号位单独处理 x0 y0数值部分为绝对值相乘数值部分为绝对值相乘 x*y*(2)原码一位乘递推公式原码一位乘递推公式x*y*=x*(0.y1y2 yn)=x*(y12-1+y22-2+yn2-n)=2-1(y1x*+2-1(y2x*+2-1(ynx*+0)z1znz0=0z1=2-1(ynx*+z0)z2=2-1(yn-1x*+z1)zn=2-1(y
42、1x*+zn-1)z0例例6.21已知已知 x=0.1110 y=0.1101 求求x y原原解:解:0.0 0 0 00.1 1 1 00.1 1 1 00.0 0 0 00.1 1 1 00.1 1 1 0部分积部分积 初态初态 z0=0 部部 分分 积积 乘乘 数数 说说 明明0.0 1 1 101.0 0 0 11 01.0 1 1 01 1 00.1 0 1 10 1 1 01,得得 z4逻辑右移逻辑右移1 1 0 1=0.0 1 1 11,得得 z10 1 1 0=0.0 0 1 11,得得 z21 0 1 1=0.1 0 0 01,得得 z31 1 0 1=逻辑右移逻辑右移逻辑右
43、移逻辑右移逻辑右移逻辑右移+x*+0+x*+x*数值部分按绝对值相乘数值部分按绝对值相乘 乘积的符号位乘积的符号位 x0 y0=1 0=1x*y*=0.1 0 1 1 0 1 1 0则则 x y原原 =1.1 0 1 1 0 1 1 0特点特点绝对值运算绝对值运算逻辑移位逻辑移位例例6.21 结果结果用移位的次数判断乘法是否结束用移位的次数判断乘法是否结束举例X原=0.1011 Y原=1.1101Ps=Xs Ys =0 1=1|P|=|X|Y|原码一位乘法0000011010 0 0 0 0 1 1 0 1为各寄存器给初值为各寄存器给初值0 1 0 1 1第一次求部分积0000011010 0
44、 0 0 0 1 1 0 10 1 0 1 10 1 0 1 1010111101加运算:加运算:|X|第一次求部分积0000011010 1 0 1 1 1 1 0 10 1 0 1 10 0 1 0 1 1 1 1 0010111101右移右移1位位001011110第二次求部分积0000011010 0 1 0 1 1 1 1 00 1 0 1 10 0 1 0 1 1 1 1 0010111101加运算加运算:0001011110001011110第二次求部分积0000011010 0 1 0 1 1 1 1 00 1 0 1 10 0 0 1 0 1 1 1 1010111101右移
45、右移1位位001011110001011110000101111第三次求部分积0000011010 0 0 1 0 1 1 1 10 1 0 1 10 1 1 0 1010111101加运算:加运算:|X|001011110001011110000101111011011111第三次求部分积0000011010 1 1 0 1 1 1 1 10 1 0 1 10 0 1 1 0 1 1 1 1010111101右移右移1位位001011110001011110000101111011011111001101111第四次求部分积0000011010 0 1 1 0 1 1 1 10 1 0 1
46、11 0 0 0 1010111101加运算:加运算:|X|001011110001011110000101111011011111001101111100011111第四次求部分积0000011011 0 0 0 1 1 1 1 10 1 0 1 10 1 0 0 0 1 1 1 1010111101右移右移1 1位位001011110001011110000101111011011111001101111010001111低位积低位积高位积高位积符号位异或符号位异或结果为:结果为:1 1,10001111,10001111(4)原码两位乘原码两位乘原码乘原码乘符号位符号位 和和 数值位数值
47、位 部分部分 分开运算分开运算两位乘两位乘每次用每次用 乘数的乘数的 2 位判断位判断 原部分积原部分积是否加是否加 和和 如何加如何加 被乘数被乘数1 11 00 10 0 加加“0”2加加 1 倍的被乘数倍的被乘数 2加加 2 倍的被乘数倍的被乘数 2加加 3 倍的被乘数倍的被乘数 23?先先 减减 1 倍倍 的被乘数的被乘数再再 加加 4 倍倍 的被乘数的被乘数4 13100 0111 新的部分积新的部分积乘数乘数yn-1 yn5.补码乘法补码乘法设设 被乘数被乘数乘数乘数x补补=x0.x1x2 xny补补=y0.y1y2 yn 被乘数任意,乘数为正被乘数任意,乘数为正同原码乘同原码乘但
48、但 加加 和和 移位移位 按按 补码规则补码规则 运算运算乘积的符号自然形成乘积的符号自然形成 被乘数任意,乘数为负被乘数任意,乘数为负乘数乘数y补补,去掉符号位去掉符号位,操作同,操作同 最后最后 加加x补补,校正校正(1)补码一位乘运算规则补码一位乘运算规则以小数为例以小数为例补补补补|0YXYXYXYYYXXXn补补221补补补补补2X2)(2)(2221211YXYXYYYYYXYYYYXYYXnnn可见教材补码定义 )0(00 )0()0(2*10110221212121211212121补补补补补补补又XYYYXYYYXYYYXYXXYYYXYXYYYYYYYYYYYYYYnnnn
49、niiinnn可见教材补码定义综合以上两种情况综合以上两种情况 XYXY均任意均任意补补补补补)0(1 0 0 02100XYYYXYXYYYXYXYYn例例:设设X=-0.1101,Y=0.1011,即即X补补=11.0011,Y补补=0.1011 求求XY补补计算过程如下计算过程如下:0 0 0 0 0 0 1 0 1 1 初始值,1 1 0 0 1 1 +X补1 1 0 0 1 11 1 1 0 0 1 1 1 0 1 右移一位1 1 0 0 1 1 +X补1 0 1 1 0 01 1 0 1 1 0 0 1 1 0 右移一位0 0 0 0 0 0 +01 1 0 1 1 01 1 1
50、0 1 1 0 0 1 1 右移一位 1 1 0 0 1 1 +X补1 0 1 1 1 01 1 0 1 1 1 0 0 0 1 右移一位+部分积 乘数Y 说明乘积高位 乘积低位XY补=1.01110001,XY=-0.10001111 Booth 算法算法(被乘数、乘数符号任意)(被乘数、乘数符号任意)设设x补补=x0.x1x2 xn y补补=y0.y1y2 ynx y补补=x补补(0.y1 yn)x补补 y0=x补补(y1 2-1+y22-2+yn2-n)x补补 y0=x补补(y0+y1 2-1+y22-2+yn2-n)=x补补y0+(y1 y12-1)+(y22-1y22-2)+(yn2