計算機組成原理學習 筆記一

暴躁的阿姐³發表於2020-12-15

去年開始接觸java,今年開始自己玩微控制器,Linux。感覺基礎太不紮實了,畢竟課程安排沒有安排計算機知識的相關學習,開始自己看網課補補。順便做些筆記,記錄下。一起努力好好學習吧

我看的網課是王道考研的《計算機組成原理》,把這個看完還會看他的作業系統,計算機網路,資料結構。希望自己能堅持下來,為自己想做的事打好基礎!

馮諾依曼計算機的特點

1、計算機由五大部件組成:儲存器,運算器,控制器,輸入輸出裝置

2、指令和資料以同等地位存於儲存器,可按地址尋訪

3、指令和資料用二進位制表示

4、指令由操作碼和地址碼組成

5、儲存程式:提前儲存資料到儲存器

6、以運算器為中心(中轉站,所有過程都要經過運算器)

現代計算機的結構

以儲存器為中心 CPU=運算器+控制器

主存:記憶體 輔存:硬碟(IO裝置)

主儲存器:MAR(店員)地址儲存器 :位數反映儲存單元的個數

MDR(櫃檯) 資料儲存器: 位數為儲存字長 ( 注意字word和位元組Byte )

儲存體→儲存單元→儲存位元組→儲存元(貨架)

資料按地址儲存 MAR MDR現在被放到CPU

運算器

ACC:累加器,存放運算元或運算結果

MQ:承商暫存器,存放運算元或運算結果

x:通用的運算元暫存器,用於存放運算元

ALU:算數邏輯單元,通過內部複雜的電路實現算數運算、邏輯運算

控制器

CU:控制單元、分析指令、給出kong’zhi’xin’h

IR:指令暫存器,存放當前指令

PC:程式計數器、存放下一條指令地址、自動加一

完成指令:PC取指→IR分析→CU執行

虛擬機器器(高階語言機器)→虛擬機器器(組合語言機器)→傳統機器(用機器語言的機器)→微程式機器(微指令系統)

編譯程式:一次全部翻譯,執行 ;解釋程式:翻譯一句執行,再翻譯再執行。

溢位判斷(同號相加 上溢和下溢)

方法一:邏輯表示式判斷(正+正,負+負)

方法二:最高位判斷

方法三:採用雙符號位補碼計算(模4補碼)(單符號(模2補碼))

符號擴充套件(int->long)

正整數在數值前加0 正小數後面加0

負數反碼和補碼加1,原碼加0 負小數原碼補碼加0,反碼+1

原碼一位乘法(每次運算只有原碼的一位)

進行n輪加法、移位

每次加法可能+0、+[|x|]原(根據當前MQ的最低位來確定加什麼)

MQ最低位=1,ACC+[|x|]原 ;MQ最低為=0,ACC+0

符號位進行異或運算

ACC放乘積高位 MQ放乘數乘積低位

ACC和被乘數(x)進行加法運算,然後ACC和MQ內容統一邏輯右移,以此類推

補碼一位乘法

進行n輪加法、移位,最後再多來一次加法(乘數的符號位參與運算)

輔助位-MQ中最低位=1時,ACC+[x]補

輔助位-MQ中最低位=0時,ACC+0

輔助位-MQ中最低位=-1時,ACC+[-x]補

每次移位是“補碼的算數右移”->符號位不動,數值位右移,正數右移補0,負數右移補1(符號位是啥就補啥)

符號位參與運算(通過加法、移位確定)

輔助位初始為0(“最低位”)在MQ最低位的右邊(原碼計算丟棄的那一位不斷在此更替)

補碼乘法一定要使用雙符號位,所有暫存器統一用n+2位

原碼除法:恢復餘數法

當餘數為負時商0,並+|除數|再左移,再-|除數|

實現方法:上商1/0,得到餘數,餘數末尾補0

ACC(被除數、餘數) MQ(商)預設上商1

ALU

通用暫存器(除數)

MQ預設上商1,使ACC+[-|除數|]補(即相減運算,比較大小),當結果符號位為1(餘數為負值)則商置0,ACC加回[|除數|]補

然後MQ、ACC進行邏輯左移(ACC高位丟棄、MQ低位補0)

老除數-|除數|=新餘數 新餘數=?0

Y:商0,+|除數|,恢復為老餘數 N:商1

餘數邏輯左移 左移n次,上商n+1次 最後一次上商餘數不左移

加減交替法

當餘數為負時商0,並左移,再+|除數|

被除數-|除數|=新餘數 新餘數為負?

Y:商0,餘數左移並+|除數| N:商1,餘數左移並-|除數|

加/減n+1次,每次加減確定一位商;左移n次(最後一次加減完不移位),若最後餘數為負,還要多加一次

補碼除法(加減交替法)

符號位參與運算,雙符號位

上商、加減判斷原則:餘數和除數同號,商1,餘數左移一位減去除數;餘數和除數異號,商0,餘數左移一位加上除數。重複n次。

末位商恆置1( 誤差不超過2^(-n) 省事 )

C語言強制型別轉換

無符號數和有符號數:不改變資料內容,改變解釋方式。

長整數變短整數:高位截斷,保留低位。

短整數變長整數:符號擴充套件。

相關文章