Arm的37個通用暫存器【轉】
Arm的37個通用暫存器
1.Arm的7中工作模式
ARM 有7個基本工作模式:
User : 非特權模式,大部分任務執行在這種模式
FIQ : 當一個高優先順序(fast) 中斷產生時將會進入這種模式
IRQ : 當一個低優先順序(normal) 中斷產生時將會進入這種模式
Supervisor :當復位或軟中斷指令執行時將會進入這種模式
Abort : 當存取異常時將會進入這種模式
Undef : 當執行未定義指令時會進入這種模式
System : 使用和User模式相同暫存器集的特權模式
注意:
(1)除User(使用者模式)是Normal(普通模式)外,其他6種都是Privilege(特權模式)。
(2)Privilege中除Sys模式外,其餘5種為異常模式。
(3)各種模式的切換,可以是程式設計師通過程式碼主動切換(通過寫CPSR暫存器);也可以是CPU在某些情況下自動切換。
(4)各種模式下許可權和可以訪問的暫存器不同。
3.ARM中7種模式下的通用暫存器
(1)Arm中一共有37個通用暫存器,如上圖。
(2)圖中有名字相同的暫存器,但是不是同一個暫存器。如,r13在不同的模式下都有,但是不同模式下的r13都是不一樣的,這種暫存器叫影子暫存器。
(1)黑色部分的代表共用的暫存器,其他顏色的代表對應工作模式下才有的暫存器。
(2)為什麼7種模式下的r13是不一樣的?
r13(sp)是堆疊指標,如果7種模式都是採用同一個堆疊指標的話,在某一個模式中,堆疊出現了問題,則會導致7中模式都奔潰,故7種模式的棧都是不同的。
(3)r14(lr)是用來儲存返回地址的,每種模式的r14都是不同的暫存器。
(4)spsr是用於切換模式前,將當前模式的cpsr的內容儲存起來,在返回時,再將spsr的值給cpsr。
(5)PC(Program control register)為程式指標,PC指向哪裡,CPU就會執行哪條指令(所以程式跳轉時就是把目標地址程式碼放到PC中)
(6)整個CPU中只有一個PC(CPSR也只有一個,但SPSR有5個)。
(7)ARM共有37個暫存器,都是32位長度
(8)37個暫存器中30個為“通用”型,1個固定用作PC,一個固定用作CPSR,5個固定用作5種異常模式下的SPSR。
4.CPSR程式狀態暫存器
(1)條件位:
N:ALU計算結果為負
Z:ALU計算結果為0
C:ALU計算中有進位
V:ALU計算中有溢位
這四位預設為0,當運算過程中發生以上四種情況時,則相應位會置1。
(2)中斷禁止位
I:普通中斷,為1時,禁止全部的普通中斷
F:快速中斷,為1時,禁止全部的快速中斷
————————————————
版權宣告:本文為CSDN博主「北雪-南暖」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/zwh847021940/article/details/53205338