這部分內容比較簡單,就是有幾個符號不太好理解,與後續的控制指令關係密切,需要充分理解,最近狀態不太好,希望慢慢調整回來,come back
數字邏輯電路基礎
邏輯電路基礎
基於0和1構造所有運算電路
⭐布爾代數:0/1代表邏輯值假/真
- 將命題邏輯問題化爲代數問題
- 最基本的表示:與或非,真值表
⭐一位邏輯門電路
⭐n位邏輯門電路(按位運算)
⭐組合邏輯部件: - 組合邏輯電路/時序邏輯電路
- 功能部件
畫出真值表→寫出邏輯函數→確定電路組成
⭐多路選擇器:一個輸出端F,控制端S,兩個輸入端A/B
無符號數加法器
一位加法器(全加器)
兩個加數A/B,一個進位Cin,向高位進位cout,輸出本位F
{cout,F}=A+B+cin;//這種表示按照verilog語法
當A/B/cin中有奇數個1時,F爲1,當有兩個以上1時,cout爲1
fully add(FA)
n位加法器
- n位無符號數加(無法判斷溢出吧啦吧啦,就是簡單的相加)
由n個全加器組成
所有的算術運算都基於全加器
- n位帶標誌加法器
想辦法實現減法運算(判斷溢出,取補碼等等)
利用標誌信息表示比較運算等等其他運算
[-y]補=~[y]補+1
在此基礎上加入寄存器,移位器,控制邏輯,就能實現ALU,乘除運算和浮點運算。
ALU(只含整數加減運算和邏輯運算)
無符號整數加減,帶符號整數加減,與或非等邏輯運算
核心爲帶標誌加法器
輸出有結果和標誌信息,有操作控制端決定執行功能。
c表達式和邏輯電路
- c語言到邏輯電路的轉換
高級語言→彙編語言:通過運算指令實現(媒介)
彙編語言→運算電路:對指令譯碼,根據指令譯碼結果控制電路實現。
- c語言中的各類運算
1 算術運算
2 按位運算,由x的類型確定是邏輯移位還是算術移位
判斷溢出:
邏輯移位:高位移出爲1,說明溢出
算數移位:新的符號位與原符號位不同
3 邏輯運算:區分與按位運算的符號區別
4 截斷和擴展
整數加減運算
加減標誌信息
需要解決的問題:利用符號位實現整數的比較大小
加/減運算部件不考慮運算的信息是帶符號還是無符號,結果是否正確,就是簡單的機械運算。
標誌位會在標誌寄存器中存儲,用於轉移指令和控制指令等等。
ZF:零標誌,判斷位串是否全0,全0則ZF值爲1
OF:判斷是否溢出,若A/B’(已經進行補碼處理)同號但與sum不同號,則溢出
解釋:假設爲4位帶符號運算
全正:溢出後符號位必爲1
全負:溢出後符號位必爲0
若一正一負:不可能溢出(範圍不允許)
SF:sum符號
CF:進位/借位符號(這真的是困擾了我很久)xor cout sub
解釋:加法計算時:爲0是說明沒有進位
減法運算時:爲1時說明產生借位,同號可以比較,異號不能直接通過CF判斷大小
加減法溢出公式及舉例
判斷是否溢出:
帶符號溢出判斷:OF=1
無符號減溢出:CF=1(有借位),通過CF判斷大小