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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值