ARM处理器的工作状态一般有两种:
1. ARM状态,执行32位的字对齐的ARM指令。PC最后两个bit 0
2. Thumb状态,执行16位的、半字节对齐的Thumb指令。PC值最后1bit 0
存储格式:ARM体系结构可以有两种方法存储数据:大端格式和小端格式。32位的ARM处理器支持4GB的最大寻址空间。
ARM微处理器支持字节(8位)、半字(16位)、字(32位)三种数据类型。其中字需要4字节对齐,半字需要2字节对齐。
工作模式:ARM支持7种工作模式
1. 用户模式(USR) 用于正常执行程序。权限受限
2. 快速中断模式(FIQ)用于高速数据传输。发生高优先级的中断
3. 外部中断模式(IRQ)用于通讯的中断处理。:发生低优先级的中断
4. 管理模式(SVC)复位,SWI指令。
5. 数据访问中止模式(ABT)访问存储器非法情况。
6. 系统模式(SYS) 运行具有特权的操作系统任务。
7. 未定义指令中止模式(UND) 未定义的指令执行时进入该模式。
工作模式的分类:
权限:特权模式:其余6种
非特权模式:用户模式
异常/非异常:
异常模式:管理、快速中断、中断、中止、未定义
非异常:系统、用户
工作模式切换的方式有两种:处理器自动切换、指令切换
处理器自动切换:
发生异常,处理器自动进入到对应的模式
指令切换:
特权模式之间可以随意切换,可以从特权模式切换到用户模式,不能从用户模式切换特权模式,如果用户模式想进入特权模式,可以通过调用SWI指令。
寄存器:ARM处理器有37个32位寄存器,其中31个位通用寄存器,6个为状态寄存器。所有的寄存器对于软件来说,都是没有地址的。
r0-r7各个模式使用相同
r8-r12除去快速中断模式,其它通用
管理模式:r13r14 spsr
快速中断:r8-r14 spsr
中断: r13 r14 spsr
中止: r13 r14 spsr
未定义: r13 r14 spsr
系统/用户: r0-r15 cpsr
R13(SP)栈顶指针寄存器,存放就是内存的地址,栈是内存的一个区域
R14(LR)存放返回地址的寄存器
调用之前LR=Addr;
返回时: PC=LR
R15(PC)取指的指令的地址
执行指令的地址与取指指令的地址相差8个字节(三级流水线)
执行指令的地址=PC-8 (ARM状态)
执行指令的地址=PC-4 (Thumb状态)
1个CPSR,5个SPSR
T: 1 thumb状态 0 ARM 状态
I: 1 禁止IRQ 0 开IRQ
F:1 禁止FIQ 0 开FIQ
SPSR用于备份CPSR的值
进入异常模式下需要备份上一模式的SPSR_mode=CPSR
当异常返回时,恢复上一模式的CPSR=SPSR_mode
分支指令(B BL BX)
B{cond}
跳转范围:PC(new)=PC(当前值)+/-32M
24bit=1bit符号位 + 23bit偏移量(8M)
ARM指令,PC的值是4字节对齐,地址的最后两个bit永为00
用机器指令中的偏移量X4=真正的偏移量
BL指令:调用函数
CPU将BL指令的下一条指令地址保存到LR,跳转到子程序执行,返回时,将LR赋值给PC
BX{cond}
跳转范围限制 :绝对地址、4G范围 0x0000 0000 0xFFFF FFFF
如果指令指定的条件成立则
CPSR的T Flag=Rm[0]
PC = Rm AND 0xfffffffe