ARM 产品线:
ARM 体系架构:不同ARM体系采用不同的指令集,哈弗结构是数据和指令分开存储并行(现在都是基于这种结构),早期的冯诺依曼(普林斯顿)结构是混合存储的
ARM系统硬件组成和运行原理:
手机程序存储在FLASH中,板子上电之后CPU会将程序搬到内存中进行执行(提高执行速率)
控制器找到FLASH程序的地址,然后把指令取出来
运算器用于指令的相关运算
寄存器用于临时存放运算的数据
ARM 工作模式:
ARM主要有7个基本工作模式:
User : 非特权模式,大部分任务执行在这种模式(普通用户模式)
FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
Supervisor :当复位或软中断指令执行时将会进入这种模式(超级模式,有更高的访问权限)
Abort : 当存取异常时将会进入这种模式(异常模式,一般接触的少)
Undef : 当执行未定义指令时会进入这种模式
System : 使用和User模式相同寄存器集的特权模式(与User模式相同,只是比User权限更高一点)
ARM 有37个寄存器:
1 个用作PC( Program Counter)(程序计数寄存器)
1个用作CPSR(Current Program Status Register)(状态寄存器:CPU处于哪种状态)
5个用作SPSR(Saved Program Status Registers)(备用的状态寄存器:当切换到其他工作模式时,用来保存当前状态寄存器(CPSR),便于下次切换回来时再将该值赋给CPSR)
30 个通用寄存(临时存放数据的场所)
ARM 工作模式及寄存器框图:(重要)
以下列出了ARM的7中工作模式(其中User和System 基本相同,所以列在一起)
该ARM是32位,所以一个寄存器有4个字节
r0-r7:普通寄存器,用来存放数据
User模式下:r8-r12也是普通寄存器
r15:PC寄存器
r4:存储函数返回地址
r3:栈顶指针(中断时(IRQ)保护现场(进栈)和恢复现场(出栈))
CPSR:当前状态寄存器
没有三角形标注的寄存器为7种工作模式的公用寄存器,有三角形标注的寄存器表示额外多的一份寄存器
搬移指令
mov r1,#3
mov r2,r1
CPSR 寄存器:(当前程序状态寄存器)
条件位:
N = Negative result from ALU
Z = Zero result from ALU
C = ALU operation Carried out or borrow
V = ALU operation oVerflowed
T 位(M[5]) J 位(M[24])
T = 0;J=0 处理器处于 ARM 状态(一条指令占4个字节)
T = 1;J=0 处理器处于 Thumb 状态(一条指令只占2个字节)
中断禁止位:(M[6-7])
I = 1: 禁止 IRQ.
F = 1: 禁止 FIQ
Mode位:处理器模式位(低五位M[0-4]:表示7种模式)
10000 User mode 10011 SVC mode;
10010 IRQ 10001 FIQ mode;
10111 Abort mode 11011 Undfined mode 11111 System mode;
CPSR / SPSR操作指令
mrs r0,CPSR (特殊寄存器操作使用msr。将CPSR的值读到r0寄存器中)
msr CPSR,r0 (特殊寄存器操作使用msr。将r0寄存器中的值赋给CPSR)
.text @文件头
mov r0,#3 @将常数3赋值给r0寄存器
cmp r0,#3 @r0和3的值进行比较(可根据cpsr的高5位判断比较或者计算的结果)
add r1,r0,#5 @将r0+5的值赋给r1
mov r1,r0 @将r0的值赋给r1
mov r3,#0xd0 @将常数0xd0(该常数低5位表示User模式,其余位和cpsr保持一致)
msr cpsr,r3 @将r3的值赋给cpsr寄存器,将状态由Supervisor模式转变为User模式,注意给特殊寄存器赋值要使用msr
mov r3,#0xd3 @常数0xd3的低5位表示Supervisor模式
msr cpsr,r3 @这一步目的是想将r3的值赋给cpsr,从而可以改变当前运行状态,但是状态还是没有改变,因为User模式权限不够,不能改变该寄存器的值,可以通过中断将状态更改为Supervisor模式
swi 1 @软中断,将运行状态从User模式转变为Supervisor模式
.end @文件尾