1, ARM mode
ARM cores are divided in lastest versions to three main lines:
§ Cortex-M cores, used for really small devices, usually with on-chip memory and simpler operations
§ Cortex-R cores, used for real-time devices
§ Cortex-A cores, used for applications in multifunctional devices like smartphones, TVs or maybe computers.
For example:
ARM architecture: ARMv8-A
ARM core: Cortex-A53
ARM CPU: 8894..
2,ARM 七中模式
ARMv4以上版本的CPU任何时刻必定处于如下7种执行模式之一:
(1) User Mode:用户模式。操作系统的Task一般以这种模式执行。User Mode是ARM唯一的非特权模式,这表示如果CPU处于这种模式下,很多指令将不能够执行,因此操作系统的资源得以保护。 (LINUX用户空间进程在这种模式)
(2) System Mode:这是V4及其以上版本所引入的特权模式。、
(3) IRQ Mode:中断模式。中断(不包括软中断)处理函数在这种模式下执行。
(4) FIQ Mode:快速中断模式。除了多了几个寄存器外,其他同IRQ一样。
(5) Supervisor Mode:监视模式。软中断(SWI)处理函数在这种模式下执行。(linux内核空间在这种模式下运行)
(6) Abort Mode:所有同内存保护相关的异常均在这种模式下执行。
(7) Undefined Mode:处理无效指令的异常处理函数在这种模式下执行。
(1) User Mode:用户模式。操作系统的Task一般以这种模式执行。User Mode是ARM唯一的非特权模式,这表示如果CPU处于这种模式下,很多指令将不能够执行,因此操作系统的资源得以保护。 (LINUX用户空间进程在这种模式)
(2) System Mode:这是V4及其以上版本所引入的特权模式。、
(3) IRQ Mode:中断模式。中断(不包括软中断)处理函数在这种模式下执行。
(4) FIQ Mode:快速中断模式。除了多了几个寄存器外,其他同IRQ一样。
(5) Supervisor Mode:监视模式。软中断(SWI)处理函数在这种模式下执行。(linux内核空间在这种模式下运行)
(6) Abort Mode:所有同内存保护相关的异常均在这种模式下执行。
(7) Undefined Mode:处理无效指令的异常处理函数在这种模式下执行。
如果将User Mode作为参考模式,那么:
(1) System Mode:寄存器一样,仅仅是权限不同
(2) 其他Exception Mode:寄存器不一样,权限也不一样
(1) System Mode:寄存器一样,仅仅是权限不同
(2) 其他Exception Mode:寄存器不一样,权限也不一样
3,ARM相关指令学习
4
FP = 11
SP = 13
LR = 14
PC = 15
SP = 13
LR = 14
PC = 15
5,
ARM的七种异常
· 复位异常:1)当内核的nRESET信号被拉低时,ARM处理器放弃正在执行的指令,当nRESET信号再次变高时,ARM处理器进行复位操作; 2)系统复位后,进入管理模式对系统进行初始化,复位后,只有PC(0x00000000)和CPSR(nzcvqIFt_SVC)的值是固定的,另外寄存器的值是随机的
· IRQ异常:1)当CPSR中的相应的中断屏蔽被清除时,内核的nIRQ信号被拉低时可产生IRQ异常; 2)由于ARM处理器的三级流水线结构,当异常发生时,PC的值等于当前执行指令的地址+8(即正确的中断返回地址+4),因此R14保存的值是 中断返回地址+4 ,所以当异常要返回时须执行以下指令: SUBS PC,R14_irq,#4 ;PC=R14 - 4 注意:在SUB指令尾部有个S,并且PC是目标寄存器,所以程序返回时CPSR将自动从SPSR寄存器中恢复; 3)将用户模式下的CPSR保存到SPSR_irq中; 4)设置PC为IRQ异常处理程序的中断入口向量地址,在IRQ模式下该向量地址为0x00000018。。
· 未定义指令异常:(1)当ARM在对一条未定义指令进行译码时,发现这是一条自己和系统内任何协处理器都无法执行的指令时,就会发生未定义指令异常; (2)由于是在对未定义指令译码时发生异常,所以PC的值等于未定义指令的地址+4(即刚好为中断返回地址),因此R14保存的值是 中断返回地址 ,所以当异常要返回时可执行以下指令: MOVS PC,R14_und
· Abort异常:中止表示当前存储器的访问不能完成,是由外部的ABOUT输入信号引起的异常,分为两类:
o 预取指中止:由程序存储器引起的中止异常;
§ 当程序发生预取指中止时,ARM内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才进入异常,因此当前PC的值为当前执行指令的地址+8(即正确的中断返回地址+4),因此R14保存的值是 中断返回地址+4 ,所以当修复了产生中止的原因后,不管在什么操作状态,处理器都会执行以下指令: SUBS PC,R14_abt,#4 ;PC=R14 - 4
o 数据中止:由数据存储器引起的中止异常
§ 当发生数据中止异常时,异常会在“导致异常的指令”执行后的下一条指令时才发生,因此当前PC的值为“导致异常的指令”执行后的下一条指令的地址+8(即正确的中断返回地址+8),因此R14保存的值是 中断返回地址+8,所以当修复了产生中止的原因后,不管在什么操作状态,处理器都会执行以下指令: SUBS PC,R14_abt,#8 ;PC=R14 - 8