ARM相关

7种工作模式:
User         用户模式          正常程序执行
FIQ          快速中断模式      高优先级中断
IRQ          外部中断模式      通常中断处理
Surpervisor  管理模式          复位或软中断
Abort        中止模式          存取异常
Undefined    未定义模式        执行未定义指令
System       系统模式          特权级的

寄存器:
ARM有37个寄存器:31个32位通用寄存器,6个状态寄存器(只用12位)。
未分组寄存器R0~R7  是真正的通用寄存器
分组寄存器R8~R14   使用FIQ模式时,访问R8_fiq~R12_fiq
寄存器R13在ARM指令中常用作堆栈指针SP,这是一种习惯用法
R14 作为子程序连接寄存器 当BL指令执行时,R14中得到R15(程序计数器)的备份 其他情况作通用寄存器
R15 程序计数器 ARM状态下:位[1:0]为0,位[31:2]用于保存PC,在Thumb状态下,位[0]为0,位[31:1]用于保存PC
PC总指向正在取指的指令,也就是当前指令的下两条指令的地址,
对于ARM状态,指向当前指令地址值加8个字节的地址
对于Thumb状态,指向当前指令地址值加4个字节的地址

CPSR (Current Program Status Register)
M[4:0] 处理器模式选择
T 处理器工作状态选择,T=1,Thumb状态;T=0,ARM状态
I=1,禁止IRQ中断
F=1,禁止FIQ中断
N:判负标志
Z:判0标志
C:进位标志
V:溢出标志

 
M[4:0]    模式       
10000    User       
10001    FIQ       
10010    IRQ       
10011    Supervisor       
10111    Abort       
11011    Undefined       
11111    System    


humb状态和ARM状态下寄存器的映射
Thumb     ARM
R0~R7     R0~R7
CPSR      CPSR
SPSR      SPSR
SP        R13
LR      R14
PC      R15

异常:
进入异常行为:
1.将下一条指令的地址保存到相应的Link寄存器中(R14),如果是ARM状态进入异常,根据异常状态,数值为当前PC+4或PC+8
2.拷贝CPSR到相应的SPSR
3.根据异常类型强制改变CPSR模式位的值,禁止IRQ,禁止FIQ(这两个在需要时才禁止)
4.令PC的值指向异常处理向量所指的下一指令(执行中断处理程序)

异常返回行为:
1.将Link寄存器减去相应的偏移量,赋给PC
2.拷贝回SPSR到CPSR
3.清除中断禁止标志

每个异常模式对应有两个寄存器R13保存堆栈指针,R14保存返回地址

异常响应过程:
R14_<mode>=return link        //保存返回地址
SPSR_<mode>=CPSR              //拷贝CPSR
CPSR[4:0]=mode number         //改变模式
CPSR[5]=0                     //运行于ARM状态
CPSR[6]=1                     //禁止IRQ中断
if <mode>=Reset or FIQ then   //当Reset或FIQ异常中断时
CPSR[7]=1                     //禁止FIQ中断
PC=exception vector address   //PC转到中断向量地址



异常中断向量:


 
地址    异常    进入模式       
0x0000 0000    复位    管理模式       
0x0000 0004    未定义指令    未定义模式       
0x0000 0008    软件中断    管理模式       
0x0000 000C    预取指中止    中止模式       
0x0000 0010    数据中止    中止模式       
0x0000 0014    保留    保留       
0x0000 0018    IRQ    IRQ       
0x0000 001C    FIQ    FIQ    


ARM中断优先级:
 
优先级    异常       
1    复位       
2    数据中止       
3    FIQ       
4    IRQ       
5    预取指中止       
6    未定义指令,SWI    

ARM中的大端,小端格式
大端格式中,字数据的高字节存储在低地址,低字节存储在高地址



原文地址:https://www.cnblogs.com/qinkai/p/2431526.html