计算机组成原理辅导与实验 联系客服

发布时间 : 星期四 文章计算机组成原理辅导与实验更新完毕开始阅读

例2.17 已知 x= -0.1101 y=-0.1011 用原码一位乘法求:(x×y)原=? 分析:

原码一位乘法运算规则:

① 被乘数和乘数均取绝对值参加运算,符号位单独考虑。

② 被乘数取双符号,部分积的长度与被乘数的长度相同,初值为0。 ③ 从乘数的最低位的yn位开始对乘数进行判断, 若yn=1,则部分积加上被乘数|x|,然后右移一位; 若yn=0,则部分积加上0,然后右移一位。 重复③判断n次。

积的符号Pf = xf ⊕yf 。

解 |x|=00.1101 (用双符号表示) |y|= 0.1011 (用单符号表示) 部分积 乘数 yn 说 明 00.0000 0.1011 + 00.1101 yn=1 加|x| 00.1101 00.0110 1 0.101 右移一位得 P1 + 00.1101 yn=1 加|x| 01.0011 1 + 00.1001 11 0.10 右移一位得 P2 00.0000 yn=0 加0 00.1001 11 00.0100 111 0.1 右移一位得 P3 + 00.1101 yn=1 加 |x| 01.0001 111 00.1000 1111 0 右移一位得 P4 由于 Pf= xf⊕yf =1⊕1=0 |P|=|x|.|y| =0.10001111 所以 (x×y)原=0.10001111

例2.18 x= -0.1101,y=0.1011,用补码一位乘法求[x×y]补=? 分析:

补码一位乘法运算规则如下:

符号位参与运算,运算的数均以补码表示。

被乘数一般取双符号位参加运算,部分积初值为0。

乘数可取单符号位,以决定最后一步是否需要校正,即是否要加[–x]补。 乘数末位增设附加位y n+1,且初值为0。

从低到高依次判断相邻两位ynyn-1的状态,按(00:部分积右移一位;01:部分积加[x]补,右移一位;10:部分积加[-x]补,右移一位;11:部分积右移一位)的规则进行操作。

按照上述算法进行n+1步操作,第n+1步不移位,根据y0与y1的比较结果作相应的运算即可。

补码移位规则,部分积为正,右移时有效位最高位补0;为负时最高位补1。 解 [x]补=11.0011,[-x]补=00.1101 (用双符号表示) [y]补=0.1011 (用单符号表示)

部分积 乘数 ynyn+1 说 明 00.0000 0.10110 + 00.1101 ynyn+1=10,加[-x]补

13

00.1101 00.01101 0.1011 00.001101 0.101 + 11.0011 11.011001 11.1011001 0.10 + 00.1101 00.1000001 00.01000001 0.1 + 11.0011 11.01110001 即 [x×y]补=1.01110001 右移一位得P1

ynyn+1=11,右移一位得 P2 ynyn+1=01,加[x]补 右移一位得P3 ynyn+1=10,加[-x]补 右移一位得P4 ynyn+1=01,加[x]补 最后一步不移位

讨论:

补码一位乘法算法对于定点整数的定点小数均适用,差别是最后一步的处理不同,即定点小数运算,最后一步不移位,末位补0;定点整数运算,最后一步同样右移一次,这样做的目的是构成2n位乘积。补码一位乘法每次根据乘数相邻的两位比较运算,处理一位乘数,因而速度慢。为了提高乘法运算速度,可采用补码二位乘法。 例2.19 x= –0.1101,y=0.0110, 用补码二位乘法求 [x×y]补=?

分析:

补码两位乘法的运算规则为: YYY 操 作 ① 符号位参加运算,两数均用补码表示。 0 0 0 加0,右移两位 ② 部分积与被乘数均采用三位符号表示,乘数末 0 0 1 加[x],右移两位 位增加一位Yn+1,其初值为0。 0 1 0 加[x],右移两位 ③ 按右表所示的操作。 0 1 1 加2[x],右移两位 ④ 若尾数n为偶数,则乘数用双符号,最后一步1 0 0 加2[-x],右移两位 不移位;若尾数n为奇数,则乘数用单符号,最后一1 0 1 加[-x],右移两位 步移一位。 1 1 0 加[-x],右移两位 解: 1 1 1 加0,右移两位 [x]补=111.0011,2[-x]补=001.1010,2[x]补=110.0110 (用三符号表示)

[y]补=00.0110 (用双符号表示)

部分积 乘数 yn+1 说 明 000.0000 00.01100

+ 001.1010 yn-1yn yn+1=100,加2[-x]补 001.1010 000.011010 00.011 右移两位

+ 110.0110 yn-1yn yn+1=011,加2[x]补 110.110010 111.10110010 00.0 右移两位

yn-1yn yn+1=000 最后一步不移位

故 [x×y]补=1.10110010

例2.20 x= -0.011,y= -0.011,用补码二位乘法求[x×y]补=?

解 [x]补=111.101,[-x]补=000.011 (用三符号表示)

