ARM體系結構筆記①---(ARM的7種模式、寄存器、存儲空間、指令、中斷、最小系統)

本文所有資料來至互聯網,筆者加以整理和歸納,僅供以後複習

一、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。


d、狀態寄存器

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章