計算機組成原理學習(四)算數邏輯電路,各類運算


上篇鏈接:https://www.cnblogs.com/banmei-brandy/p/12299962.html

這一部分是比較好理解的,上學時都了解過。

 


 

1.與、或、非、異或門

 基本的邏輯運算沒什么好記錄的,注意符號長啥樣。

異或門可以理解為輸入的兩個值相同則輸出0不同則輸出1

 

2.四個應用

(1)求反

非運算可以對某個特定位,或者全部反轉。

(2)使特定的位復位

這里涉及到一個“掩碼”的概念,就是1串01序列,和輸入數據按位做與運算,因為與運算的特性,會將特定位復位(置為0)。

如對 1010 0110,使用掩碼 0000 0111,則輸出的結果是0000 0110。掩碼中為0的部分會被復位,1的部分不變。

(3)對特定的位置位

和上面類似,是或運算的應用,掩碼中為1的部分會被置位(設為1),0的部分不變。

如對 1010 0110,使用掩碼 1111 1000,則輸出的結果是1111 1110。

(4)使特定的位反轉

異或運算的應用,掩碼中為1的部分都會取反。

如對 1010 0110,使用掩碼 1111 1000,輸出的結果是0101 1110。

 

3.n位加法器

用基本邏輯部件構成加法器,A和B是輸入的兩個數,F是本位的計算結果,Cout是向高位的進位。串聯在一起就構成n位加法器。

n位加法器可以輸出標志信息。

如果要求做減法,減法就是A加上B的補碼。求B的補碼等於對B取反再加1,這些都可以用邏輯門電路實現。

和加法整合在一起,可以用一個控制信號Sub來決定是做加法還是減法。從圖中可以看到Sub相當於求補碼時取反后要加上的1。

 

 

4.移位運算

邏輯移位,左移高位會被丟棄,低位自動補0;右移低位會被丟棄,高位自動補0。

循環移位,不管是左移還是右移都不會丟棄,而是補上尾巴的部分,相當於數據在旋轉。如左移一位,最低位就會補上原來的最高位。

算數移位,區分無符號和帶符號的數。對於無符號型值,算術移位等同於邏輯移位。而對於有符號型值 ,算術左移等同於邏輯左移,算術右移補的是符號位,正數補0,負數補1。

 

按位與運算,移位運算都用來提取數據(提取的數據不變,其它為0)。

自己換算一下,算數移位其實也可以用來在不改變符號的情況下,做倍數運算。因為差1位相差的就是2的倍數,右移一位正好就是縮小為1/2,左移就是放大到2倍。

 

何時會發生溢出?

無符號數使用邏輯移位,左移時如果移出了1,就會發生溢出。(相當於擴大兩倍,然后因為受限於位數導致反而變小)

帶符號數使用算數移位,和邏輯移位類似,高位移出時就可能溢出。移出去的符號位和新的頂上去的符號位不一致(比如原來1是負的,頂上去的是0,負數變成了正數),就發生了溢出。

 

5.位拓展,位截斷運算

位拓展用於長度短的數據類型拓展到長的數據類型,比如short轉int。無符號的會在前面補0,帶符號的前面會補符號。

位截斷用於長轉短,因為將高位丟棄了,所以可能發生“溢出”。

課里給出的例子。

例子2。注意把 i 強轉成short時,符號位就給丟掉了,變成負數。位拓展時補上符號位,值沒有變化。

 

6.ALU構成

n位帶標志的加法器是ALU的核心,ALU加上其它部件以后可以進行所有基本的算數運算和邏輯運算。控制信號決定做什么運算,來自控制器。

 

7.源碼到電路的過程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM