引言:
我們都知道,在計算機中的加減運算都是由補碼來實現的,那麼,計算機是如何運用電路來實現補碼的加減的呢?在計算機中,所有的加減運算其實都變成了加法後來參與運算的,那麼僅需要一個加法器就可以實現了。請看下面內容。
(一)全加器的構成
1.什麼是全加器
全加器英語名稱爲full-adder,是用門電路實現兩個二進制數相加並求出和的組合線路,稱爲一位全加器。一位全加器可以處理低位進位,並輸出本位加法進位。多個一位全加器進行級聯可以得到多位全加器。
(1)一位全加器邏輯電路圖如下
該一位全加器的求和部分Si由兩個異或門組成,進位部分Ci+1由與非門組成。
(2)簡單的直觀表示
全加器由兩個二進制數字Ai,Bi和一個進位輸入Ci相加,產生一個和輸出Si,以及一個進位輸出Ci+1。
下表中列出一位全加器進行加法運算的輸入輸出真值表。
(3)邏輯表達式
根據所示的真值表,三個輸入端和兩個輸入端可按如下邏輯方程進行聯繫:
Si=Ai⊕Bi⊕Ci
Ci+1=AiBi+BiCi+CiAi
看到這裏你想起了什麼?是不是補碼運算的相加、進位、判斷溢出?
(二)補碼運算的二進制加法/減法器的邏輯結構
1.補碼加減運算法則
(1)對於定點數的加法
定點小數:[X]補+[Y]補=[X+Y]補 (mod 2)
定點整數:[X]補+[Y]補=[X+Y]補 (mod 2^n+1)
(2)對於定點數的減法
定點小數: [X-Y]補=[X]補+[-Y]補 (mod 2)
定點整數: [X-Y]補=[X]補+[-Y]補 (mod 2^n+1)
可以看出,在補碼運算中,減法都變成了了加上該補碼負數的形式。
(3)補碼取負數:
即[X]補包括符號位在內的各位取反,末位加一後變成[-X]補
那麼如何使用電路實現?如下
2.多位全加器實現補碼加減運算
(1)圖中字母代表含義
字母 | 含義 |
---|---|
M | 方向控制 (即控制做加\減法運算) |
An | 輸入的 [X]補 |
Bn | 輸入的 [Y]補 |
Cn | 進位輸入\輸出 |
Sn | 結果輸出 |
(2)實現加減
1.加法運算
當時加法運算時,我們的控制輸入M就會起到相應的作用,當M=0時,他與Bn相連,做異或處理,此時可見結果就等於Bn本身,此時Bn輸入到一位的全加器中,與An輸入相加,在n=0處還加上了M的0,對結果無影響。
2.減法運算
而當M=1時,進行減法運算,此時的Bn與M=1進行異或,得到的就是Bn的反碼,而最低位的M=1做一個加數進入到運算中就是:An+(Bn+1),此時的1在最低位。那麼就可以看到,其實這時的M作用一就是將[Y]補轉換成[-Y]補,使整個電路做補碼的減法運算。
(三)判斷溢出
而在這裏,就是採用的單符號位法來判斷是否溢出
(1)單符號位判斷法
1.當最高數值位產生進位而符號位不產生進位時,產生上溢;
2. 當最高數值位不產生進位而符號位產生進位時,產生下溢。
簡單來講也就是:
總:只要最高數值位與符號位 “都產生進位或都不產生進位(同號)” 時不溢出,否則溢出。
那麼我們從電路圖中就可以看出:
1.若Cn與Cn-1同號,則經過異或門結果爲0,不溢出;
1.若Cn與Cn-1異號,則經過異或門結果爲1,溢出;
Cn我們在前面說過,就是輸出的進位。
(2)實例圖
如圖所示,這次做的爲:(+8) + (+12) = 20 即 001000 + 001100 = 010100 沒有溢出