Você está na página 1de 42

系統程式 – 理論與實務

第 2 章、電腦的硬體結構

作者:陳鍾誠

旗標出版社
第 2 章、電腦的硬體結構
2.1 CPU0 的架構

2.2 CPU0 的暫存器

2.3 CPU0 的定址模式

2.4 實務案例
2.4.1 ARM 處理器的架構
2.4.2 IA32 處理器的架構
2.1 CPU0 的架構
架構: 32 位元
ALU + 控制單元 + 暫存器單元 + 輸出入單元

暫存器: R0-R15
R15 (PC) 、 R14 (LR) 、 R13 (SP) 、 R12 (SW)

指令集:
載入儲存
運算指令
跳躍指令
堆疊指令
圖 A.1 CPU0 的架構圖
暫存器單元
R0=0
R1

R12=SW
R13=SP
R14 = LR

ALU R15 = PC
算術邏輯單元
IR

內部匯流排 Bus 輸出入單元

控製單元 MAR MDR

位址線 資料線
CPU0 的指令集
載入儲存:存取記憶體

運算指令:加減乘除、移位、邏輯等運算

跳躍指令:模擬迴圈或條件判斷等控制結構

堆疊指令:堆疊的推入與取出動作
載入儲存指令
類 格式 指令 OP 意義 語法 意義

載 L LD 00 載入 word LD Ra, [Rb+Cx] Ra[Rb+ Cx]


入 L ST 01 儲存 word ST Ra, [Rb+ Cx] Ra[ Rb+ Cx]

L LB 02 載入 byte LB Ra, [Rb+ Cx] Ra(byte)[Rb+

L SB 03 儲存 byte SB Ra, [Rb+ Cx] Cx]
Ra(byte)[Rb+
A LDR 04 LD ( 暫存器 LDR Ra, Cx]
Ra(byte)[Rb+
A STR 05 ST)( 暫存器版 [Rb+Rc]
版 STR Ra, Rc]
Ra[ Rb+ Rc]
A LBR 06 )LB ( 暫存器版 [Rb+Rc]
LBR Ra, Ra(byte)[Rb+
A SBR 07 )SB ( 暫存器 [Rb+Rc]
SBR Ra, Rc]
Ra(byte)[Rb+
L LDI 08 版 )
立即載入 [Rb+Rc]
LDI Ra, Cx Rc]
Ra Cx
運算指令
A CMP 10 比較 CMP Ra, Rb SW  Ra >=<
運 A MOV 12 移動 MOV Ra, Rb Rb
Ra  Rb

A ADD 13 加法 ADD Ra, Rb, Rc Ra  Rb+Rc

令 A SUB 14 減法 SUB Ra, Rb, Rc Ra  Rb-Rc
A MUL 15 乘法 MUL Ra, Rb, Rc Ra  Rb*Rc
A DIV 16 除法 DIV Ra, Rb, Rc Ra  Rb/Rc
A AND 18 邏輯 AND AND Ra, Rb, Rc Ra  Rb and
A OR 19 邏輯 OR OR Ra, Rb, Rc Rc
Ra  Rb or Rc
A XOR 1A 邏輯 XOR XOR Ra, Rb, Rc Ra  Rb xor Rc
A ROL 1C 向左旋轉 ROL Ra, Rb, Cx Ra  Rb ror Cx
A ROR 1D 向右旋轉 ROR Ra, Rb, Cx Ra  Rb rol Cx
A SHL 1E 向左移位 SHL Ra, Rb, Cx Ra  Rb ror Cx
A SHR 1F 向右移位 SHR Ra, Rb, Cx Ra  Rb ror Cx
跳躍指令
J JEQ 20 跳躍 ( 相等 ) JEQ Cx if SW(=) PC  PC+Cx

躍 J JNE 21 跳躍 ( 不相等 JNE Cx if SW(!=) PC  PC+Cx
指 )
令 J JLT 22 跳躍 ( < ) JLT Cx if SW(<) PC  PC+Cx