n-1 n n+1补补补补补补 14

[y]补=1.101 (用单符号表示)

部分积 乘数yn+1 说 明 000.000 1.1010 + 111.101 yn-1yn yn+1=010,加[x]补 111.101 111.11101 1.10 右移两位 + 000.011 yn-1yn yn+1=110,加[-x]补 000.01001 000.001001 最后一步移一位 故 [x×y]补=0.001001 讨论: 补码二位乘法每次根据乘数相邻的三位比较运算,处理二位乘数,一次求出对应于该两位乘数的部分积。操作中出了加2[x]补,减2[x]补的操作等,可能因溢出而侵占双符号位的最高位,所以部分积和被乘数均采用三个符号位参与运算。

例2.21 x= -0.1101,y=0.0110,用原码二位乘法求[x×y]原=?

分析:

原码两位乘法的运算规则为:

Yn1 yn C 操 作 ① 符号位不参加运算,最后的符号Pf= xf?yf 。

加0,右移两位,0→C 0 0 0 ② 部分积与被乘数均采用三位符号,乘数末位

0 0 1 加x,右移两位,0→C 增加一位C,其初值为0。

0 1 0 加x,右移两位,0→C ③ 按右表所示的操作。

0 1 1 加2x,右移两位,0→C ④ 若尾数n为偶数,则乘数用双符号,最后一

1 0 0 加2x,右移两位,0→C 步不移位;若尾数n为奇数,则乘数用单符号,最

1 0 1 减x,右移两位,1→C 后一步移一位。

1 1 0 减x,右移两位,1→C 解:

1 1 1 加0,右移两位,1→C |x|=000.1101,2|x|=001.1010 (用三符号表示) |y|=00.0110 (用双符号表示)

部分积 乘数 C 说 明 000.0000 00.01100

+ 001.1010 yn-1ynC=100,加2|x| 001.1010 000.011010 00.010 右移两位,0→C + 000.1101 yn-1ynC=010,加|x| 001.001110 000.01001110 00.0 右移两位,0→C yn-1ynC=000,最后一步不移位 故 [x×y]原=0.01001110

例2.22 已知x= -0.1001 , y=-0.1011 用原码加减交替法求(x/y)原=?

分析:

原码加减交替法(不恢复余数法)运算规则为: ① 符号位不参加运算,并要求|x|<|y|;

② 先用被除数减去除数,当余数为正时,商上1,余数左移一位,再减去除数;当余数为负时,商上0,余数左移一位,再加上除数。

-③ 当第n+1步余数为负时,需加上|y|得到第n+1步正确的余数,最后的余数为rn×2n(余

- 15

数与被除数同号)。

④ 商的符号Qf= xf ?yf

解:

|x|=00.1001 |y|=00.1011 [-|y|]补= 11.0101 (用双符号表示) 被除数x/余数r 商数q 说 明 00.1001 +(-|y|)补 11. 0101 减去除数 11.1110 0 余数为负商上0 11.1100 0 r和q左移一位 +(|y|)补 00. 1011 加上除数 00.0111 0.1 余数为正商上1 00.1110 0.1 r和q左移一位 +(-|y|)补 11. 0101 减去除数 00.0011 0.11 余数为正商上1 00.0110 0.11 r和q左移一位 +(-|y|)补 11. 0101 减去除数 11.1011 0.110 余数为负商上0 11.0110 0.110 r和q左移一位 +(|y|)补 00. 1011 加上除数 00.0001 0.1101 余数为正商上1 Qf= xf⊕yf=1⊕1=0 (x/y)原=0.1101

-4

余数r原=1.0001×2(余数与被除数同号)。

例2.23 x= -0.1001,y= 0.1011,用补码一位除法求[x/y]补=?

分析:

补码一位除法运算规则由比较上商规则、商的校正规则和余数校正规则组成: 比较上商规则:

① 符号位参加运算,除数与被除数均用双符号补码表示。

② 若被除数与除数同号,用被除数减去除数得余数;若被除数与除数异号,用被除数加上除数得余数。

③ 若余数与除数同号,商上1,余数和商左移一位,将余数减去除数得新余数;若余数与除数异号,商上0,余数和商左移一位,将余数加上除数得新余数。

④重复规则(n+1)次,最后一步不移位,除法完成。 商的校正规则:

① 若除尽 (即运算过程中任一步余数为0),则除数为正,商不必校正;除数为负,商-加2n进行修正。

-② 若除不尽,则商为正时,不必校正;商为负,则商需要加2n进行修正。 余数校正规则:

① 若商为正,则余数与被除数异号时,将余数加上除数得正确的余数。 ② 若商为负,则余数与被除数异号时,余数需要减去除数进行校正。

余数之所以需要校正,是因为在补码不恢复余数除法运算过程中先比较后上商的缘故。可见,如果要保存余数必须根据具体情况对余数作相应处理,否则余数不一定正确。

解: [x]补=11.0111,[y]补=00.1011 [-y]补= 11.0101(用双符号表示)

16