查看: 7237|回复: 5

提问:msr cpsr_cxsf,r1

[复制链接]
发表于 2009-9-5 15:22:07 | 显示全部楼层 |阅读模式
关键词: cpsr , cxsf , msr , 提问
     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是啥?
发表于 2009-9-6 10:42:22 | 显示全部楼层
是的,楼主请参考《ARM体系结构与编程》一书,那里会有详细讲解
发表于 2009-9-6 15:39:31 | 显示全部楼层
应该是CXSF模式下的状态寄存器吧
发表于 2009-9-6 15:44:45 | 显示全部楼层
也好像是设置相应的标志位!!!
发表于 2009-9-6 16:00:03 | 显示全部楼层
对cpsr的操作是采用“读取-修改-写入”的方式。即先用mrs读出,再修改,最后用msr写入cpsr。注意上面写入时用的是cpsr_cxsf,下划线_后面的表示的是“域”的意思,用于设定cpsr中需要操作的位
发表于 2009-9-6 16:01:58 | 显示全部楼层
c - control field mask byte (PSR[7:0]) 控制位域
     x - extension field mask byte (PSR[15:8])
        s - status field mask byte (PSR[23:16)
        f - flags field mask byte (PSR[31:24]).
比如 msr  cpsr_c, r1 表示只修改控制位,即cpsr的低8位。具体的可查看cpsr各位的定义。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表