J JGT 23 跳躍 ( > ) JGT Cx If SW(>) PC  PC+Cx

J JLE 24 跳躍 ( <= ) JLE Cx if SW(<=) PC  PC+Cx

J JGE 25 跳躍 ( >= ) JGE Cx If SW(>=) PC  PC+Cx

J JMP 26 跳躍 ( 無條件 JMP Cx PC  PC+Cx


J SWI 2A )
軟體中斷 SWI Cx LR  PC; PC  Cx
J JSUB 2B 跳到副程式 JSUB Cx LR PC; PC  PC+Cx
堆疊指令

堆 A P 30 推入 word PUSH Ra SP-=4; [SP] = Ra;


疊 A USH
POP 31 彈出 word POP Ra Ra = [SP]; SP+=4;

令 A P 32 推入 byte PUSHB Ra SP--; [SP] = Ra; (byte)
USH
B
A P 33 彈出 byte POPB Ra Ra = [SP]; SP++; (byte)
OPB
圖 A.2 CPU0 的指令格式
A 型
OP Ra Rb Rc Cx (12 bits)

31-24 23-20 19-16 15-12 11-0

L 型
OP Ra Rb Cx (16 bits)

31-24 23-20 19-16 15-0

J 型
OP Cx (24 bits)

31-24 23-0
2.2 CPU0 的暫存器
 暫存器:
IR : 指令暫存器

通用暫存器: R0-R15
 R15 (PC) :程式計數器
 R14 (LR) :連結暫存器
 R13 (SP) :狀態暫存器
 R12 (SW) :狀態暫存器
 R0=0 : 常數 0 暫存器
 R1-R11 可任意使用

輸出入暫存器
 MAR : Memory Address Register ( 記憶體位址暫存器 )
 MDR : Memory Data Register ( 記憶體資料暫存器 )
狀態暫存器
條件旗標 保留 中斷 保留 模式

狀態暫存器 N Z C V I T M
Status Word (SW)
31 30 29 28 27 - 8 7 6 5-1 0

 條件旗標的 N (Negative) 、 Z (Zero) 、 C (Carry) 、 V


(Overflow)
 中斷控制模式的狀態值 I (Interrupt) 與 T (Trap)
 處理器模式 M (Mode)
條件旗標
條件旗標的 N 、 Z 、 C 、 V
代表比較結果是大於 (>) 、等於 (=) 還是小於 (<)
當執行 CMP Ra, Rb 動作後,會有三種可能的情形

   若 Ra > Rb ,則 N=0, Z=0 。


 若 Ra < Rb ,則 N=1, Z=0 。
 若 Ra = Rb ,則 N=0, Z=1 。

條件跳躍指令 JGT 、 JGE 、 JLT 、 JLE 、 JEQ 、


JNE
 可以根據 SW 暫存器當中的 N 、 Z 等旗標決定是否進行跳躍。
中斷控制旗標
中斷控制旗標 I (Interrupt) 與 T (Trap)
I (Interrupt) 、 T (Trap)
控制中斷的啟動與禁止等行為。
I 旗標設定為 0 ,則 CPU0 將禁止所有種類的中斷
T 旗標設定為 0 ,則只禁止軟體中斷指令 SWI
但不會禁止由硬體觸發的中斷
中斷控制旗標通常由作業系統控制
處理器模式
M=1
特權模式 (super mode)
可以進行模式、中斷旗標等設定動作
通常作業系統會使用特權模式

M=0
使用者模式 (user mode)
在使用者模式當中,任何設定狀態暫存器 (R12) 的
動作都會被視為是非法的,這就是為了進行保護功能
的緣故。
一般程式只能處於使用者模式。
位元組順序 (Byte Ordering)
大者優先 (Big Endian)
代表值越大的位元組會在記憶體的前面 ( 低位址處 )

高位元 低位元

byte 0 byte 1 byte 2 byte 3 *


