1.寄存器R16用作CPSR(Current Program Status Register,当时程序状况寄存器),CPSR可在任何运转形式下被拜访,它包含条件标志位、间断制止位、当时处理器形式标志位,以及其他一些相关的操控和状况位。
每一种运转形式下又都有一个专用的物理状况寄存器,称为SPSR(Saved Program Status Register,备份的程序状况寄存器),当反常产生时,SPSR用于保存CPSR的当时值,从反常退出时则可由SPSR来康复CPSR。
因为用户形式和体系形式不属于反常形式,他们没有SPSR,当在这两种形式下拜访SPSR,结果是不知道的
当间断产生的时分,把CPSR保存在SPSR是主动完结的。
对反常的呼应
当一个反常呈现今后,ARM微处理器会履行以下几步操作:(主动处理的)
1、将下一条指令的地址存入相应衔接寄存器LR,以便程序在处理反常回来时能从正确的方位重新开端履行。若反常是从ARM状况进入,LR寄存器中保存的是下一条指令的地址(当时PC+4或PC+8,与反常的类型有关);若反常是从Thumb状况进入,则在LR寄存器中保存当时PC的偏移量,这样,反常处理程序就不需求确认反常是从何种状况进入的。例如:在软件间断反常SWI,指令MOV PC,R14_svc总是回来到下一条指令,不论SWI是在ARM状况履行,仍是在Thumb状况履行。
2、将CPSR仿制到相应的SPSR中。
3、依据反常类型,强制设置CPSR的运转形式位。
4、强制PC从相关的反常向量地址取下一条指令履行,然后跳转到相应的反常处理程序处。
还能够设置间断制止位,以制止间断产生。
假如反常产生时,处理器处于Thumb状况,则当反常向量地址加载入PC时,处理器主动切换到ARM状况
从反常回来(手动处理的)
反常处理完毕之后,ARM微处理器会履行以下几步操作从反常回来:
1、将衔接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR仿制回CPSR中。
3、若在进入反常处理时设置了间断制止位,要在此铲除。
能够以为应用程序总是从复位反常处理程序开端履行的,因而复位反常处理程序不需求回来。
几种CPU作业形式
用户形式(User,usr) | 正常程序履行的形式 |
快速间断形式(FIQ,fiq) | 用于高速数据传输和通道处理 |
外部间断形式(IRQ,irq) | 用户一般的间断运用 |
特权形式(Supervisor,sve) | 供操作体系运用的一种保护形式 |
数据拜访间断形式(Abort,abt) | 用于虚拟存储及存储保护 |
未定义指令间断形式(Undefin- ed,und) | 用于支撑经过软件仿真硬件的协处理器 |
体系形式(System,sys) | 用于运转特权级的操作体系使命 |
除用户形式外都是特权形式(恣意地进行处理器形式的切换)。。
除用户形式和体系形式外都是反常形式。
对不同的间断形式都有独立的仓库和独立的仓库指针(SP)和(LR)
从SWI和Undef反常回来时运用
movs pc,LR
从FIQ,IRQ和预取停止回来时运用
SUBS PC, LR, #4
从数据反常回来时运用
SUBS PC, LR, #8
在运用上述指令反常回来时,假如LR之前被压栈的话运用LDM
LDMFD SP! {PC}^