算術邏輯單元

ALU

arithmetic and logic unit 算術邏輯單元,簡稱ALU,是計算機的數學大腦,也就是計算機裏負責運算的組件,好比把兩個數相加。基本其餘的組件都用到了ALU,它有兩個 單元 一個算術單元,一個邏輯單元測試

算術單元

算術單元,它主要負責計算機裏的全部數字操做,好比加減法,自增自減等。 接下來,使用最簡單的加法電路,即兩個bit相加,bit是0或者1,來看看它是怎麼設計與運行的。設計

半加器

首先有兩個輸入,A和B,一個輸出,即A和B的和,這裏三個數A,B,輸出,都是單個bit(0或1)。那麼輸入只有四種可能:3d

  • 0+0=0
  • 0+1=1
  • 1+0=1

上面這三種的輸入和輸出,與XOR(異或)門的邏輯是同樣的,因此能夠用XOR門做爲一位加法器,可是第四種組合:1+1 = 2是個特例,但在二進制裏沒有2,所以1+1的結果是0,1進到下一位。真值表和XOR門與下圖所示:cdn

能夠看的出XOR門的輸出,只對了一部分,1+1輸出0,可是還須要一條額外的線表明「進位」,並且只有在輸入是1和1時,進位纔是true,而且算出來的結果用1個bit也存不下。所以能夠結合AND(與)門來實現。新的真值表和電路以下圖:

由這兩個邏輯門組合而成的組件,就是大名鼎鼎的 半加器 ! 即兩個輸入 A 和 B 都是 1 位 ,兩個輸出 "總和" 與 "進位",沒有進位輸入的加法器電路。blog

全加器

因爲半加器沒有進位輸入,所以想要處理超過1+1的運算,就須要用到 全加器,半加器輸出了進位,所以在計算下一列的時候,還有以後的每一列,咱們須要將 三個位 加在一塊兒,而不在是兩個。遊戲

所以全加器有三個輸入,A,B,C(都是1個bit),因此最大的可能就是1+1+1,總和1,進位1,所以也須要兩條輸出線,「總和」和「進位」數學

可使用半加器,作全加器:it

先用半加器將A和B相加,而後將C輸入到第二個半加器,最後用一個 OR 門檢查進位是否是 true。 這樣全加器就使用了,來看看真值表和圖示:io

這就是大名鼎鼎的 全加器 ,它會把三個輸入A,B,C加起來,輸出「總和」和「進位」。class

如今有了全加器和半加器,就能夠相加兩個8位(bit)數字,A和B:

一、先從A和B的第一位開始,稱爲A0和B0,因爲是第一次相加,不用處理任何進位,直接使用 半加器 相加,輸出叫sum0;

二、如今相加A1和B1,由於A0和B0的結果有可能進位,因此使用 全加器,除了A1和B1,還要連上進位,輸出爲sum1;

三、把上一步獲得的進位輸入到 下一個全加器,處理A2和B2

四、以此類推,處理完8個bit。

以下圖所示:

因爲是8bit相加,所以被稱爲8-BIT RIPPLE CARRY ADDER(8位行波進位加法器)

溢出

若是第9位有進位,表明2個數字的和,超過了8個bit,這被稱爲「溢出(overfloe)」。最著名的就是「吃豆人」的關卡數,由於是使用8個bit記錄關卡數的,所以最大值爲255,當玩家進入256關的時候,就會發生溢出,致使遊戲界面出現亂碼。想要避免溢出,能夠加更多的全加器,能夠操做16或者32個bit的數字,讓溢出更難發生,但代價是更多的邏輯門和更長的時間

各類ALU的不一樣

簡單的ALU是沒有專門的電路來處理乘法和除法,而是用屢次加法來實現乘法,好比12X5,這和將12加5次是同樣的,因此要5次ALU操做來實現這個乘法,雖然比較慢(相對而言),可是勝在簡單。

比較先進的ALU,好比計算機和手機中,有專門作乘法的部分,乘法電路比加法複雜,但只是須要更多的邏輯門進行組裝。

邏輯單元

邏輯單元是執行各類邏輯操做的,好比AND,OR,NOT等操做,也能作簡單的數值測試,好比一個數字是否是負數。

總結

在工程上,工程師們使用大「V」來表示ALU。來看一下8-bit ALU的輸入與輸出:

  • 兩個輸入:A和B,都是8 bit;
  • 操做碼: 用4位操做碼告訴ALU執行什麼操做,好比加法減法,「1000」可能表明加法,「1100」表明減法等;
  • 輸出結果:一個8 bit
  • 標誌位:同時也會輸出一堆標誌(flags),標誌是1 bit,表明特定的狀態。通常有overflow(溢出),zero(零值),negative(負值)。 例如:若是想知道A 是否小於 B,能夠用 ALU 來算 A 減B,看負標誌是否爲 true,若是是 true,咱們就知道 A 小於 B。

Thanks!

相關文章
相關標籤/搜索