主要整理ARM处理器的七种编程模式。
ARM的基本属性
ARM采用的32位架构;Byte 8bit, HalfWord = 2B=16bits, Word = 32bits=4bits;
七种工作模式
ARM有七种基本工作模式:1个用户模式,6个特权模式(Privilege)。6个特权模式种除了sys之外,其余5种为异常模式; 模式之间可以通过代码(写CPSR寄存器)或者是CPU在某些情况下切换;不同模式下, 可以访问的寄存器(一共37个寄存器)不同。
- User: 非特权模式,大部分任务在这种模式下工作;
- System: 使用和User模式相同寄存器集的特权模式;
- FIQ(Fast Interrupt Request):当一个高优先级中断产生时,会进入该模式;
- IRQ(Interrupt Request):当一个低优先级中断产生时,进入该模式;
- Supervisor: 当复位,或者软中断指令执行时,进入该模式;
- Abort: 当存取异常时,进入该模式;
- Undef: 当执行未定义指令时,进入该模式。
采用如此多模式的原因
这也是软硬件为了笔记兼容,更好工作的结果。操作系统有安全等级,CPU有各种模式,
ARM的37个寄存器
ARM的CPU中一共有37个寄存器。在CPU的七种工作模式,用户模式User和系统模式Sys拥有物理空间上完全相同的寄存器。其他五种特权(异常)模式,都自己独立的寄存器。如下图所示:每种工作模式的黑色部分是通用寄存器,不同的颜色代表不同模式下,独有的寄存器,比如,FIQ的独有寄存器是r8-r14,spsr等。这样做的好处是,当发生异常时,各个模式都保留自己的一些重要数据,使得异常处理程序完成后,返回异常前的程序时不会破坏原有的寄存器状态。 总结一下上图说的寄存器:
- User和Sys拥有的寄存器:r0-r15,CPSR寄存器。
- FIQ:r0-r7是通用的,r8-r14和spsr是该模式特有的。
- IRQ:r0-12是通用的,r13、r14和spsr是该模式固有的。
- SVC:r0-12是通用的,r13、r14和spsr是该模式固有的。
- Undef: r0-r12是通用的,r13、r14和spsr是该模式固有的。
- Abort: r0-r12是通用的,r13、r14和spsr是该模式固有的。
SP(R13),LR(R14),PC(R15),CPSR
**R13(SP):**堆栈指针寄存器,当遇到异常时,程序可以将一般寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的完整性。 **R14:**当通过BL和BLX调用子程序时,硬件自动将子程序返回地址保存在R14中,子程序通过将R14复制到PC来实现返回。 **R15(PC)😗*程序计数器,读取的值是指令的地址加上8个字节;PC指向哪里,CPU就运行哪里;整个CPU只有一个PC。 CPSR程序状态寄存器:
- 28,29,30,31位是条件位:
N:如果结果是有符号的二进制补码下,结果为负数,N=1;如果为非负数,N=0; Z:判断是否为0,如果是结果是0,Z=1;否则N=0; C:进位情况: 对于加法指令,产生进位,则C=1,否则C=0; 对于减法指令,产生借位,则C=0,否则C=1; 对于移位操作,C为最后移除位的值。 V:溢出操作,对于加法指令,在操作数和结果都是有符号整数时,如果发生溢出,则V=1,无溢出,则V=0。 27,Q位:指示饱和状态。 24,J位:J=1,处于Jazelle状态(为Java字节码提供硬件加速的功能,提高了Java代码的执行效率). 7 6,I,F: 中断禁止位: I=1,禁止IRQ,F=1,禁止FIQ。 5,T:T=0,位ARM状态,T=1为Thumb状态。 0-4处理器模式位。 总结:CPSR中各个bit表明了CPU的某些状态信息,这些状态信息和汇编息息相关,下一篇写汇编指令。CPSR中,IF和中断开关有关; SPSR: 程序状态保存寄存器(saved program status register),用于保存CPSR的状态,以便异常恢复后,恢复到以前的状态。
总结
这部分写了,7种工作模式,具体每种模式的工作模式以后遇到了再具体研究,又说了37个寄存器,每种模式对应上面的寄存器,r15固定用作pc寄存器,CPSR是固定的所有模式下共享的寄存器,5个SPSR是五种异常模式下的各自的寄存器。
|