嵌入式開發筆記(三)ARM基礎知識
1.ARM的程式設計模式
1.1當ARM 採用的是32位架構.
ARM 約定:
Byte : 8 bits
Halfword(半字):16 bits (2 byte)
Word : 32 bits (4 byte)聯想: 資料位寬4 byte,地址對映資料線32條
注意:Word在VC下是16bit,原因早期微軟16位時就定義為16bit,後來32位時候未改換成DWord.
1.2大部分ARM core 提供:
(2)ARM 指令集(32-bit)
(1)Thumb 指令集(16-bit )
(3)Thumb2指令集(16 & 32bit)
小計:早期時候Thumb指令集,每條指令16bit。缺點:有時需要兩個指令完成,效率,時間。之後ARM指令集每條指令32bit,缺點:浪費資源。隨後Thumb2(armV7)[16&32]。
1.3 Jazelle cores 支援 Java bytecode(支援JAVA加速)
2.ARM處理器工作模式
2.1 ARM 有7個基本工作模式:
(1)User : 非特權模式,大部分任務執行在這種模式
(2)FIQ : 當一個高優先順序(fast) 中斷產生時將會進入這種模式
(3)IRQ : 當一個低優先順序(normal) 中斷產生時將會進入這種模式
(4)Supervisor :當復位或軟中斷指令執行時將會進入這種模式
(5)Abort : 當存取異常時將會進入這種模式
(6)Undef : 當執行未定義指令時會進入這種模式
(7)System : 使用和User模式相同暫存器集的特權模式
2.2注意:
(1)除User(使用者模式)是Normal(普通模式)外,其他6種都是Privilege(特 權模式)。
(2)Privilege中除Sys模式外,其餘5種為異常模式。
(3)各種模式的切換,可以是程式設計師通過程式碼主動切換(通過寫CPSR暫存器); 也可以是CPU在某些情況下自動切換。
(4)各種模式下許可權和可以訪問的暫存器不同。
2.3 CPU為什麼設計這些模式?
(1)1CPU是硬體,OS是軟體,軟體的設計要依賴硬體的特性,硬體的設計要考 慮軟體需要,便於實現軟體特性。
(2)作業系統有安全級別要求,因此CPU設計多種模式是為了方便作業系統的多 種角色安全等級需要。
3.ARM的37個暫存器詳解
3.1特點
1.ARM總共有37個暫存器,但是每種模式下最多隻能看到18個暫存器,其他暫存器雖然名字相同但是在當前模式不可見。
例如:對r13這個名字來說,在ARM中共有6個名叫r13(又叫sp)的暫存器,但是在每種特定處理器模式下,只有一個r13是當前可見的,其他的r13必須切換到他的對應模式下才能看到。這種設計叫影子暫存器(banked register)
注意: System模式使用user模式暫存器集
Sp:棧指標暫存器。
lr:儲存指標
Cpsr:程式狀態暫存器
Spsr:儲存cpsr狀態暫存器
3.1.2總結
(1)ARM共有37個暫存器,都是32位長度
(2)37個暫存器中30個為“通用”型,1個固定用作PC,一個固定用作CPSR, 5個固定用作5種異常模式下的SPSR。
3.2 CPSR程式狀態暫存器
(1)Mode位:
處理器模式位(7種)
(2)T Bit
僅ARM xT架構支援
T = 0: 處理器處於 ARM 狀態
T = 1: 處理器處於 Thumb 狀態
(3)中斷禁止位:
I = 1: 禁止 IRQ.
F = 1: 禁止 FIQ.
(4)J 位
僅ARM 5TE/J架構支援
J = 1: 處理器處於Jazelle狀態
(5)Q 位:
僅ARM 5TE/J架構支援
指示飽和狀態
(6)條件位:
N = Negative result from ALU
(當運算為負的自動為1)
Z = Zero result from ALU
(當運算為0的自動為1)
C = ALU operation Carried out
(當運算進位自動為1)
V = ALU operation oVerflowed
(當運算溢位自動為1)
3.2.2注意
(1)CPSR中各個bit位表明了CPU的某些狀態資訊,這些資訊非常重要, 和後面學到的彙編指令息息相關(譬如BLE指令中的E就和CPSR中 的Z標誌位有關)
(2)CPSR中的I、F位和開中斷、關中斷有關
(3)CPSR中的mode位(bit4~bit0共5位)決定了CPU的工作模式, 在uboot 程式碼中會使用匯編進行設定。
轉載於:https://my.oschina.net/vvbest/blog/811196