1. 程式人生 > >專題2-我從內部看ARM-ARM工作模式+暫存器詳解

專題2-我從內部看ARM-ARM工作模式+暫存器詳解

1、ARM家族大檢閱

1)名字歸類

(1)晶片:

2440(arm9核–採用ARMv4指令架構)
6410(arm11核–採用ARMv6指令架構)
210 (Cortex A8核–採用ARMv7指令架構)

(2)ARM核演變

ARM核演變:ARM—–cortex,在 ARM11 以後,ARM 公司使用了新的命名方式:Cortex
Cortex-M —》微控制器市場、工控領域,相當於微控制器,分為 Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3、Cortex-M4 等幾個檔次。
Cortex-R —》主要目標是高階的實時系統,包括基帶、汽車、大容量儲存、工業和醫療市場等等,分為 Cortex-R4、Cortex-R5、Cortex-R7 幾個檔次。
Cortex-A

—》主要面向通用處理應用市場,可向託管豐富 OS 平臺和使用者應用程式的裝置提供全方位的從超低成本手機、智慧手機、移動計算平臺、數字電視和機頂盒到企業網路、印表機和伺服器解決方案,處理器有:Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A12、Cortex-A15、Cortex-A17、Cortex-53、Cortex-A57 等等。
備註:
ARM7相當於cortex-M3,可能M3效能稍微好一點
ARM9和ARM11效能介於cortex-R4和cortex-A4之間

(3)指令架構:ARMv6 ARMv7

2)比較2440、6410、210

                2440                6410                210
處理速度       400~500Mb           533~667Mb           800Mb~1G
快取             16kb               16kb                32kb
記憶體介面         SDRAM            SDRAM/DDR            DDR1/DDR2
支援OS      WINCE/LINUX    WINCE/LINUX/Android   WINCE/LINUX/Android
其它            宣佈停產      

2、ARM工作模式

在7種不同的工作模式下,訪問的暫存器不同,充分的保護作業系統。
可以在軟體控制下進行模式更改,也可以由外部中斷或異常處理引起.。
大多數應用程式在使用者模式下執行。當處理器在使用者模式下,正在執行的程式無法訪問一些受保護的系統資源。
這裡寫圖片描述

3、ARM暫存器詳解

ARM暫存器:共有37個暫存器

1)通用暫存器(31個)

———-1)不分組暫存器:R0~R7 (如圖 8個)
———-2)分組暫存器:R8~R14(如圖 22個)
R12為內部過程呼叫暫存器(IP),R13為堆疊暫存器(SP),R14為連結暫存器(LR)(在呼叫函式時,儲存現在的地址以便能返回)
———-3)程式計數器:pc(R15)

2)程式狀態字暫存器(6個)

(1)具體如下圖:
這裡寫圖片描述

為什麼異常模式下既有CPSRSPSR兩個狀態暫存器,比方說,來了一箇中斷,要進入中斷模式,現在程式狀態暫存器CPSR的值要發生改變,但為了執行完中斷後能保留原來狀態暫存器的值,可以先把CPSR儲存到SPSR中,S–》Save。

(2)程式狀態暫存器的格式
這裡寫圖片描述
CPSR暫存器重要位描述:
N:當比較兩個數字的大小時,當A>B,N保持0,當A < B,N變為1
Z:也是比較兩個數,當A、B兩者相等時,Z為1
I:當為1時,不能產生IRQ中斷
F:當為1時,不能產生FIQ中斷
M[4:0]:表明處理器工作不同的模式(可以看上上面的圖)

4、ARM定址方式

所謂定址方式就是處理器根據指令中給出的資訊來找到指令所需運算元的方式。
1)立即數定址
運算元本身就在指令中給出,只要取出指令也就取到了運算元。
例如:ADD R0,R0,#0x3f ;R0<–R0+0x3f

2)暫存器定址
利用暫存器中的值作為運算元,是一種執行效率較高的定址方式。
ADD R0,R1,R2 ;R0<–R1+R2

3)暫存器間接定址
暫存器間接定址就是暫存器中存放的是運算元在記憶體中的地址。
例如:LDR R0,[R2] ;R0<–[R2]

4)基址變址定址
將暫存器裡的內容(基地址)與指令中給出的地址偏移量相加,從而得到運算元在記憶體中的地址。
LDR R0,[R1,#4] ;R0<–[R1+4]

5)相對定址
與基址變址定址方式相類似,相對定址PC指標的當前值為基地址,指令中的地址標號作為偏移量,將兩者相加之後得到運算元的有效地址。
BL NEXT //跳轉到子程式NEXT處執行
……
NEXT
……
MOV PC,LR //從子程式返回,LR是連結暫存器儲存了跳轉之前的地址