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

二進制加法

半加器(Half Adder)

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

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

 

全加器(Full Adder)

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

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

 

4-bit 加法器

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

顯而易見,這個圖能夠推廣,因此這樣就能獲得32-bit的加法器。原理

 

溢出

檢查加法結果是否溢出硬件

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

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

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

   4-bit運算時方法

  

 溢出的檢查方法im

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

 

 通過一個異或門,若是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

相關文章
相關標籤/搜索