提问:msr cpsr_cxsf,r1

2009年09月05日 15:22    发布者:anfaye
     mrs     r0,cpsr
     bic     r0,r0,#MODEMASK
     orr     r1,r0,#UNDEFMODE|NOINT
     msr     cpsr_cxsf,r1        
     ldr     sp,=UndefStack
在启动代码里面有这么一段话,我查了相关资料和解释.大概知道了这段话的作用:
1.把CPSR的东东放到R0寄存器里面,
2.把modemask相关位清零
3.undefmode和noint取或放到R0里面在于R1取或后放到R1里面
4.把R1的东东在放回CPSR_CXSF里面
5.压入undef堆栈里面

我的问题是CPSR是程序状态标志寄存器?那这CPSR_CXSF是啥?:dizzy:

网友评论

阿南 2009年09月06日
是的,楼主请参考《ARM体系结构与编程》一书,那里会有详细讲解
geyingzhen 2009年09月06日
应该是CXSF模式下的状态寄存器吧
geyingzhen 2009年09月06日
也好像是设置相应的标志位!!!
geyingzhen 2009年09月06日
对cpsr的操作是采用“读取-修改-写入”的方式。即先用mrs读出,再修改,最后用msr写入cpsr。注意上面写入时用的是cpsr_cxsf,下划线_后面的表示的是“域”的意思,用于设定cpsr中需要操作的位
geyingzhen 2009年09月06日
c - control field mask byte (PSR) 控制位域
     x - extension field mask byte (PSR)
        s - status field mask byte (PSR[23:16)
        f - flags field mask byte (PSR).
比如 msr  cpsr_c, r1 表示只修改控制位,即cpsr的低8位。具体的可查看cpsr各位的定义。