2011軟件水平考試嵌入式系統設計師輔導筆記(15)
7、ARM體系結構的基本概念
(1)ARM:Advanced RISC Machine。
(2)ARM體系結構中支持兩種指令集:ARM 指令集和Thumb 指令集。
(3)ARM內核有T、D、M、I四個功能模塊:
A、T 模塊:表示16位Thumb,可以在兼顧性能的同時減少代碼尺寸。
B、D 模塊:表示Debug,內核中放置了用于調試的結構,通常為一個邊界掃描鏈JTAG。
C、M 模塊:表示8位乘法器。
D、I 模塊:表示EmbeddedICE Logic,用于實時斷點觀測及變量觀測的邏輯電路部分。
(4)ARM處理器有7種運行模式:
A、用戶模式(User):正常程序執行模式,用于應用程序。
D、快速中斷模式(FIQ):快速中斷處理,用于高速數據傳輸和通道處理。
C、外部中斷模式(IRQ):用于通用的中斷處理。
D、管理模式(SVE):供操作系統使用的一種保護模式。
E、數據訪問中止模式(Abort):用于虛擬存儲及存儲保護。
F、未定義指令中止模式(Undefined):當未定義指令執行時進入該模式。
G、系統模式(System):用于運行特權級的操作系統任務。
除了用戶模式之外的其他6種處理器模式稱為特權模式,在這些模式下,程序可以訪問所有的系統資源,
也可以任意地進行處理器模式切換,其中,除了系統模式外,其他的5種特權模式又稱為異常模式。
處理器模式可以通過軟件控制進行切換,也可以通過外部中斷或異常處理過程進行切換。大多數的用
戶程序運行在用戶模式下,這時,應用程序不能訪問一些受操作系統保護的系統資源,應用程序也不能直
接進行處理器模式切換。當需要進行處理器模式切換時,應用程序可以產生異常處理,在異常處理中進行
處理器模式的切換。這種體系結構可以使操作系統控制整個系統的資源。
當應用程序發生異常中斷時,處理器進入相應的異常模式。在每一種異常模式種都有一組寄存器,供
相應的異常處理程序使用,這樣就可以保證進入異常模式時,用戶模式下的寄存器不被破壞。
系統模式并不是通過異常過程進入的,它和用戶模式具有完全一樣的寄存器,但是系統模式屬于特權
模式,可以訪問所有的系統資源,也可以直接進行處理器模式切換,它主要供操作系統任務使用。
(***RM處理器共有37個寄存器:31個通用寄存器和6個狀態寄存器
A、通用寄存器包括R0~R15,可以分為3類:
a、未備份寄存器R0~R7:在所有的處理器模式下,未備份寄存器都是指向同一個物理寄存器。
b、備份寄存器R8~R14:
對于R8~R12來說,每個寄存器對于2個不同的物理寄存器,它們每次所訪問的物理寄存器都
與當前的處理器運行模式有關。
對于R13、R14來說,每個寄存器對于6個不同的物理寄存器,其中一個是用戶模式和系統模
式共用。
R13在ARM 指令種常用作堆棧指針。由于處理器的每種運行模式都有自己獨立的物理寄存器
R13,所有在用戶應用程序的初始化部分,一般要初始化每種模式下的R13,使其指向該運行
模式的??臻g。
R14又稱為連接寄存器(LR),在ARM 體系種具有下面兩種特殊作用:在通過BL 或BLX 指
令調用子程序時,存放當前子程序的返回地址;在異常中斷發生時,存放異常模式將要返回的
地址。
c、程序計數器R15(PC)。
由于ARM 采用了流水線機制,在三級流水線中,當正確讀取了PC 的值時,該值為當前指令地址值加
8個字節。也就是說,PC 指向當前指令的下兩條指令的地址。在ARM 指令狀態下,PC 的0和1位是0,
在Thumb 指令狀態下,PC 的0位是0。
B、程序狀態寄存器
a、ARM 體系結構包含1個當前程序狀態寄存器(CPSR)和5個備份的程序狀態寄存器(SPSR),使用
MSR 和MRS 指令來設置和讀取這些寄存器。
b、當前程序狀態寄存器CPSR:保存當前處理器狀態的信息,可以在任何處理器模式下被訪問。
c、備份程序狀態寄存器SPSR:每一種異常處理器模式下都有一個專用的物理狀態寄存器。當特定的
異常中斷發生時,這個寄存器用于存放當前程序狀態寄存器的內容,在異常中斷程序退出時,可以
用SPSR 中保存的值來恢復CPSR。
d、由于用戶模式和系統模式不屬于異常模式,它們沒有SPSR,當在這兩種模式下訪問SPSR 時,結
果是未知的。
(6)ARM指令的尋址方式
所謂尋址方式就是處理器根據指令中給出的地址信息來尋找物理地址的方式。
A、立即尋址:操作數本身就在指令中給出,只要取出指令也就取到了操作數。
ADD R0, R0, #1 ;R0??R0+1
B、寄存器尋址:利用寄存器中的數值作為操作數。
ADD R0, R1, R2 ;R0??R1+R2
C、寄存器間接尋址:以寄存器中的值作為操作數地址,而操作數本身存放在存儲器中。
ADD R0, R1, [R2] ;R0??R1+[R2]
LDR R0, [R1] ;R0??[R1]
STR R0, [R1] ;[R1]??R0
D、基址變址尋址:將寄存器(該寄存器一般稱作基址寄存器)的內容與指令中給出的地址偏移量相
加,從而得到一個操作數的有效地址。
LDR R0, [R1, #4] ;R0??[R1+4]
LDR R0, [R1, #4]! ;R0??[R1+4] R1??R1+4
LDR R0, [R1], #4 ;R0??[R1] R1??R1+4
LDR R0, [R1, R2]! ;R0??[R1+R2]
E、多寄存器尋址:一條指令可以完成多個寄存器值的傳送。
LDMIA R0, {R1, R2, R3} ;R1??[R0] R2??[R0+4] R3??[R0+8]
F、相對尋址:以程序計數器PC 的當前值作為基地址,指令中的地址標號作為偏移量,兩者相加之
后得到操作數的有效地址。
BL NEXT ;跳轉到子程序NEXT 處執行
……
NEXT
……
MOV PC, LR ;從子程序返回
G、堆棧尋址:支持4種類型的堆棧工作方式:
a、滿遞增堆棧:堆棧指針指向***壓入的數據,且由低地址向高地址生長。
b、滿遞減堆棧:堆棧指針指向***壓入的數據,且由高地址向低地址生長。
c、空遞增堆棧:堆棧指針指向下一個將要放入數據的空位置,且由低地址向高地址生長。
d、空遞減堆棧:堆棧指針指向下一個將要放入數據的空位置,且由高地址向低地址生長。
(7)ARM的存儲方法
A、大端模式:數據的高字節存儲在低地址中,低字節存儲在高地址中。
B、小端模式:數據的低字節存儲在低地址中,高字節存儲在高地址中。
(8)ARM中斷與異常
A、ARM 內核支持7種中斷,不同的中斷處于不同的處理模式,具有不同的優先級,而且每個中斷都有
固定的中斷地址入口。當一個中斷發生是,相應的R14(LR)存儲中斷返回地址,SPSR 存儲當前
程序狀態寄存器CPSR 的值。
B、由于ARM 內核支持流水線工作,LR 寄存器存儲的地址可能是發生中斷后面指令的地址,所以不同
的中斷處理完成后,必須將LR 寄存器值經過處理后再寫入P15(PC)寄存器。
C、ARM 異常的具體含義:
a、復位:當處理器的復位電平有效時,產生復位異常,程序跳轉到異常復位異常處理程序處執行。
b、未定義的指令:當ARM 處理器或協處理器遇到不能處理的指令時,產生未定義指令異常。可
以使用該異常機制進行軟件仿真。
c、軟件中斷:該異常由執行SWI 指令產生,可用于用戶模式下的程序調用特權操作指令。可使用
該異常機制實現操作系統調用功能。
d、指令預取中止:如果處理器預取指令的地址不存在或該地址不允許當前指令訪問,存儲器向處
理器發出中止信號,但當預取的指令被執行時,才會產生指令預取中止異常。
e、數據訪問中止:如果處理器數據訪問指令的目標地址不存在,或者該地址不允許當前指令訪問,
處理器產生數據訪問中止異常。
f、外部中斷請求:當ARM 外部中斷請求管腳有效,而且CPSR 中的I 位為0時,產生IRQ 異常。
系統的外設可以通過該異常請求中斷服務。
g、快速中斷請求:當ARM 快速中斷請求管腳有效,而且CPSR 的F 位為0時,產生FIQ 異常。
D、ARM 處理器對異常中斷的響應過程
a、將下一條指令的地址存入相應的連接寄存器LR 中。
b、將CPSR 復制到相應的SPSR 中。
c、根據異常的類型,強制設置CPSR 的運行模式位。
d、強制PC 從相關的異常向量地址取下一條指令執行,從而跳轉到相應的異常處理程序處。
E、ARM 處理器從異常中斷處理程序中返回
a、恢復中斷的程序的處理器狀態,將SPSR 復制到CPSR 中。
b、若在進入異常處理時設置了中斷禁止位,要在此清除。
c、將連接寄存器LR 的值減去相應的偏移量后送到PC。
F、復位異常中斷處理程序不需要返回。在復位異常中斷程序開始整個用戶程序的執行。
【編輯推薦】