1.ARM彙編學習——CPSR寄存器、CPSR_cxsf

1:   ARM每種工作模式除R0~R15共16個寄存器外,還有第17個寄存器CPSR,叫做 當前程序狀態寄存器,CPSR中一些位被用於標識各種狀態,一些位被用於標識當前出於什麼工作模式。


2:這個狀態寄存器的32位可以分爲四個8位的域,所以,如果CPSR後面加上,c,x,s,f都是容易理解的


其中cpsr_c代表的是cpsr寄存器的低8位,也就是控制位.
有些程序裏這樣寫.
msr cpsr_c, #0xd2       @ 進入中斷模式.

3:各個位的詳細說明






使用實例:

USR_MODE    EQU     0x10
FIQ_MODE    EQU     0x11
IRQ_MODE    EQU     0x12
SVC_MODE    EQU     0x13
ABT_MODE    EQU     0x17
UDF_MODE    EQU     0x1B
SYS_MODE    EQU     0x1F
I_BIT       EQU     0x80
RAM_Limit       EQU     0x2000000            ; For unexpanded hardware board
UND_Stack       EQU     RAM_Limit
Abort_Stack     EQU     RAM_Limit-256
FIQ_Stack       EQU     RAM_Limit-512       ; followed by IRQ stack
SVC_Stack       EQU     RAM_Limit-1024      ; SVC stack at top of memory
IRQ_Stack       EQU     RAM_Limit-2048      ; followed by IRQ stack
USR_Stack       EQU     RAM_Limit-10240F_BIT       EQU     0x40

;設置對應模式下的堆棧指針,同時禁止中斷和快中斷
     MSR    CPSR_c, #UDF_MODE :OR: I_BIT :OR: F_BIT
     LDR    SP, =UND_Stack
     MSR    CPSR_c, #ABT_MODE :OR: I_BIT :OR: F_BIT
     LDR    SP, =Abort_Stack
     MSR    CPSR_c, #IRQ_MODE :OR: I_BIT :OR: F_BIT
     LDR    SP, =IRQ_Stack
     MSR    CPSR_c, #FIQ_MODE :OR: I_BIT :OR: F_BIT
     LDR    SP, =FIQ_Stack
     MSR    CPSR_c, #SYS_MODE :OR: I_BIT :OR: F_BIT
     LDR    SP, =USR_Stack
     MSR    CPSR_c, #SVC_MODE :OR: I_BIT :OR: F_BIT
     LDR    SP, =SVC_Stack



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