2.3 CPU0 的定址模式
立即載入: LDI R1, 100

相對定址: LD R1, [R2+100]

索引定址: LDR R1, [R2+R3]

絕對定址
CPU0 沒有絕對定址的模式,但可以模擬。
R0 的相對定址方式 : LD R1, [R0+100]
R0 的索引定址方式: LDR R1, [R0+R2]
2.4 實務案例
2.4.1 ARM 處理器的架構
2.4.2 IA32 處理器的架構
2.4.1 ARM 處理器的架構
ARM 處理器
手機上常用的處理器,特色為相當省電
精簡指令集 (RISC) ,使用管線增進速度
只允許載入儲存指令存取記憶體
 禁止運算指令直接存取記憶體
圖 2.2 ARM 處理器的架構圖
暫存器單元
R0
R1

R13 (SP)
R14 (LR)
Barrel Shifter
R15 (PC)
IR
ALU CPSR
SPSR

內部匯流排 Bus

控製單元 輸出入單元

位址線 資料線
ARM 的暫存器
IR :指令暫存器
R0-R15
R13 : SP (Stack Pointer)
R14 : LR (Link Register)
R15 : PC (Program Counter)
狀態暫存器
CPSR (Current Processor Status Register)
SPSR (Saved Processor Status Register)
SPSR 乃是在中斷時用來自動儲存 CPSR 的
ARM 處理器的模式
1. 使用者模式 (User)
2. 系統模式 (System)
3. 快速中斷模式 (FIQ)
4. 特權呼叫模式 (SVC)
5. 中止模式 (ABT)
6. 中斷請求模式 (IRQ)
7. 未定義模式 (Undef)
圖 2.3 ARM 各個模式下的暫存

使用者 / 系統模式 快速中斷 管理者模式 中止 中斷請求 未定義
User / System (FIQ) (SVC) (ABT) (IRQ) (Undef)

r0
r1
r2
可存取暫存器
r3
r4
r5
r6
r7
r8 r8_fiq
r9 r9_fiq
r10 r10_fiq
r11 r11_fiq
r12 r12_fiq
r13 (sp) r13_fiq r13_svc r13_abt r13_irq r13_undef
r14 (lr) r14_fiq r14_svc r14_abt r14_irq r14_undef
r15 (pc)

cpsr 狀態暫存器
----- sprsr_fiq spsr_svc spsr_abt spsr_irq spsr_undef
圖 2.4 ARM 快速中斷的引發過程
暫存器
使用者模式 快速中斷模式
(User) (FIQ)
r0
r1
r2
r3
r4
r5 FIQ 暫存器
r6
r7 發生例外
r8 r8_fiq
r9 r9_fiq
r15 (pc)  r14_fiq (lr)
r10 r10_fiq
r11 r11_fiq cpsr  spsr_fiq
r12 r12_fiq
r13 (sp) r13_fiq
r14 (lr) r14_fiq

cpsr
spsr_fiq
圖 2.5 ARM 處理器的狀態暫存

狀態暫存器 CPSR 、 SPSR 的結構

31 28 8 4 0

N Z CV I F T Mode

比較結果:如果指令中的 S bit 被設定,則會將 ALU 的狀態旗標放入 CPSR

* 條件旗標 * 中斷控制位元
N = 負旗標 I = 1, 禁止中斷請求 IRQ.
Z = 零旗標 F = 1, 禁止快速中斷 FIQ.
C = 進位旗標
V = 溢位旗標 * T 位元
T = 0, 處理器處於 ARM 狀態
* 模式 (Mode) T = 1, 處理器處於 Thumb 狀態
M[4:0] 處理器的模式
圖 2.6 ARM 指令的一般格式
所有指令均為條件式執行

Cond OP Rn Rd 其他資訊 Rc
31-28 27-20 19-1615-12 11-4 3-0
ARM 的指令集
運算指令

記憶體相關指令

分支指令

