1. 程式人生 > >計算機組成與設計(四)—— 加法和減法的實現

計算機組成與設計(四)—— 加法和減法的實現

二進位制加法

半加器(Half Adder)

半加器的功能是將兩個1位二進位制數相加。輸入埠A、B,輸出埠S(輸出),C(進位)。

其有一個很明顯的缺點:不能將低位的進位參與運算。

 

全加器(Full Adder)

全加器由兩個半加器構成。輸入埠A、B、Cin,輸出埠S(和)、Cout(進位輸出)。

有了全加器,只要將它簡單的連在一起就能實現多位的加法器。

 

4-bit 加法器

例如求 (1101)2 + (0110)2,答案應該為和為 (0011)2,進位為1.可以用4個全加器構成4-bit全加器來實現,如圖

顯而易見,這個圖可以推廣,所以這樣就能得到32-bit的加法器。

 

溢位

檢查加法結果是否溢位

溢位(overflow):是指運算結果超出了正常的表示範圍

  • 溢位僅針對有符號運算而言的,發生溢位有兩種情況:兩個正數相加,結果為負數;兩個負數相加,結果為正數。其實,無符號時可看作是mod 2k(k是最大位數),既然取模了,自然不用考慮溢位
  • 有溢位不一定有進位、有進位不一定有溢位

  • 有符號加法和無符號加法在運算時硬體電路是一樣的,只是對結果的解讀不同

   4-bit運算時

  

 溢位的檢查方法

“最高位的進位輸入”不等於“最高位的進位輸出”,說明產生了溢位。

 

 經過一個異或門,如果C31

和Cout 不相等,overflow被設為1,表示溢位。(為什麼可以通過這種方法判斷呢?)

 

對溢位的處理方式

MIPS

提供對兩種不同指令分別的處理

  • 將運算元看作有符號數,發生“溢位”是產生“異常”,如add rd,rs,rt   addi,rt,rs,imm
  • 將運算元看作無符號數,不處理“溢位”,如addu rd,rs,rt   addiu rt,rs,imm

X86

設有“溢位標誌OF”(Overflow Flag)。如果把操作看作有符號數,若發生溢位,則自動設定OF=1;否則OF=0。

 

二進位制減法

原理

  • 減法運算可轉換成加法運算
  • 只需將負數變成它的補碼,補碼與原碼之間的轉換規則:按位取反、末位加一
  • A - B = A + (~B + 1)

 

實現

這其實是一個加法和減法器,與之前的32-bit加法器相比,在輸入端B多了一個二選一多路選擇器,當sub-mode為0,是加法模式,也沒有來自低位的進位;當sub-mode為1時,是減法模式,首先B按位取反,同此同時sub-mode為是低位的進位,剛好是-B = ~B + 1.

 

參考連結:https://www.coursera.org/learn/jisuanji-zucheng/lecture/ydYAV/305-jia-fa-he-jian-fa-de-shi-xian