转载自http://blog.csdn.net/qqliyunpeng/article/details/48717671
FS4412所处的位置是Cortex-A9
一、3、 8、 7:
1. ARM处理器的 3 种状态
ARM处理器正在运行那种指令,就处在那种状态
(1)ARM状态 --- 运行ARM指令
(2)Thumber状态 --- Thumber指令
(3)Java状态 --- java字节码
2. ARM 有8个基本工作模式
(1)为什么分不同的工作模式
保护和管理资源(工作寄存器)
非特权模式:
User : 非特权模式,大部分任务执行在这种模式
特权模式 :
非异常模式 System : 使用和User模式相同寄存器集的特权模式
异常模式
外部异常
FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
内部异常
Supervisor /svc:当复位或软中断指令执行时将会进入这种模式
Abort : 当存取异常时将会进入这种模式
Undef : 当执行未定义指令时会进入这种模式
Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;
3. 7种异常源
5种异常模式(1)复位异常 ---- SVC 工作模式
(2)软中断异常 ---- SVC 工作模式
(3)IRQ异常 ---- IRQ 工作模式
(4)FIQ异常 ---- FIQ 工作模式
(5)未定义指令异常 ---- undef 工作模式
(6)指令存取异常 ---- abortd 工作模式
(7)数据存取异常 ---- abort 工作模式
异常处理的向量表
(1)放在确切的地址
(2)一共32个字节,对应7种异常发生时跳转的地址,和1种保留
(3)7种异常的相对位置是固定的二、寄存器:
1. ARM工作寄存器
- ARM处理器的运行,需要一组寄存器(工作寄存器)。每种工作模式,都对应一组工作寄存器。
- ARM处理器工作模式的切换,实质是工作寄存器的切换。能公用的保留,不能共用的使用自己模式的寄存器替换。
2. 工作寄存器的总结
①R0-R7 所有的模式都共用
②R8-R12 除了FIQ模式外,其他模式都共用
③R13、R14寄存器 每种模式都是私有
R13 -- sp
R14 -- lr
④R15 所有模式都是共用
R15 -- PC
⑤CPSR -- 所有模式都是共用
⑥SPSR -- 除了user和system模式没有、其他模式都是私有
user和system都是主动进入的,不需要保存SPSR
3. CPSR寄存器 -- 程序状态寄存器
前4后8
前4 条件位 NZCV 表征的是ALU运算结果
N = Negative result from ALU
Z = Zero result from ALU
C = ALU operation Carried out or borrow
V = ALU operation oVerflowed
后8
M[4:0] 处理器模式
T 处理器状态 T=1 thumber状态 T=0 ARM状态
I、F 外部中断的禁止为 写1禁止
4. 程序计数器PC (r15)
PC寄存器存放的是即将运行的指令的地址
三、异常处理的过程:
1. 异常处理
异常处理硬件自动操作:(四大步三小步)
(1)拷贝 CPSR 到 SPSR_<mode>
(2)设置适当的 CPSR 位:
1--改变处理器状态进入 ARM 态
2--改变处理器模式进入相应的异常模式
3--设置中断禁止位禁止相应中断 (如果需要)
(3)保存返回地址到 LR_<mode>
(4)设置 PC 为相应的异常向量
注意是硬件处理,不需要软件实现。
返回时:
回时, 异常处理需要:
从 SPSR_<mode>恢复CPSR
从 LR_<mode>恢复PC
2. 异常处理的向量表
(1)放在确切的地址
(2)一共32个字节,对应7种异常发生时跳转的地址,和1种保留
(3)7种异常的相对位置是固定的
四、字节序:
小端:数据顺时针旋转后放到存储器上,arm是小端存储
0x11223344
大端:逆时针旋转
五、ARM核的结构: