引言
計算機組成原理中的基本知識,感覺有點繞,做個記錄。
一般乘法運算
以-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 |