引言
计算机组成原理中的基本知识,感觉有点绕,做个记录。
一般乘法运算
以-1101 X 1011
为例
-1101
x1011
--------------
1101
1101
0000
1101
-----------------
0.10001111
计算机进行像这样的乘法运算有两大困难:一是将四个位积一次相加,机器难以实现;而是乘积位数增长了一倍,会造成器材浪费和运算时间增加。
所以计算机中对乘法运算进行了改进:
- 我们把乘法运算时中间值称为部分积,如:1101, 1101和下面的1101加和而成的100111。
- 乘法运算可用移位和加法来实现,可以看到,本例需要进行四次乘法运算和四次加法运算(第一次乘完后看做与0000相加),每次加法运算时上面数的最后一位总是不参与运算,所以我们可以在每次运算后把最后一位存起来,每次做加法时只与原部分积的高位相加。
- 被乘数与原部分积相加,然后右移一位形成新的部分积,同时,乘数也右移一位,由次低位作新的末位空出最高位放部分积的最低位。
- 每次做加法时,被乘数仅仅与原部分积的高位相加,其低位被移至乘数所空出的高位位置。
计算机很容易实现这种运算规则。用一个寄存器存放被乘数,一个寄存器存放乘积的高位,另一个寄存器存放乘数及乘积的低位,再配上加法器及其他相应电路,就可组成乘法器。又因加法只在部分积的高位进行,故不但节省了器材,而且还缩短了运算时间。
具体运算过程
还是以-1101 X 1011
为例,采用双符号位
补码 -1101:11.0011; 1011:00.1011
部分积 | 乘数 | 说明 |
---|---|---|
00.0000+11.0011=11.1001 | 1011 | 乘数为1。 |
11.1001+11.0011=10.1100 | 1101 | 乘数为1;计算前部分积为11.1001,末位为1,将乘数右移然后前面补1,然后再将部分积右移一位再进行运算。 |
11.0110+00.0000=11.0110 | 0110 | 乘数为0;部分积直接右移作为计算结果,乘数右移,补上上个部分积的末位 |
11.1011+11.0011=10.1110 | 0011 | 乘数为1;计算前部分积为11.0110,末位为0,将乘数右移然后前面补0,然后再将部分积右移一位再进行运算。 |
将10.1110右移一位然后接上乘数得11.01110001 |
||
原码:1.10001111 |