异常向量表可以放在任意位置。
SP r13
LR r14
PC r15
bl:会在LR寄存器保存PC+4。
mov pc,lr >> bx lr
arm保护与恢复现场:利用stack栈指针sp满减
空增(Empty Increment)和空减(Empty Decrement)通常指在栈或队列操作中,指针先移动再执行读写操作。满增(Full Increment)和满减(Full Decrement)则是先执行读写操作,再移动指针
stmfd指令:保存多个寄存器用满减,不加!,入栈后sp不动,stmfd sp!,{r0 - r12,lr}
ldmfd:恢复多个寄存器
import导入.c函数。 export 导出.s函数
参数对应r0 到 r3,结果通过r0返回。当超过4个参数,通过栈传参stmfd sp!,{r4}
CPSR是ARM架构中的当前程序状态寄存器,用于存储处理器的状态和控制信息。其功能包括:
- 条件标志位:N(Negative)、Z(Zero)、C(Carry)、V(Overflow),反映算术或逻辑操作的结果。
- 控制位:
- T位(Thumb状态位):指示处理器处于Thumb(T=1)或ARM(T=0)指令模式。
- I/F位(中断屏蔽位):控制IRQ和FIQ中断的启用(0)或禁用(1)。
- M[4:0](模式位):定义当前处理器模式(如用户模式、IRQ模式等)。
典型模式编码:
- 用户模式(User):
0b10000
- FIQ模式(FIQ):
0b10001
- IRQ模式(IRQ):
0b10010
- 管理模式(Supervisor):
0b10011
mrs:MRS指令用于将特殊寄存器(如CPSR或SPSR)的值读取到通用寄存器中,常用于状态检查或模式切换前的备份。
msr:MSR指令与MRS相反,用于将通用寄存器的值写入特殊寄存器(CPSR/SPSR),通常用于修改处理器状态。
_c
:控制域(低8位,包含模式位和中断屏蔽位)。_x
:扩展域(位8-15)。_f
:标志域(高4位,条件标志位)。
开时钟
功能复用:规定引脚归谁使用。
检测引脚
GPIOx_DR