你的c語言被編譯器編譯成組合語言,最後又被變成01指令。這些指令一條一條放在記憶體裡。可以小端放可以大端放,可以高位交叉放,也可以低位交叉放,總之被安排在記憶體裡。
然後需要告訴cpu開始的位置。由CPU裡面一個叫PC的暫存器負責。PC會自動增一,儲存了下一條指令的地址。每次執行完,把PC地址指的指令做下一條執行。
你的cpu出廠被設計了可以允許一些指令。比如什麼RISC和CISC,每個指令有操作碼和運算元。知道操作碼和運算元就可以執行這個指令。比如操作碼是對應加減之類,運算元可以是數本身,也可以是存數的記憶體地址,也可以存記憶體地址的記憶體地址,也可以是存記憶體地址的暫存器的地址。
CPU從開始位置一條一條指令執行假如沒有跳轉。控制具體運算的資料通路是由控制器CU。控制器根據時序和IR裡的指令來控制每個機器週期做什麼。
一般每個指令週期有被分成取指令,間址、執行、和處理中斷。
下面以add (r0) + r1 -> r0為例子 具體圖不畫了,暫存器和記憶體直接有匯流排相連線。
一、取指令
(PC) -> MAR 送下一條指令的地址
M(MAR) -> MDR 把記憶體對應地址內容送到CPU裡的暫存器
MDR -> IR 送到指令暫存器
IR 譯碼 指令暫存器送給CU譯碼
二、間址取r0
(r0) -> MAR 送r0中的地址給暫存器
M(MAR) -> MDR -> ACC 取到累加器
三、執行
ACC + r0 -> ALU -> ACC 透過ALU運算
ACC -> r0 儲存結果到暫存器
譯碼部分可以透過邏輯電路,也可以透過微指令,微指令可以理解為把譯碼部分提前存起來用的時候直接從ROM裡面讀出來就知道具體邏輯。
你學玩計算機組成原理後保證就懂了✓機組挺有意思的。計算機的專業課會安排。我學化工的,我在車間三班倒開閥門空隙裡自己看書學的。
你的c語言被編譯器編譯成組合語言,最後又被變成01指令。這些指令一條一條放在記憶體裡。可以小端放可以大端放,可以高位交叉放,也可以低位交叉放,總之被安排在記憶體裡。
然後需要告訴cpu開始的位置。由CPU裡面一個叫PC的暫存器負責。PC會自動增一,儲存了下一條指令的地址。每次執行完,把PC地址指的指令做下一條執行。
你的cpu出廠被設計了可以允許一些指令。比如什麼RISC和CISC,每個指令有操作碼和運算元。知道操作碼和運算元就可以執行這個指令。比如操作碼是對應加減之類,運算元可以是數本身,也可以是存數的記憶體地址,也可以存記憶體地址的記憶體地址,也可以是存記憶體地址的暫存器的地址。
CPU從開始位置一條一條指令執行假如沒有跳轉。控制具體運算的資料通路是由控制器CU。控制器根據時序和IR裡的指令來控制每個機器週期做什麼。
一般每個指令週期有被分成取指令,間址、執行、和處理中斷。
下面以add (r0) + r1 -> r0為例子 具體圖不畫了,暫存器和記憶體直接有匯流排相連線。
一、取指令
(PC) -> MAR 送下一條指令的地址
M(MAR) -> MDR 把記憶體對應地址內容送到CPU裡的暫存器
MDR -> IR 送到指令暫存器
IR 譯碼 指令暫存器送給CU譯碼
二、間址取r0
(r0) -> MAR 送r0中的地址給暫存器
M(MAR) -> MDR -> ACC 取到累加器
三、執行
ACC + r0 -> ALU -> ACC 透過ALU運算
ACC -> r0 儲存結果到暫存器
譯碼部分可以透過邏輯電路,也可以透過微指令,微指令可以理解為把譯碼部分提前存起來用的時候直接從ROM裡面讀出來就知道具體邏輯。
你學玩計算機組成原理後保證就懂了✓機組挺有意思的。計算機的專業課會安排。我學化工的,我在車間三班倒開閥門空隙裡自己看書學的。