前因后果
上学期教授我微机原理一课的老师,这学期在其他专业讲嵌入式课程,舍友非常喜欢那位老师,可能是害羞也可能是为壮士气于是拉我入伙去旁听 .
ARM的基础知识
ARM的处理器模式
在ARM Cortex-A
/ARMv7-A
系列中有9种Mode,其中实现了安全扩展的处理器才有MON
模式.
模式 | 编码 | 功能 |
---|---|---|
USR(User) | 10000 | 大多数程序运行时的非特权模式 |
FIQ | 10001 | 进入FIQ中断异常 |
IRQ | 10010 | 进入IRQ中断异常 |
SVC/SWI(Supervisor) | 10011 | 管理调用指令被执行或者reset,软中断 |
MON(Monitor) | 10110 | 安全扩展模式 |
ABT(Abort) | 10111 | 存储访问异常 |
HYP | 11010 | 虚拟化扩展 |
UND(Undef) | 11011 | 未定义的指令执行 |
SYS(System) | 11111 | 特权模式,与用户模式共享寄存器 |
ARM寄存器组
R1-R12
是32bit
通用寄存器,并被FIQ
以外的模式共享 .R13(SP)
栈指针、R14(LR)
链接寄存器、R15(PC)
程序计数器 .APSR/CPSR
应用/当前程序状态寄存器 .SPSR
已存储..,相当于CPSR切换模式时的备份 .Thumb
指令只能访问R0-R7
.
CPSR的格式
31 : 27 | 26 : 25 | 24 | 23 : 20 | 19 : 16 | 15 : 10 | 9 | 8 | 7 | 6 | 5 | 4 : 0 |
---|---|---|---|---|---|---|---|---|---|---|---|
N Z C V Q | IT[1:0] | J | Reserved | GE[3:0] | IT[7:2] | E | A | I | F | T | M[4:0] |
- N - ALU负数
- Z - ..零位
- C - ..进位
- V - ..溢出
- Q -
DSP
运算指令溢出 - J - 使用
Jazelle
指令集,用于Java
加速 - GE[3:0] -
SIMD
指令 - IT[7:2] -
Thumb
指令集中if-then
条件执行 - E -
1
大端模式0
小端.. - A - 禁用
ABT
- I - 禁用
IRQ
- F - 禁用
FIQ
- T - 使用
Thumb
指令集 - M[4:0] - 模式编码,指示当前运行模式
- 当前指令集受
J:T
的影响:00-ARM
01-Thumb
10-Jazelle
11-ThumbEE
流水线
在ARM Cortex-A
中使用的是5级流水线 .
Inst Fetch
从
PC
中指向的地址取指令并放入指令寄存器IR
,接着PC+4
指向顺序的下一条指令 ... Decode
对指令进行译码,并用
IR
中的寄存器地址去访问通用寄存器组,读出所需的操作数 .Excute
对不同类型指令进行的响应的执行操作 .
Memory
该周期处理的指令只有
Load、Store
和分支指令
.Load、Store
用于访存读写 .分支指令
将转移目标地址送入PC
,在编写跳转程序时,应合理优化采用延迟转移避免分支预测失败带来的流水线停顿,提高CPU效率 .
Write
将
ALU
运算指令后的结果写入寄存器组 .
仔细
需要指出的是:在此流水线中
Excute
期间执行的指令的地址与PC
所指向的地址间隔8 Byte
.