第 2 章、電腦的硬體結構 作者:陳鍾誠
第 2 章、電腦的硬體結構 2.1 CPU0 處理器 2.2 CPU0 的指令集 2.3 CPU0 的運作原理 2.4 CPU0 的程式執行 2.5 實務案例:IA32 處理器
2.1 CPU0 處理器 CPU0 是筆者所設計的一個簡易的 32 位元處理器, 主要用來說明系統程式的運作原理。 商業上的處理器通常很複雜, 除了考慮成本與速度 之外, 有時還會考慮相容性的問題, 因此並不容易理 解。
圖 2.1 CPU0 的架構圖 位址線 資料線 暫存器單元 R0=0 R12=SW IR ALU 算術邏輯單元 控制單元 內部匯流排 Bus R14 = LR 輸出入單元 MDR MAR R15 = PC R13=SP … R1
CPU0 的結構 CPU0 = ALU + 暫存器 + 控制單元 ALU 控制單元 (Control Unit) 採用二補數的方式進行整數運算。 具有加、減、乘、除、邏輯運算與旋轉移位等功能。 ALU 可被想像成是 CPU 當中的小型處理器。 控制單元 (Control Unit) 根據IR當中的運算碼決定 ALU 的運算類型。 控制資料的傳遞方向。 根據狀態暫存器 SW 的內容,決定是否要跳躍。
CPU0 的暫存器 R0 R1-R15 唯讀暫存器。R0的值永遠都是常數零。 15 個可存取暫存器 R12:狀態暫存器 (Status Word, SW) R13:堆疊暫存器 (Stack Pointer Register, SP) R14:連結暫存器 (Link Register, LR) R15:程式計數器 (Program Counter, PC)
電腦的基本結構 電腦的五大組成元件 Computer = CPU + BUS + Memory + Input + Output
圖 2.2馮紐曼電腦的結構 處理器 (CPU) 暫存器 ALU 算術邏輯單元 記憶體 Control Unit 控制單元 內部匯流排 Bus 輸入裝置 輸出裝置 控制匯流排 資料匯流排 位址匯流排 輸出入 控制器 ALU 算術邏輯單元 Control Unit 控制單元 暫存器 R0 PC … SW IR 內部匯流排 Bus RK 輸出入單元 處理器 (CPU)
2.2 CPU0 的指令集 包含四大類的指令 載入儲存 : LD, ST, … 運算指令 : ADD, SUB, XOR, SHL, ROL, … 跳躍指令 : JMP, JGT, JGE, … 堆疊指令 : PUSH, POP, …
CPU0 的指令編碼表 – 載入儲存指令
CPU0 的指令編碼表 – 運算指令
CPU0 的指令編碼表 – 跳躍指令
CPU0 的指令編碼表 – 堆疊指令
圖 2.3 CPU0的指令格式 A 型 L 型 J 型 OP Cx (24 bits) Ra Rb Rc Cx (16 bits) 31-24 23-20 19-16 23-0 11-0 15-12 15-0 Cx (12 bits)
2.3 CPU0 的運作原理 比較指令: CMP R1, R2 跳躍指令: JMP [0x30] 條件跳躍: JLE [0x30] 移動指令 : 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]
圖 2.4 移動指令MOV R1, R2 的執行過程 暫存器 ALU (無運算) Control Unit (控制單元) IR=12120000 (MOV R1, R2) 暫存器
圖 2.5加法指令ADD R1, R2, R3的執行過程 暫存器 ALU (加法運算) Control Unit (控制單元) IR=13123000 (ADD R1, R2, R3) R3=00000003 暫存器
圖 2.6減法指令SUB R1, R2, R3 的執行過程 暫存器 ALU (減法運算) Control Unit (控制單元) IR=14123000 (SUB R1, R2, R3) R3=00000002
圖 2.7 邏輯運算 XOR R1, R2, R3 的執行過程 暫存器 ALU (XOR 運算) Control Unit (控制單元) R2=000000F4 IR=1A123000 (XOR R1, R2, R3) R3=000000B5 R2 (二進位) = * 1111 0100 R1 (二進位) = * 0100 0001 R3 (二進位) = * 1011 0101
圖 2.8 移位運算 SHL R1, R2, 4 的執行過程 暫存器 ALU (SHL 運算) Control Unit (控制單元) IR=1E120004 (SHL R1, R2, 4) R2=00000041 暫存器
圖 2.9 CPU0 當中的狀態暫存器 SW (R12) N : 負旗標 (Negative) Z : 零旗標 (Zero) 條件旗標 保留 中斷 保留 模式 狀態暫存器 Status Word (SW) N Z C V I T M 31 -28 27 - 8 7 6 5-1 N : 負旗標 (Negative) Z : 零旗標 (Zero) C : 進位旗標 (Carry) V : 溢位旗標 (Overflow) I : 中斷位元 (Interrupt) T : 軟體中斷位元 (Trap) M : 處理器模式 (Mode) M=0 : 使用者模式 M=1 : 特權模式
比較指令 條件旗標的 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 旗標決定是否進 行跳躍。
圖 2.10 比較指令CMP R1, R2 的執行過程 ALU 暫存器 (減法運算) Control Unit (控制單元) SW= 80 00 00 00 IR = 10 12 00 00 (CMP R1, R2)
使用 LD 指令進行跳躍的動作
圖 2.11 跳躍指令JMP [0x30] 的執行過程 + 記憶體 PC=0028 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
圖 2.12 條件式跳躍指令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
圖 2.13載入指令LD R1, [0x28] 的執行過程 ALU Control Unit (控制單元) 暫存器 記憶體 0028 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])
圖 2.14 儲存指令ST R1, [0x32] 的執行過程 ALU Control Unit (控制單元) 記憶體 0032 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]) 暫存器
定址模式 CPU0 的定址模式可分為三種 立即定址: LDI 相對定址: LD、ST、LDB、STB 索引定址: LDR、STR、LBR、SBR
立即定址 格式:LDI Ra, Rb+Cx 範例1: 範例2: LDI R1, R2+100 說明: LDI R1, R0+100 將 R2 + 100 的放入 R1,相當於 R1=R2+100 範例2: LDI R1, R0+100 R1=R0+100=100,可以簡寫為LDI R1, 100
相對定址 指令:LD, ST, LDB, STB 範例1: 範例2: LD R1, [R2+100] 說明: ST R1, [R2+100] R1 = [R2+100], 取出記憶體位址 R2+100 的內容,放入 R1 當中。 範例2: ST R1, [R2+100] 將 R1 的內容存入 R2+100 的記憶體位址中。
索引定址 指令:LDR, STR, LBR, SBR 範例 1 LDR R1, [R2+R3]
絕對定址 說明: CPU0 中欲使用絕對定址法,可用 R0 作為基底 直接存取記憶體絕對位址內容的方法 範例:LD R1, [100] 範例: LD R1, [R0+100] 因為 R0 暫存器永遠為 0,因此上述指令相當於 LD R1, [100]。
2.4 CPU0 的程式執行 在整個程式的執行過程中, 指令會一個接著一個被 取出後執行, 直到出現跳躍指令為止。 一個指令的執行可分為三個階段 1. 提取 2. 解碼 3. 執行
三大階段:提取、解碼、執行
圖 2.15 程式在CPU0中的執行過程 位址 記憶體 程式 001F0028 002F0020 0830000A 08400001 10230000 2300000C 13121000 13242000 26FFFFEC 2C000000 00000000 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 RESW 1 WORD 0 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C ALU (加法運算) 暫存器 FOR: IR=2300000C (JGT EXIT) PC=00000018 EXIT: 位址匯流排 資料匯流排 控制匯流排
圖 2.17指令提取的細部動作 001F0028 002F0020 0830000A 08400001 10230000 2300000C 13121000 13242000 26FFFFEC 2C000000 00000000 記憶體 ALU (加法運算) 暫存器 IR=2300000C (JGT EXIT) PC=00000018 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C 位址 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 RESW 1 WORD 0 程式 FOR: EXIT: 位址匯流排 資料匯流排 控制匯流排 (1) (2) CPU 將 PC 傳到位址匯流排。 設定控制線,請求讀取位於 PC 的記憶體。 記憶體將指令傳到資料匯流排。 CPU 取得指令碼,放入 IR 暫存器中。 指令提取階段 (3) (4)
圖 2.18 加法指令 ADD R1, R2, R1 的執行階段動作 001F0028 002F0020 0830000A 08400001 10230000 2300000C 13121000 13242000 26FFFFEC 2C000000 00000000 記憶體 ALU 暫存器 IR=13121000 (ADD R1,R2,R1) PC=00000018 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C 位址 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 RESW 1 WORD 0 程式 FOR: EXIT: 位址匯流排 資料匯流排 控制匯流排 (1) (2) 指令執行階段 (3) (4) R2=00000002 R1=00000001
2.5 實務案例:IA32 處理器 IBM PC個人電腦所用的處理器 Intel 公司所設計的處理器 x86 系列處理器的成員
圖 2.19 個人電腦的結構圖 圖形顯示 控制器 顯示器 橋接/記憶體 控制器 中央處理器 快取 IDE磁碟 控制器 記憶體 SCSI磁碟 控制器 匯流排 延伸匯流排介面 鍵盤 平行埠 串列埠 磁碟 PCI匯流排 延伸匯流排
圖 2.20 IA32 的常用暫存器 通用暫存器:EAX 通用暫存器: EBX 通用暫存器: ECX 通用暫存器: EDX 基底暫存器:EBP 堆疊暫存器:ESP 來源指標:ESI 目的指標:EDI 狀態暫存器: EFLAGS 程式計數器:EIP 程式段:CS 堆疊段: SS 資料段: DS 延伸段: FS 延伸段: ES 延伸段: GS
圖 2.21 IA32 的 EAX 暫存器 EAX 32 bits AX AH AL 16 bits 8+8 bits
IA32 的指令格式 指令的參數通常可以是暫存器或記憶體,具有多種 組合形式
表格 2.4:IA32 的指令分類表
習題 請畫出馮紐曼電腦的基本架構圖。 請說明暫存器在電腦中的用途? 請說明控制單元在電腦中的用途? 請說明ALU在電腦中的用途? 請問CPU0有哪些暫存器?並說明 請問CPU0 的指令可分為哪幾類?並且以範例說明每一類指令的功 能? 請問CPU0 當中有哪些定址方式,並以範例加以說明? 請說明 CPU0 程式的執行原理,並說明指令暫存器與程式計數器在程 式執行時的作用? 請畫出 ADD R5, R6, R1 指令的資料流向圖,並說明該指令的運作方 法。 請畫出 LD R5, [480] 指令的資料流向圖,並說明該指令的運作方法。 請簡要說明 IA32 處理器的特性?