其他指令

協同處理器指令
運算指令 (1)
指令 說明 意義
運算指令
MOV {cond}{S} 資料傳送 Rdoperand2
Rd,operand2
MVN{cond}{S} 負資料傳送 Rd(~operand2)
Rd,operand2
ADD{cond}{S} 加法運算 RdRn+operand2
Rd,Rn,operand2
SUB{cond}{S} 減法運算 RdRn-operand2
Rd,Rn,operand2
RSB{cond}{S} 逆向減法 Rdoperand2-Rn
Rd,Rn,operand2
ADC{cond}{S} 帶進位加法 RdRn+operand2+Carry
Rd,Rn,operand2
SBC{cond}{S} 帶進位減法 RdRn-operand2-
Rd,Rn,operand2
RSC{cond}{S} 帶進位逆向減法 (NOT)Carry
Rdoperand2-Rn-
Rc,Rn,operand2 (NOT)Carry
運算指令 (2)

AND{cond}{S} 邏輯“與”操作 RdRn & operand2


Rd,Rn,operand2
ORR{cond}{S} 邏輯“或”操作 RdRn | operand2
EOR{cond}{S}
Rd,Rn,operand2 邏輯“互斥或” RdRn ^ operand2
Rd,Rn,operand2
BIC{cond}{S} 位元清除 RdRn & (~operand2)
Rd,Rn,operand2
CMP{cond} Rn,operand2 比較指令 標誌 N 、 Z 、 C 、 VRn-
operand2
CMN{cond} Rn,operand2 負數比較指令 標誌 N 、 Z 、 C 、 V
Rn+operand2
TST{cond} Rn,operand2 位元測試指令 標誌 N 、 Z 、 C 、 V
Rn&operand2
TEQ{cond} Rn,operand2 相等測試指令 標誌 N 、 Z 、 C 、 V
Rn^operand2
記憶體相關指令 (1)

記憶體相關指令
LDR{cond} Rd,addressing 載入 Word Rd[addressing]
LDR{cond}B 載入 Byte Rd[addressing]
Rd,addressing
LDR{cond}T 載入 Word Rd[addressing]
Rd,addressing ( 以使用者模式 )
LDR{cond}BT 載入 Byte Rd[addressing]
Rd,addressing ( 以使用者模式 )
LDR{cond}H 載入半字組 Rd[addressing]
Rd,addressing
LDR{cond}SB 載入 byte Rd[addressing]
Rd,addressing ( 有正負號 )
LDR{cond}SH 載入半字組 Rd[addressing]
Rd,addressing ( 有正負號 )
記憶體相關指令 (2)
STR{cond} Rd,addressing 儲存 Word [addressing]  Rd
STRB{cond} Rd,addressing 儲存 Byte [addressing]  Rd
STR{cond}T Rd,addressing 儲存 Word [addressing]  Rd
( 以使用者模式 )
STR{cond}BT Rd,addressing 儲存 byte [addressing]  Rd
( 以使用者模式 )
STR{cond}H Rd,addressing 儲存半字組 [addressing]  Rd
LDM{cond}{mode} 多暫存器載入 reglist [Rn…],Rn 寫回
Rn{!},reglist
STM{cond}{mode} 多暫存器儲存 [Rn…]  reglist, Rn 寫回
Rn{!},reglistRd,Rm,Rn
SWP{cond} 暫存器和記憶體字 Rd [Rn],[Rn] Rm
資料交換指令 (Rn≠Rd 或 Rm)
SWP{cond}B Rd,Rm,Rn 暫存器和記憶體位 Rd [Rn],[Rn] Rm
元組資料交換指令 (Rn≠Rd 或 Rm)
分支指令

分支指令
B{cond} label 分支指令 PClabel
BL{cond} label 帶連接的分支 LRPC-4,PC label
BX{cond} label 帶狀態的分支 PClabel, 切換處理器狀態
其他指令

