arm指令集理解

ARM 120浏览

摘自 : 《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,未定义指令