本文所有資料來至互聯網,筆者加以整理和歸納,僅供以後複習
一、ARM處理器共有7種運行模式,如下表示:
處理器模式 |
處理器模式描述 |
用戶模式(User,usr) |
正常程序執行的模式 |
快速中斷模式(FIQ,fiq) |
用於高速數據傳輸和通道處理 |
普通中斷模式(IRQ,irq) |
用於通常的中斷處理 |
監管模式(Supervisor,svc) |
供操作系統使用的一種保護模式 |
數據訪問中止模式(Abort,abt) |
用於虛擬存儲及存儲保護 |
未定義指令中止模式(Undefined,und) |
用於支持通過軟件方針硬件的協處理器 |
系統模式(System,sys) |
用於運行特權級的操作系統任務 |
除了用戶模式之外的其他6種處理器模式稱爲特權模式(PrivilegedModes)。在這些模式下,程序可以訪問所有的系統資源,也可以任意地進行處理器模式的切換。其中,除系統模式外,其他5種特權模式又稱爲異常模式。
處理器模式可以通過軟件控制進行切換,也可以通過外部中斷或異常處理過程進行切換。大多數的用戶程序運行在用戶模式下,這時,應用程序不能夠訪問一些受操作系統保護的系統資源,應用程序也不能直接進行處理器模式的切換。當需要進行處理器模式的切換時,應用程序可以產生異常處理,在異常處理過程中進行模式的切換。這種體系結構可以使操作系統控制整個系統的資源。
當應用程序發生異常中斷時,處理器進入相應的異常模式。在每一種異常模式中都有一組寄存器,供相應的異常處理程序使用,這樣就可以保證在進入異常模式時,用戶模式下的寄存器(保證了程序運行狀態)不被破壞。
系統模式並不是通過異常過程進入的,它和用戶模式具有完全一樣的寄存器。但是系統模式屬於特權模式,可以訪問所有的系統資源,也可以直接進行處理器模式的切換。它主要供操作系統任務使用。通常操作系統的任務需要訪問所有的系統資源,同時該任務仍然使用用戶模式下的寄存器組,而不是使用異常模式下相應的寄存器組,這樣可以保證當異常中斷髮生時任務狀態不被破壞。
二、ARM寄存器
ARM共有37個32位寄存器,其中31個爲通用寄存器,6個爲狀態寄存器. 都是32位寄存器,但目前狀態寄存器只使用了其中12位
任意時刻(也就是任意的處理器模式下),可見的寄存器包括15個通用寄存器(R0~R14)、一個或兩個狀態寄存器及程序計數器(PC)。
a、寄存器R14又被稱爲連接寄存器(Link Register,LR),在ARM體系中具有下面兩種殊的作用:
i. 每一種處理器模式自己的物理R14中存放當前子程序的返回地址。當通過BL或BLX指令調用子程序時,R14被設置成該子程序的返回地址。在子程序中,當把R14的值複製到程序計數器PC中時,子程序即返回。
ii. 當異常中斷髮生時,該異常模式特定的物理R14被設置成該異常模式將要返回的地址,對於有些異常模式,R14的值可能與將返回的地址有一個常數的偏移量。具體的返回方式與子程序返回方式基本相同。
b、每一種異常模式擁有自己的物理的R13。應用程序初始化該R13,使其指向該異常模式專用的棧地址。當進入異常模式時,可以將需要使用的寄存器保存在R13所指的棧中;當退出異常處理程序時,將保存在R13所指的棧中的寄存器值彈出。這樣就使異常處理程序不會破壞被其中斷程序的運行現場。
c、程序計數器R15又被記作PC。由於ARM採用了流水線機制,當正確讀取了PC的值時,該值爲當前指令地址加8個字節。也就是說,對於ARM指令集來說,PC指向當前指令的下兩條指令的地址。由於ARM指令是字對齊的,PC值的第0位和第1位總爲0。
CPSR(CurrentProgram StatusRegister,當前程序狀態寄存器),CPSR可在任何運行模式下被訪問,它包括條件標誌位、中斷禁止位、當前處理器模式標誌位,以及其他一些相關的控制和狀態位。
每一種運行模式下又都有一個專用的物理狀態寄存器,稱爲SPSR(Saved Program StatusRegister,備份的程序狀態寄存器),當異常發生時,SPSR用於保存CPSR的當前值,從異常退出時則可由SPSR來恢復CPSR。由於用戶模式和系統模式不屬於異常模式,它們沒有SPSR,當在這兩種模式下訪問SPSR,結果是未知的。
N:當兩個補碼錶示的有符號整數運算時,N=1表示運算的結果爲負數;N=0表示運算結果爲正數或零;
Z:Z=1表示運算結果爲零;Z=0表示運算的結果不爲零;
C:在加法指令中,當結果產生了進位,則C=1;其他情況下C=0;
在減法指令中,當運算中發生借位,則C=0;其他情況下C=0;
V:對於加/減法運算指令,當操作數和運算結果爲二進制的補碼錶示的帶符號數時,V=1表示符號位溢出
CPSR的低8位稱爲控制位,當異常中斷髮生時這些位發生改變。在特權模式下,軟件可以修改這些控制位:
I:普通中斷禁止位;I=1時禁止IRQ中斷。
F:快速中斷禁止位;F=1時禁止FIQ中斷。
T:對於ARMv4以及更高的版本的T系列的ARM處理器
T=0表示執行ARM指令
T=1表示執行Thumb指令
對於ARMv5以及更高版本的非T系列的ARM處理器
T= 0表示執行ARM指令
T=1表示強制下一條執行的指令產生爲定義指令中斷
三、ARM存儲空間
ARM的地址空間也可以看作是230個32位的字單元(4字節)。這些字單元的地址可以被4整除,也就是說該地址的低兩位爲0b00。地址爲A的字數包括地址A、A+1、A+2、A+3這4個字節單元的內容。但是在字單元中,4個字節哪一個是高位字節,哪一個是低位字節,則有兩種不同的格式:big-endian格式和little-endian格式。
四、ARM指令
ARM指令系統屬於RISC指令系統。標準的ARM指令每條都是32位,有些ARM核還可以執行16位的Thumb指令集。一般地,ARM指令具有以下特點[9]:
a、指令的條件執行
ARM指令都是條件執行,條件標誌位位於程序代碼字節的cond位(位28-31,下文會介紹)。根據cond的不同編碼,可以選擇根據條件碼標誌決定指令的執行。
b、 靈活的第二操作數
ARM指令的另一個重要的特點是數據處理類指令有靈活的第二操作數operand2(位與程序代碼的位0-11)。它既可以是立即數,也可以是邏輯運算數,使得ARM指令可以在讀取數值的同時進行算術和移位操作。
c、協處理器的作用
ARM內核可提供協處理接口,通過擴展協處理器完成更加複雜的功能。因此ARM
指令中還包括了多條協處理器指令,使用多達16個協處理器,允許將其他處理器通過協處理器接口進行緊耦合;ARM還包括幾種內存管理單元的變種,包括簡單的內存保護到複雜的頁面層次。
d、Thumb指令
ARM在有的版本支持16位Thumb指令。Thumb指令集的整體執行速度比ARM
32位指令集快,而且提高了代碼密度。
e、具有RISC指令的特點
由於ARM指令屬於RISC指令,所以多具有RISC指令的特點,指令少,且等長,便於充分利用流水線技術,使用多寄存器,且爲簡單的Load和Store指令。
ARM指令按功能大致可以分爲跳轉指令、數據處理指令、乘法類指令、數據傳送指令、協處理器類指令以及雜項指令(包括狀態寄存器傳送指令、乘法類指令、軟件中斷指令和斷點指令)。 ARM指令包括60多個指令,並且支持多種尋址方式:寄存器尋址、立即數尋址、寄存器間接尋址、寄存器變址尋址、多寄存器尋址、堆棧尋址、塊拷貝尋址以及相對尋址等。對於具體的指令集,可以參考相關文檔。
五、ARM中斷
ARM體系中中斷向量表中指定了各異常中斷及處理程序的對應關係。它可以放在存儲地址的低端,也可以放在存儲地址的高端。異常中斷向量表的大小位32字節,其中每個異常中斷佔據4個字節大小,保留了4個字節空間。
每個異常中斷對應的中斷向量表中的4個字節的空間中放了一個跳轉指令或者一個向PC寄存器中賦值的數據訪問指令。通過這兩種指令,程序將跳轉到相應的異常中斷處理程序處執行。
下表爲中斷向量表 :
中斷向量偏移地址 異常中斷類型 異常中斷模式 優先級(6最低) |
0x00 復位 監管模式 1 0x04 未定義的指令 未定義指令中止模式 6 0x08 軟件中斷 監管模式 6 0x0c 指令預取中止 中止模式 5 0x10 數據訪問中止 中止模式 2 0x14 保留 未使用 未使用 0x18 普通中斷請求 外部中斷模式 4 0x1c 快速中斷請求 快速中斷模式 3 |
六、ARM最小系統
參考資料來源:圖片http://www.cnblogs.com/armlinux/archive/2011/03/23/2396833.html
文檔:Bootloard的研究與實現.doc