ARM处理器有7中模式: 用户模式(User).快速中断模式(FIQ),外部中断模式(IRQ),特权模式(sve),数据访问中止模式(abt),未定义指令中止 模式(und),系统模式 (sys),除了系统模式和用户模式剩余5种特权模式称为异常模式
当应用程序发生异常中断的时候,处理器进入相应的异常模式,每一种异常模式中都有一组寄存器,供相应的异常处理程序的使用.
arm寄存器的介绍:31个通用寄存器,6个状态寄存器,可见的寄存器有15个通用寄存器(R0~R15),一个或者两个寄存器及程序计数器。在所有寄存器中,所有的模式用的同一个物理寄存器,有一些寄存器是各种模式自己独立的物理寄存器
通用寄存器分为3类:未备份的寄存器(R0~R7),备份寄存器(R8~R14),程序计数器R15(同时称为PC)
寄存器R13在RAM中常用 作为栈指针,当进入异常模式的时候,可以将需要的保存 的寄存器放载R13所指的栈地址,当退出异常处理模式时,将保存的R13所指的栈中的寄存器值弹出。
寄存器R14又称为连接寄存器(LR)它具有两个作用:1 每一种处理器的模式自己的物理R14中存放当前子程序的返回地址,
2 ,当异常中断的发生的时候,该异常的模式特定的物理R14被设置成该异常模式将返回地址
寄存器R15又称为PC (程序计数器),当正确读取PC的值的时候,该指令地址值加8,读取的PC值加4
程序状态寄存器:CPSR(当前的程序状态寄存器),SPSR(备份程序状态寄存器)
(CPSR,SPSR)访问指令
ARM 微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据,程序状态寄存器访问指令包括以下两条:
— MRS: 程序状态寄存器到通用寄存器的数据传送指令
— MSR: 通用寄存器到程序状态寄存器的数据传送指令
1、 MRS 指令
MRS 指令的格式为:MRS{条件} 通用寄存器,程序状态寄存器(CPSR 或SPSR)
MRS 指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况:
- 当需要改变程序状态寄存器的内容时,可用MRS 将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。
- 当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。
指令示例:
MRS R0,CPSR ;传送CPSR 的内容到R0
MRS R0,SPSR ;传送SPSR 的内容到R0
2、 MSR 指令
MSR 指令的格式为:MSR{条件} 程序状态寄存器(CPSR 或SPSR)_<域>,操作数
MSR 指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。<域>用于设置程序状态寄存器中需要操作的位,32 位的程序状态寄存器可分为4 个域:
位[31:24]为条件标志位域,用f 表示;
位[23:16]为状态位域,用s 表示;
位[15:8]为扩展位域,用x 表示;
位[7:0]为控制位域,用c 表示;
该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在MSR 指令中指明将要操作的域。
指令示例:
MSR CPSR,R0 ;传送R0 的内容到CPSR
MSR SPSR,R0 ;传送R0 的内容到SPSR
MSR CPSR_c,R0 ;传送R0 的内容到SPSR,但仅仅修改CPSR 中的控制位域
ARM处理器对异常中断的响应
1保存处理器当前段的状态的,中段屏蔽位各种标志位,这是通过将当前的程序状态寄存器的CPSR的内容保存到的将要执行的异常中断的对应的SPSR寄存器中实现的
2设置当前程序状态寄存器CPSR中相应的位,(CPSR的中的位使处理器进入相应的执行模式,进制IRQ中断)
3将寄存器lr_mode 设置成返回地址
4 将程序计数的值PC设置成该异常中断的中断向量的地址,从而跳转到相应的异常中断处理程序处
ARM从异常中断处理程序中返回,
1 恢复被中断程序的处理器 状态即将SPSR_mode寄存器内容复制CPSR中,
2 返回到发生异常中断指令的的下一条指令处执行,即将lr_mod寄存器的内容的复制到程序计数器PC中
复制异常中断处理程序不需要返回。