計算機組成的一些總結(13)邏輯算術單元的實現

2022-08-05 18:48:09 字數 1707 閱讀 5511

邏輯運算的實現

與運算的實現

and  rd , rs , rt  把32個與門並排連起來,將32位的輸入分別連線到這32個與門上 ,這32個與門的輸出組成了32位的數。在這條與運算的指令控制下,rs 所指定的暫存器內容會被傳送到這個埠,rt 暫存器所指向的內容會被傳送到另一個埠,經過這些與門之後,得到的運算結果,會被傳送到 rd 所指定的暫存器當中,這樣就完成了與運算。

或運算的實現

or  rd , rs , rt  需要32個或門

半加器(half  adder)

功能是將兩個一位二進位制數相加,由一個異或門和一個與門組成,它由兩個輸入埠a和b,就是要相加的兩個一位二進位制數,兩個輸出埠,其中一個是s,相當於這兩個一位二進位制數相加對應產生的和,而c則是它們產生的進位,有進位就是1,沒有進位就是0,半加器缺點是不能將第一位產生的進位作為輸入參與運算。

全加器(full adder)   也是將兩個一位二進位制數相加

全加器由兩個半加器構成,全加器有三個輸入,除了兩個源運算元a和b,還有一個進位輸入cin,它的輸出有兩個,運算的結果s和進位輸出cout,這樣三個輸入總共有8種組合的情況。

“溢位”的檢查方法

“最高位的進位輸入”不等於“最高位的進位輸出”

加法器的硬體實現,對於有符號數和無符號數的處理都是一樣的。

mips對溢位的處理方式

(1)將運算元看做有符號數,發生“溢位”時產生異常

add  rd , rs , rt    #  r[rd]=r[rs]+r[rt]

addi  rt , rs , imm     #  r[rt]=r[rs]+signextimm

(2)將運算元看做無符號數,不處理“溢位”

addu  rd , rs , rt    #  r[rd]=r[rs]+r[rt]

addiu  rt , rs , imm    #  r[rt]=r[rs]+signextimm  

x86對溢位的處理方式

溢位標誌of(overflow flag)  x86的運算指令,如果產生了溢位,並不會直接由控制電路檢查到並進行處理,而是將加法器產生的溢位訊號傳送到了標誌暫存器,若發生溢位,則會自動設定標誌暫存器當中的of=1,否則of=0。

減法運算    (可轉換為加法運算,計算機中用補碼錶示二進位制數,補碼錶示的二進位制數的相反數,轉換規則,按位取反,末位加一,由來是假如有一個數x,按位取反,就是將x中的每一位由0變成1,由1變成0,那麼得到了x按位取反以後的值,如果我們把這兩個值相加,那麼它們的和,顯而易見,每一位都是1,而在補碼錶示中,全1的二進位制數,就代表著-1,由這個運算得到 x+(~x)=-1 ,  即 (~x)+1=-x )

a + (-b) = a + (~b+1)

硬體實現的方式是在原來的加法器,原來的輸入a和b都不變,我們增加了一個新的輸入,只有1個位元,稱為減法模式(sub-mode),它首先控制了一個二選一的多選器(2-to-1 mux),如果這個訊號為0,代表是執行加法操作,會將多選器的這一條通路選通,也就是直接將b傳送到下面的全加器,這和加法運算是一樣。而且我們還知道這個選擇訊號還連線到了最低位全加器的進位輸入,但是因為它現在是0,所以仍然和剛才的加法操作是一樣的,這時候就該執行一個加法的運算。 如果這個訊號為1,代表要執行一個減法的運算,二選一的多選器會選擇將b這個訊號的輸入每一位都接上一個非門,相當於按位取反,將按位取反的b送到每一個全加器與a相加,因為這個選擇訊號為1,所以最低位的全加器的進位輸入也是1,這樣就實現了對b進行按位取反,末位加一的操作,於是這個加法器也就變成減法器。