其他指令
SWI{cond} immed_24 軟中斷指令 產生軟中斷,處理器進入管理模式

MRS{cond} Rd,psr 讀狀態暫存器指令 Rdpsr,psr 為 CPSR 或 SPSR

MSR{cond} 寫狀態暫存器指令 psr_fieldsRd/#immed_8r,p


psr_fields,Rd/#immend 為 CPSR 或 SPSR
_8r
協同處理器指令
協同處理器指令
CDP{cond} 協同處理器資料操作指令 取決於協同處理
coproc,opcode1,CRd,CRn,CRm(,opco 器
de2)
LDC{cond}{L} coproc,CRd,< 地址 > 協同處理器資料讀取指令 取決於協同處理

STC{cond}{L} coproc,CRd,< 地址 > 協同處理器資料寫入指令 取決於協同處理

MCR{cond} ARM 暫存器到協同處理器暫存 取決於協同處理
coproc,opcodel,Rd,CRn,CRm{,opcod 器的資料傳送指令 器
e2}
MRC{cond} 協同處理器暫存器到 ARM 暫存 取決於協同處理
coproc,opcodel,Rd,CRn,CRm{,opcod 器的資料傳送指令 器
e2}
2.4.2 IA32 處理器的架構
IA32 就是個人電腦上俗稱 80x86 系列的處理器

由 Intel 公司設計
圖 2.8 個人電腦的主機板實例
圖 2.9 個人電腦的結構圖

顯示器 中央處理器 磁碟

快取 排
圖形顯示 橋接 / 記憶體 磁碟
控制器 控制器 記憶體 SCSI 磁碟
控制器

PCI 匯流排
IDE 磁碟
控制器 延伸匯流排介面 鍵盤

磁碟 磁碟 延伸匯流排

平行埠 串列埠
圖 2.10 IA32 的常用暫存器
通用暫存器: EAX 基底暫存器: EBP
通用暫存器: EBX 堆疊暫存器: ESP
通用暫存器: ECX 來源指標: ESI
通用暫存器: EDX 目的指標: EDI

狀態暫存器: EFLAGS 程式段: CS


堆疊段: SS
程式計數器: EIP
資料段: DS
延伸段: ES
延伸段: FS
延伸段: GS
通用暫存器又可進一步區分
在 80286 的時代, x86 系列處理器是 16 位元的
AX, BX, CX, DX, ….

在 80386 的時代, x86 系列處理器變成 32 位元



EAX, EBX, ECX, EDX

AH AL 8+8 bits

AX 16 bits

EAX 32 bits

圖 2.11 IA32 的 EAX 暫存器


IA32 的指令集
 IA32 是一個複雜指令集的處理器,並且有相當多的歷
史性相容考量,因此指令集特別的複雜。本書因篇幅限
制將不詳細列出,有興趣的讀者請看相關的參考資料

x86 Instruction Set Reference,
http://siyobik.info/index.php?module=x86
The Intel 8086 / 8088/ 80186 / 80286 / 80386 / 80486
Instruction Set, http://home.comcast.net/~fbui/intel.html
Intel Architecture Software Developer‘s Manual - Volume
2,
http://developer.intel.com/design/pentium/manuals/24319101.
x86 Instruction Set Reference,
http://siyobik.info/index.php?module=x86
本章摘要 (1)
2.1 CPU0 的架構
32 bits : ALU+ 控制單元 + 暫存器 + 輸出入單元
指令集:儲存指令、運算指令、跳躍指令、堆疊指令

2.2 CPU0 的暫存器


IR, R0-R15
R0=0, R15 (PC), R14 (LR), R13 (SP), R12 (SW)
本章摘要 (2)
2.3 CPU0 的定址模式
立即載入: LDI R1, 100
相對定址: LD R1, [R2+100]
索引定址: LDR R1, [R2+R3]

2.4 實務案例
2.4.1 ARM 處理器的架構
2.4.2 IA32 處理器的架構

Você também pode gostar