ARM处理器工作模式
Cortex-A系列的8种工作模式,比起Cortex-M系列多了monitor模式
只需掌握用户模式、一般中断模式、管理模式
异常源
不同的异常源会进入不同的工作模式
- FIQ异常 => FIQ模式
- IRQ异常 => IRQ模式
- Prefetch、Data异常 => 中止模式
- Undef => 未定义指令中止模式
- SWI、reset异常 => 管理模式
ARM寄存器
- R8-R14对于另外6种异常模式有不同的含义,和系统/用户模式下的可能不一样(根据图中的三角标志区分)
- SPSR针对不同的异常有不同的状态含义
- 未分组寄存器R0-R7:所有模式下指向同一个寄存器,在切换模式的时候要注意这部分寄存器的数据保护
- 分组寄存器R8-R14:对应的物理寄存器与所处模式有关,采用_mode来区分不同的寄存器
- 堆栈寄存器R13(SP):堆栈指针,用来指向不同模式下的栈空间
- R14(LR)链接寄存器:当进行子程序跳转时,R14保存PC的值,在执行完子程序后,通过读取R14的值来返回原来的程序位置。
- R15(PC)程序计数器:PC值 = 当前程序执行位置 + 8 (多级流水线技术)
- CPSR:当前程序状态寄存器,存储了一些信息:主要包括处理器模式、处理器状态、中断禁止位、条件位
- SPSR:备份的程序状态寄存器,当异常发生时,保存当前CPSR的值,从异常退出后用SPSR恢复CPSR
协处理器
ARM体系结构通过协处理器来扩展指令集,最常用的协处理器是用于控制片上功能的系统协处理器。
如控制Cache和存储管理单元MMU的CP15协处理器、设置异常向量表地址的mcr指令。
指令流水线
3级流水线:取值、译码、执行
因此正在执行的指令其实是PC-8(对于32位机,一条指令是32位/4字节),间隔两个字节,每个周期同时进行一条指令的执行、下一条指令的译码、下下条指令的预取。
理想的最佳流水线如图:在第一个时间周期,完成了ADD指令的执行、SUB指令的译码、ORR指令的取指
还有LDR流水线(从外存中取数据)、分支流水线、中断流水线
都不是理想的流水线、存在一些周期完成一些特定的任务,如保护现场、保存R14、CPSR->SPSR等。