一、ARM处理器运行的7中模式:
除了用户模式之外的其他6种模式称为特权模式,这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换,
其中除了系统模式外,其他5种模式称为异常模式。
二、ARM寄存器介绍:
1、ARM处理器共有37个寄存器,其中包括31个通用寄存器(32位寄存器),6个状态寄存器(32位寄存器,只使用了其中12位)
ARM处理器共有7中不同的处理器模式,在每一组模式中有一组相应的寄存器组,任意时刻可见的寄存器包括15个通用寄存器(R0-R14)
、一个或者两个状态寄存器即程序计数器(PC)。在所有的寄存器中,有些是各个模式共用同一个物理寄存器,有一些寄存器是各个模式
独立拥有的寄存器。
1.1通用寄存器:
通用寄存器可以分为以下三类:
1、未备份寄存器(R0-R7),未备份处理器在所有的处理模式下指的都是同一个物理寄存器,在异常中断造成的处理器模式切换时,由于不同的处理器模式
使用的都是相同的物理寄存器,可能造成寄存器中的数据被破坏,未备份处理器没有用于特别的用途,任何可采用通用寄存器的场合都可以使用未备份处理器;
2、备份寄存器(R8-R14),
R13寄存器是ARM中常用作栈指针,在ARM指令集中,这是一种习惯的用法,并没有任何强制性使用R13作为栈指针。
R14寄存器称为连接寄存器(LR),在ARM体系中,具有如下两种特殊的作用:
(1)每一种处理器模式自己的物理R14中存放着当前子程序的返回地址,当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址;
(2)当异常中断发生时,该异常模式特定的物理R14被设置成改异常模式要返回的地址,对于有些异常模式,R14的值可能与将返回的地址有一个常数的偏移量。
3、程序计数器PC,R15;
由于ARM采用了流水线机制,当正确读取了PC的值时,改值为当前指令地址值加8个字节,其实最终是加8个字节还是12个字节,取决于芯片的流水线级数。
CPU流水线机制如下所述,三级流水机制如下:
ARM9是五级流水线机制:
可见,ARM9和ARM7中都是PC=当前执行指令地址+8的根本的原因是,两者的流水线设计中,指令的执行阶段都是处于流水线的第三级。
4、状态寄存器CPSR:
CPSR可以在任何处理器模式下被访问,它包含了标志位,中断禁止位,当前处理器模式标志以及其他的一些控制和状态位,每一种处理器模式
下都有一个专用的物理状态寄存器称为SPSR(备份状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在
异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。
以下指令会影响CPSR中的条件标志位:
CPSR中的控制位:
1、中断禁止位: I=1时禁止IRQ中断,F=1是禁止FIQ中断;
2、T控制位: T=0表示执行ARM指令;T=1表示执行Thumb指令;
3、M控制位:
三、ARM异常中断的种类:
ARM处理器对应异常中断的响应过程如下所述:
1、保存处理器当前状态,中断屏蔽位以及各条件标志位,这是通过CPSR的内容保存到SPSR寄存器中实现的,各异常中断有自己
的物理SPSR寄存器;
2、设置当前程序状态寄存器CPSR中相应的位,包括CPSR中的位,使处理器进入相应的执行模式,设置CPSR中的为,禁止IRQ中断;
当进入FIQ模式时,禁止FIQ中断;
3、将寄存器ir_mode设置返回地址;
4、将程序计数器PC设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行;
ARM处理器从中断处理程序中返回:
1、恢复被中断的程序的处理器状态,即将SPSR_mode寄存器内容恢复到CPSR中;
2、返回发生异常中断的指令的下一条指令处执行,即把lr_mode寄存器内容复制到程序计数器PC中;
复位异常中断处理程序开始整个用户程序的执行,因而它不需要返回。
四、ARM存储访问:
在ARM中,通常希望字单元的地址是字对齐或者半字单元的地址是半字对齐的,在存储访问操作中,如果存储单元的地址没有遵守上述规则,则成为非对齐的存储访问操作;
1、非对齐的指令预取操作:
当处理器处于ARM状态期间时,如果写到寄存器PC中的值是非对齐的,要么指令执行的结果不可预期,要么地址值中最低两位被忽略;