arm指令集理解

摘自 : 《ARM SOC体系结构》--steve furber

CPSR(cureent program status registers) : 当前程序状态寄存器。低五位用于定义当前操作模式。 

CPSR[4:0]  | 模式 | 用途 | 寄存器

10000            |用户 |正常用户模式 | 用户

10001     |FIQ  |处理快速中断 | _fiq  (fast interrupt )

10010   |IRQ |处理标准中断 |_irq  (interrupt )

10011    |SVC | 处理软件中断(SWI)| _svc

10111 |中止 |处理寄存器故障 | _abt (abort)

11011 |未定义| 处理未定义的指令陷阱 | _und (undefine)

11111 |系统 | 运行特权操作系统任务 | 用户

SPSR(saved program status register): 程序状态保存寄存器。主要用于恢复用户状态到之前的状态,类似于中断的时候,保存的pc指针。





进入异常

当异常发生时,ARM尽量完成当前指令,然后脱离当前指令序列去处理异常。

处理顺序如下 : 

1),进入特定的异常相应的操作模式

2),将引起异常指令的下一条指令的地址保存到新的模式的r14中(对的,这里是r14,异常返回是将r14恢复到r15)

3),将CPSR的原值保存到新模式的SPSR

4,),通过设置CPSR的第7位来禁止IRQ,如果异常位快速中断,还要设置CPSR的第6位来禁止快速中断

5),将PC强制赋值,使程序从表(arm 异常的向量地址)给出的相应的向量地址开始执行。



异常返回

一旦异常处理完毕,用户任务便恢复正常,这就要求异常处理程序代码精确的恢复异常发生是的用户状态。

1),所有修改过的用户寄存器必须从处理程序的堆栈中恢复

2),CPSR必须从相应的SPSR中恢复

3),PC必须变回到再用户指令流中相应的指令地址


异常的优先级:

1),复位

2),数据异常中止

3),FIQ

4),IRQ

5),预取指异常中止

6),SWI,未定义指令



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值