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