iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
0
自我挑戰組

程式追尋之路系列 第 7

#7 計算機架構:住在機器裡的小人兒

邏輯閘是電路的基本元件,AND, OR, NOT, XOR 這四個積木搭建成具有基礎運算能力的加法器、乘法器,而後一個重要的電路元件—正反器誕生提供資料儲存的功能,至此,計算機的功能才算完整。

核心運算由 ALU 算術邏輯單元處理,負責加減乘運算(除法被拆成多個乘法和減法的組成),與控制電路搭配構成最簡單的處理器,也就是現今的CPU的雛型。

ALU 本身沒有儲存功能,必須由 Register 暫存器保存資料,而運算後的資料多半會被送往 Memory 保存下來。因為暫存器是珍貴的儲存空間,存取速度快、但數量不多。一般執行的指令會存在 Instruction Memory 等待被讀取,而指令位址被放在 Program Counter 程式暫存器裡面(簡稱PC,特殊暫存器)。

控制電路一般包含以下項目:

  1. ALU op 控制 ALU 執行何種運算?
  2. MemRead 是否從記憶體讀取?
  3. RegWrite 結果是否寫入暫存器?
  4. MemWrite 結果是否寫入記憶體?
  5. Branch/PC src 分支,根據運算結果決定是否執行分支指令?
  6. ALU src 是否採用擴充的32bit指令作為運算元?
  7. Reg Dst 控制寫入暫存器的來源
  8. Mem to Reg 是否從記憶體轉送資料到暫存器?

//以上內容出自《計算機組織與設計》[1] ,該書用來講解的電路有可能和目前的實際電路有出入,請注意。

datapath 圖片來源

datapath 電路佈線可以編碼成指令碼,所以計算機的指令跟電路佈線是息息相關的。雖然還有許多細節沒有談到,但可以了解到資料和指令都是存放在記憶體內,當指令傳送到處理器後,經過解碼轉換成執行的指令,資料則是存放在另一個記憶體,作為參數被暫存器存取/寫入。

x86架構的暫存器[^2] 分別有:AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, SS, ES, IP,FLAG 這些暫存器。架構大致上和前面提到的差不多,IP就是存放指令位址的暫存器,FLAG是旗標暫存器,通常為條件跳轉所需的資料來源,BP, SP 這兩組暫存器的資料是函數呼叫的返回位址。詳細說可以參照註解連結。

指令集的大致上分成幾類功能:

  1. 資料搬移,MOV 家族
  2. 運算,代表指令:ADD, SUB, MUX, AND, OR, NOT, XOR
  3. 分支,JMP 家族
  4. 堆疊操作,PUSH, POP
  5. 函數呼叫,CALL, RET
  6. 系統中斷,INT

總結:

  1. 處理器運算過程,經過載入代碼、解碼、執行、記憶體存取、寫回暫存器
  2. 資料在處理器沒有名字,以記憶體位址存在
  3. 函式呼叫時,處理器會把當下指令位址存入堆疊,函數呼叫結束後,跳回原本的位址

這篇花了比想像中還要長的時間寫,文章若有疏漏,還懇請指點,謝謝

[1] "Computer Organization and Design - The Hardware/Software Interface ARM Edition" David A. Patterson, John L. Hennessy

[2] X86 CPU 暫存器 Register 大全

參考資料:計算機組織結構 - HackMD


上一篇
#6 Lisp: 純粹的力量
系列文
程式追尋之路7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
sixwings
iT邦研究生 4 級 ‧ 2019-09-30 16:58:19

系列暫停,等另一邊結束再補上了。
鐵人賽沒有庫存寫不太下去QQ

ccutmis iT邦高手 2 級 ‧ 2019-09-30 17:11:25 檢舉

辛苦了,加油!/images/emoticon/emoticon12.gif

我要留言

立即登入留言