加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结
在學習計算機組成原理的計算方法時,或為步驟疑惑,或為題目難倒,本文主要介紹思路以及對常用類型小結
個人總結,僅供參考,能力有限,難免出錯,歡迎大家討論,書籍參考唐朔飛版《計算機組成原理》
- 將所給真值或機器數轉換成補碼
- 若是相減,則將減數的補碼變成負減數的補碼,以實現相加
- 兩數進行相加
- 溢出判斷
1. 加減法
例1 A=+0.1011,B=-0.0101,求[A+B]補
解:無論是加法還是減法,我們最后都要轉換成相加,其中[A]補=0.1011,[B]補=1.1011,則[A]補+[B]補=10.0110,將高位的1移去(這里的移去是計算機自動移去高位)
例2 機器數字長為8位(含1位符號位),若A=+15,B=+24,求[A-B]補
解:[A]補=0,0001111,[B]補=0,0011000,但此時要求的是A-B的補碼,又[A-B]補=[A]補-[B]補=[A]補+[-B]補
故求得[-B]補=1,1101000(一個數的負數的補碼求法為:連同符號在內,每位取反,末位加1)
則可計算[A]補+[-B]補=1,1110111
小結1:加減法符號位1位,不參與運算,加法器有n+1位,同樣也可知累加器ACC和寄存器X也為n+1位,可理解為符號位1位+數值位n位,這里和后面要區分開的一個點,這里的符號位沒有單獨存放,而是和數據一起存放,詳情查閱唐版教材P242和P247(原碼一位乘法符號位存放在S中,后面會有小結)
2. 乘法
2.1 原碼一位乘法:原碼一位乘法開始我也一直沒懂,被教材P244的表6.8卡住了,現用我自己的話解釋,閱讀下面內容需仔細查看教材P243了解小學數學乘法計算步驟。
?
現在我們有盒子,每個盒子只有5個空位,我們要在盒子里面進行兩個數0.1101和0.1011的計算(即0.1101*0.1011),如果我們按照小學數學的乘法,會發現盒子不夠用(請動筆按照教材P243算一下,看是不是超過5個空位)。計算機也是這么想的,它要計算很大很多的數據,就想盡可能省空間和運算次數,所以按照P243運算思路,其計算過程如下:
| ACC | ? |
| X | ? |
| MQ | ? |
首先在ACC盒子中放被乘數0.1101,正好5個空位,然后想辦法用乘數仿照小學數學乘法去1個1個乘,那就把乘數0.1011放另一個盒子X中。結果我們就放到MQ中吧,但是問題來了,MQ也只有5個空,前面我們的結果0.10001111要9個空,空間不足啊!好辦,在乘法過程中,每個乘數的末尾用了一次就不用了,那我們就可以用了之后就把它丟了,那么乘積多出來的部分也可以放。所以就有了教材P244的表6.8
也即,部分積一次一次地放相加結果,加完了右移一位數到乘數空格中,乘數空格本來就5位,故會擠掉低位,這個地位是已經進行運算過了的數,所以丟掉沒影響。很多同學包括我,沒看懂的原因就是部分積的末位推到了乘數的高位,就像擠牙膏,后面的(部分積)把前面的(乘數)積出來了一點點,但這一點點馬上要用來刷牙(已經乘過了),所以沒影響。后面其他運算類似,故不再贅述。
小結2:部分積位數n+1,注意加減法中為n,且符號位另有單獨的S存放,是通過異或運算得到。因為是原碼,進行邏輯移位,故符號位不參與運算。在0.1101*0.1011運算過程中,運算次數是根據1011這4個數決定的,故運算次數是n位,并且我們進行了4次移位,且是在運算之后
2.2 補碼一位乘法:兩位的運算能簡化計算,但對人腦更復雜,考研不考,我們接著看補碼一位乘法。
Booth算法:原理和原碼一位乘類似,詳情參見P254.
小結3:補碼考慮到溢出,符號位2位,沒有單獨運算器,符號位參與運算(是否參與運算的意思,就是算術移位還是邏輯移位的區別。比如原碼一位乘,因為是原碼,移位的時候不看符號直接添0所以是邏輯移位,而補碼一位是跟著符號添加的,故是算術移位,有不清楚的看教材P234的表6.4),同樣我們知道符號是參與運算得來的,看最后結果的符號位就行。注意因為一開始需要進行判斷正負(因為Booth的原理如此,很長有點難),所以一開始就要進行一次運算,看到底是[-X]補,還是[X]補,所以運算次數是n+1,但移位還是根據本身的位數n,在運算中,因為要判斷溢出,現在我們的加法器也就變成了n+2位,也可以記成因為2有兩位符號位,所以是n+2.
3. 除法
3.1 原碼恢復余數法
核心思想是:相減看是正是負,是正的就說明可以減,那上商1,移位;是負的說明不夠減,但現在已經減完了,那要補回來,上商0,移位。如此反復,最后的末位也按此規則。(補碼加減交替法末位恒上1)
小結4:此法用的少,首先比較麻煩,最少運算n+1次,最多運算2n+1次,1是第一次進行兩數相減判斷正負,故為n+1,結合教材P259-260除去恢復的,共5次運算,而本身只有4位數值可進行佐證。移位需n次,上商次數與最低次數相同,為n+1,也即恢復的時候不上商
3.2 原碼加減交替法
原碼加減交替是在原碼恢復余數法基礎上改進,本來是負的就補回去,但后面仍要移位,故改成:負的意味著更小,上商0,左移一位之后再加補數,再根據此結果循環。由于一開始要進行相減判斷大小,故運算次數n+1次,移位還是n次。并且除法當中左移按邏輯移位(它的原理就是如此),故符號參加運算,但符號位由異或得到,同樣由運算器S保存
3.3 補碼加減交替法
同為補碼,但符號位只有1位,與補碼一位乘不同,符號位也是異或得到。上商n+1次,移位n次,符號位參與運算
| 原碼一位乘 | 1 | No | n | n | 異或 | S | ? |
| Booth | 2 | Yes | n+1 | n | 運算 | A | ? |
| 原碼恢復 | 1 | Yes | n+1~2n+1 | n | 異或 | S | ? |
| 原碼加減 | 1 | Yes | n+1 | n | 異或 | S | ? |
| 補碼加減 | 1 | Yes | n+1 | n | 異或 | A | ? |
?
?
?
總結
以上是生活随笔為你收集整理的加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LSGAN
- 下一篇: 【C语言练习——打印空心三角形】