ARM模式
类别 |
M[4:0] |
处理器模式 |
描述 |
|
0b10000 |
用户模式usr |
正常程序执行模式 |
|
0b11111 |
系统模式sys |
运行特权级的操作系统任务 |
异 常 模 式 |
0b10011 |
特权模式sve |
供操作系统使用的保护模式 |
0b10001 |
快速中断模式fiq |
用于高速数据传输和通道处理 |
|
0b10010 |
外部中断模式irq |
用于通常的中断处理 |
|
0b10111 |
数据访问中止模式abt |
用于虚拟内存及存储保护 |
|
0b11011 |
未定义中止模式und |
用于支持通过软件方针硬件的协处理器 |
ARM寄存器
共有37个寄存器,且都是32位的,其中6个状态寄存器只用了前12位。
通用寄存器:
8个未备份寄存器:R0~R7,可以在任何处理器模式下被访问。
22个备份寄存器:R8~R14,其中,R8~R12对应两个不同物理寄存器,R13和R14每个寄存器对应6个不同的物理寄存器。
R13通常做栈指针:每种异常模式发生时,应用程序初始化其R13,使其指向该异常模式的专用栈地址。进入异常模式时,可以将需要的相应寄存器保存在R13所指向的栈中;当退出异常模式时,R13所指向的栈弹出寄存器值。这样就不会使异常处理程序损坏中断处理运行现场。
R14通常做连接寄存器LR:子程序的返回(R14存储当前子线程的返回地址);异常模式的返回(R14存储该异常模式的返回地址)
1个程序寄存器R15--PC:ARM是字对齐的,PC的0和1位总为0;对于ARM指令集,PC指向当前指令的下两条指令地址; ARM采用流水线机制,当读取了PC值后,该值为当前指令地址加8字节。
程序状态寄存器:
CPRS(当前程序状态寄存器)可以在任何处理器模式下被访问;每一种异常处理模式下都有一个专用的物理状态寄存器SPSR(备份程序状态寄存器:当特定的异常中断发生时,用于存放当前CPRS的内容,异常中断程序退出时,SPSR负责恢复CPRS)。
N-negative,Z-zero,C-carry,V-overfollow四个统称为条件标志位。
Q标志位主要用于指示增强的DSP指令是否发生了溢出。
I,F,TM[4:0]统称为控制位。
其他位则用于将来ARM的扩展。
各种处理器模式下的寄存器:
Usr |
sys |
sve |
fiq |
irq |
abt |
und |
R0~R7 |
R0~R7 |
R0~R7 |
R0~R7 |
R0~R7 |
R0~R7 |
R0~R7 |
R8~R12 |
R8~R12 |
R8~R12 |
R8_fiq~R12_fiq |
R8~R12 |
R8~R12 |
R8~R12 |
R13~R14 |
R13~R14 |
R13_sve~R14_sve |
R13_fiq~R14_fiq |
R13_irq~R14_irq |
R13_abt~R14_abt |
R13_und~R14_und |
R15(PC) |
R15(PC) |
R15(PC) |
R15(PC) |
R15(PC) |
R15(PC) |
R15(PC) |
CPRS |
CPRS |
CPRS(SPSR_sve) |
CPRS(SPSR_fiq) |
CPRS(SPSR_irq) |
CPRS(SPSR_abt) |
CPRS(SPSR_und) |
ARM异常中断:
ARM体系控制程序执行流程方法:
1、 异常中断:异常中断发生时,保存被中断程序运行现场并跳转到相应的异常中断处理程序,中断异常程序完成后恢复被中断程序的运行现场。
2、 跳转指令:即B,BL,BX,BLX的操作。
3、 正常执行:每执行一条ARM指令,PC值加4个字节;每执行一条Thumb指令,PC值加2个字节。
中断种类:
参考此文,自己补全,将#换成.,http://blog#chinaunix#net/uid-28458801-id-3780127#html
对异常中断的响应过程:
1.1将CPSR内容复制到SPSR_mode中(保存处理器当前状态、中断屏蔽位、各条件标志位),并设置CPSR中相应的位,其中之一就是设置F或者I位为1,以禁止FIQ或者IRQ中断。
1.2寄存器lr_mode设置成返回地址,并将寄存器PC设置成该异常中断的中断向量地址。
2、跳转到中断处理程序执行过程后完成。
3.1恢复寄存器CPSR(用SPSR_mode恢复)。
3.2将寄存器lr_mode内容复制到寄存器PC中
4、复位异常程序执行后即开始了原先正常程序执行。
参考文档:
《ARM体系结构与编程》 杜春雷