Upgrade to Pro — share decks privately, control downloads, hide ads and more …

系統程式 第 2 章 -- 電腦的硬體結構

陳鍾誠
April 14, 2022

系統程式 第 2 章 -- 電腦的硬體結構

陳鍾誠

April 14, 2022
Tweet

More Decks by 陳鍾誠

Other Decks in Education

Transcript

  1. 第 2 章、電腦的硬體結構  2.1 CPU0 處理器  2.2 CPU0

    的指令集  2.3 CPU0 的運作原理  2.4 CPU0 的程式執行  2.5 實務案例:IA32 處理器
  2. 2.1 CPU0 處理器  CPU0 是筆者所設計的一個簡易的 32 位元處理器, 主要用來說明系統程式的運作原理。 

    CPU0 的設計主要是為了教學考量, 設計重點在於 簡單、容易理解,因此 CPU0 幾乎不考慮成本與 速度的問題。  商業上的處理器通常很複雜, 除了考慮成本與速度 之外, 有時還會考慮相容性的問題, 因此並不容易理 解。
  3. 圖 2.1 CPU0 的架構圖 位址線 資料線 暫存器單元 R0=0 R12=SW IR

    ALU 算術邏輯單元 控制單元 內部匯流排 Bus R14 = LR 輸出入單元 MDR MAR R15 = PC R13=SP … R1
  4. CPU0 的結構  CPU0 = ALU + 暫存器 + 控制單元

     ALU  採用二補數的方式進行整數運算。  具有加、減、乘、除、邏輯運算與旋轉移位等功能。  ALU 可被想像成是 CPU 當中的小型處理器。  控制單元 (Control Unit)  根據IR當中的運算碼決定 ALU 的運算類型。  控制資料的傳遞方向。  根據狀態暫存器 SW 的內容,決定是否要跳躍。
  5. CPU0 的暫存器  R0  唯讀暫存器。R0的值永遠都是常數零。  R1-R15  15

    個可存取暫存器  R12:狀態暫存器 (Status Word, SW)  R13:堆疊暫存器 (Stack Pointer Register, SP)  R14:連結暫存器 (Link Register, LR)  R15:程式計數器 (Program Counter, PC)
  6. 電腦的基本結構  電腦的五大組成元件  Computer = CPU + BUS +

    Memory + Input + Output  CPU (處理器)  Memory (記憶體)  Bus (匯流排)  Input (輸入)  Output (輸出)
  7. 圖 2.2馮紐曼電腦的結構 記憶體 輸入裝置 輸出裝置 控制匯流排 資料匯流排 位址匯流排 輸出入 控制器

    ALU 算術邏輯單元 Control Unit 控制單元 暫存器 R0 PC … SW IR 內部匯流排 Bus RK 輸出入單元 處理器 (CPU)
  8. 2.2 CPU0 的指令集  包含四大類的指令  載入儲存 : LD, ST,

    …  運算指令 : ADD, SUB, XOR, SHL, ROL, …  跳躍指令 : JMP, JGT, JGE, …  堆疊指令 : PUSH, POP, …
  9. 圖 2.3 CPU0的指令格式 OP Cx (24 bits) J 型 A

    型 OP Ra Rb Rc L 型 Ra Cx (16 bits) OP Rb 31-24 23-20 19-16 31-24 23-0 31-24 23-20 19-16 11-0 15-12 15-0 Cx (12 bits)
  10. 2.3 CPU0 的運作原理  移動指令 : MOV R1, R2 

    加法指令 : ADD R1, R2, R3  減法指令 : SUB R1, R2, R3  邏輯運算 : XOR R1, R2, R3  移位指令:SHL R1, R2, 4  比較指令: CMP R1, R2  跳躍指令: JMP [0x30]  條件跳躍: JLE [0x30]  載入指令: LD R1, [0x28]  儲存指令: ST R1, [0x32]
  11. 圖 2.4 移動指令MOV R1, R2 的執行過程 ALU (無運算) Control Unit

    (控制單元) R1=00000002 R2=00000002 IR=12120000 (MOV R1, R2) 暫存器
  12. 圖 2.5加法指令ADD R1, R2, R3的執行過程 ALU (加法運算) Control Unit (控制單元)

    R1=00000005 R2=00000002 IR=13123000 (ADD R1, R2, R3) R3=00000003 暫存器
  13. 圖 2.6減法指令SUB R1, R2, R3 的執行過程 ALU (減法運算) Control Unit

    (控制單元) 暫存器 R1=00000001 R2=00000003 IR=14123000 (SUB R1, R2, R3) R3=00000002
  14. 圖 2.7 邏輯運算 XOR R1, R2, R3 的執行過程 ALU (XOR

    運算) Control Unit (控制單元) 暫存器 R1=00000041 R2=000000F4 IR=1A123000 (XOR R1, R2, R3) R3=000000B5 R2 (二進位) = * 1111 0100 R1 (二進位) = * 0100 0001 R3 (二進位) = * 1011 0101
  15. 圖 2.8 移位運算 SHL R1, R2, 4 的執行過程 ALU (SHL

    運算) Control Unit (控制單元) R1=00000410 IR=1E120004 (SHL R1, R2, 4) R2=00000041 暫存器
  16. 圖 2.9 CPU0 當中的狀態暫存器 SW (R12) N 31 -28 狀態暫存器

    Status Word (SW) Z C V I T M 7 6 5-1 條件旗標 保留 中斷 模式 0 27 - 8 保留 N : 負旗標 (Negative) Z : 零旗標 (Zero) C : 進位旗標 (Carry) V : 溢位旗標 (Overflow) I : 中斷位元 (Interrupt) T : 軟體中斷位元 (Trap) M : 處理器模式 (Mode) M=0 : 使用者模式 M=1 : 特權模式
  17. 比較指令  條件旗標的 N、Z 旗標值, 可以用來代表比較結果, 當執 行 CMP Ra,

    Rb 動作後, 可能會有下列三種情形。  1. 若 Ra > Rb, 則 N=0, Z=0。  2. 若 Ra < Rb, 則 N=1, Z=0。  3. 若 Ra = Rb, 則 N=0, Z=1。  如此, 用來進行條件跳躍的 JGT、JGE、JLT、JLE、 JEQ、JNE 等指令, 就可以根據 N、Z 旗標決定是否進 行跳躍。
  18. 圖 2.10 比較指令CMP R1, R2 的執行過程 ALU (減法運算) Control Unit

    (控制單元) 暫存器 R1=00 00 00 01 R2=00 00 00 02 SW= 80 00 00 00 IR = 10 12 00 00 (CMP R1, R2)
  19. 圖 2.11 跳躍指令JMP [0x30] 的執行過程 記憶體 PC=0028 =JMP [0x30] 26

    00 00 30 PC=005C ALU (加法運算) 暫存器 IR = 26 00 00 30 (JMP [0x30]) + PC = 00 00 00 2C 00 00 00 5C 新的 PC 值 PC=002C
  20. 圖 2.12 條件式跳躍指令JLE [0x30] 的執行過程 記憶體 =JLE [0x30] 24 00

    00 30 ALU (加法運算) 暫存器 IR = 24 00 00 30 (JLE [0x30]) + PC = 00 00 00 2C 00 00 00 5C 新的 PC 值 SW = 80 00 00 00 PC=0028 PC=005C PC=002C
  21. 圖 2.13載入指令LD R1, [0x28] 的執行過程 ALU Control Unit (控制單元) 暫存器

    R1=0F 0A C0 25 記憶體 0028 0F 0A C0 25 LD R1, [0x28] 00 10 00 28 IR= 00 10 00 28 (LD R1, [0x28])
  22. 圖 2.14 儲存指令ST R1, [0x32] 的執行過程 ALU Control Unit (控制單元)

    R1=0F 0A C0 25 記憶體 0032 0F 0A C0 25 ST R1, [0x32] 01 10 00 32 IR= 01 10 00 32 (ST R1, [0x32]) 暫存器
  23. 立即定址  格式:LDI Ra, Rb+Cx  範例1:  LDI R1,

    R2+100  說明:  將 R2 + 100 的放入 R1,相當於 R1=R2+100  範例2:  LDI R1, R0+100  說明:  R1=R0+100=100,可以簡寫為LDI R1, 100
  24. 相對定址  指令:LD, ST, LDB, STB  範例1:  LD

    R1, [R2+100]  說明:  R1 = [R2+100], 取出記憶體位址 R2+100 的內容,放入 R1 當中。  範例2:  ST R1, [R2+100]  說明:  將 R1 的內容存入 R2+100 的記憶體位址中。
  25. 絕對定址  說明:  直接存取記憶體絕對位址內容的方法  範例:LD R1, [100] 

    CPU0 中欲使用絕對定址法,可用 R0 作為基底  範例: LD R1, [R0+100]  說明:  因為 R0 暫存器永遠為 0,因此上述指令相當於 LD R1, [100]。
  26. 圖 2.15 程式在CPU0中的執行過程 001F0028 002F0020 0830000A 08400001 10230000 2300000C 13121000

    13242000 26FFFFEC 2C000000 00000000 00000000 記憶體 ALU (加法運算) 暫存器 IR=2300000C (JGT EXIT) PC=00000018 位址 LD R1, SUM LD R2, I LDI R3, 10 LDI R4, 1 CMP R2, R3 JGT EXIT ADD R1, R2, R1 ADD R2, R4, R2 JMP FOR RET WORD 0 WORD 0 程式 FOR: EXIT: 位址匯流排 資料匯流排 控制匯流排 I: SUM: 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C
  27. 圖 2.17指令提取的細部動作 001F0028 002F0020 0830000A 08400001 10230000 2300000C 13121000 13242000

    26FFFFEC 2C000000 00000000 00000000 記憶體 ALU (加法運算) 暫存器 IR=2300000C (JGT EXIT) PC=00000018 位址 LD R1, SUM LD R2, I LDI R3, 10 LDI R4, 1 CMP R2, R3 JGT EXIT ADD R1, R2, R1 ADD R2, R4, R2 JMP FOR RET WORD 0 WORD 0 程式 FOR: EXIT: 位址匯流排 資料匯流排 控制匯流排 (1) (2) (1) CPU 將 PC 傳到位址匯流排。 (2) 設定控制線,請求讀取位於 PC 的記憶體。 (3) 記憶體將指令傳到資料匯流排。 (4) CPU 取得指令碼,放入 IR 暫存器中。 指令提取階段 (3) (4) I: SUM: 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C
  28. 圖 2.18 加法指令 ADD R1, R2, R1 的執行階段動作 001F0028 002F0020

    0830000A 08400001 10230000 2300000C 13121000 13242000 26FFFFEC 2C000000 00000000 00000000 記憶體 ALU 暫存器 IR=13121000 (ADD R1,R2,R1) PC=00000018 位址 LD R1, SUM LD R2, I LDI R3, 10 LDI R4, 1 CMP R2, R3 JGT EXIT ADD R1, R2, R1 ADD R2, R4, R2 JMP FOR RET WORD 0 WORD 0 程式 FOR: EXIT: 位址匯流排 資料匯流排 控制匯流排 指令執行階段 R2=00000002 R1=00000001 I: SUM: 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C
  29. 圖 2.19 個人電腦的結構圖 圖形顯示 控制器 顯示器 橋接/記憶體 控制器 中央處理器 快取

    IDE磁碟 控制器 記憶體 SCSI磁碟 控制器 匯 流 排 延伸匯流排介面 鍵盤 平行埠 串列埠 磁碟 磁碟 磁碟 磁碟 PCI匯流排 延伸匯流排
  30. 圖 2.20 IA32 的常用暫存器 通用暫存器:EAX 通用暫存器: EBX 通用暫存器: ECX 通用暫存器:

    EDX 基底暫存器:EBP 堆疊暫存器:ESP 來源指標:ESI 目的指標:EDI 狀態暫存器: EFLAGS 程式計數器:EIP 程式段:CS 堆疊段: SS 資料段: DS 延伸段: FS 延伸段: ES 延伸段: GS
  31. 習題 1. 請畫出馮紐曼電腦的基本架構圖。 2. 請說明暫存器在電腦中的用途? 3. 請說明控制單元在電腦中的用途? 4. 請說明ALU在電腦中的用途? 5.

    請問CPU0有哪些暫存器?並說明 6. 請問CPU0 的指令可分為哪幾類?並且以範例說明每一類指令的功能? 7. 請問CPU0 當中有哪些定址方式,並以範例加以說明? 8. 請說明 CPU0 程式的執行原理,並說明指令暫存器與程式計數器在程 式執行時的作用? 9. 請畫出 ADD R5, R6, R1 指令的資料流向圖,並說明該指令的運作方 法。 10. 請畫出 LD R5, [480] 指令的資料流向圖,並說明該指令的運作方法。 11. 請簡要說明 IA32 處理器的特性?