-
ARM是低功耗成本的第一款RISC微处理器。
-
ARM7 冯诺依曼结构,三级流水结构,极低的功耗。移动终端之类的,已经落后了。
ARM9 哈佛结构,五级流水结构,执行效率更高。无线设备,机顶盒,高端打印机、数字照相机摄像机,车载车控。
-
ARM版本
v1-v3是开发和试验版本,功能单一。v4是第一个具有全部正式定义的体系结构,ARM从v4版本开始走向成熟。v5是对v4的扩展。v6强化了图形处理,支持多种版本内核。v7是ARM的极大成功,占据了70%的市场,领先地位。
-
体系结构
冯诺依曼结构是常规的,指令存储器和数据存储器在一起的存储器结构,程序指令和数据的宽度相同
哈佛结构是程序指令存储和数据存储分开的存储结构
-
流水线技术
- 三级流水是指取指、译码、执行三级。
- 五级流水是指取指、译码、执行、存储器访问、寄存器回写五级。
-
多核大小核
多核要关注的两个问题,一是在多任务执行的时候要能够很好的提升产品性能,二是提高电池续航
第一代大小核应该是A57+A53,第二代大小核A75+A55,DynamlQ big.LITTLE
-
处理器模式
用户模式、系统模式、快速中断、外部中断、管理模式、数据访问终止、未定义指令中止。
除开用户模式意外都是特权模式,除开用户和系统意外都是异常模式。
-
处理器工作模式有两种,ARM(字对齐,32位ARM指令)和Thumb(半字对齐,16位Thumb指令),开始执行代码时总是处于ARM状态。
模式切换:
- 执行BX命令,带状态切换的指令,操作数寄存器最低位[0]为1时进入Thumb。
- 工作在Thumb状态,遇到异常进入异常状态,处理完返回时进入Thumb状态。
进入ARM
- 执行BX命令,最低位[0]为0,进入ARM。
- 工作在Thumb状态,发生异常进入异常处理,进入ARM状态。
-
寄存器
-
未分组寄存器:R0-R7,指向同一个物理寄存器。
-
分组寄存器:R8-R14,根据不同处理器模式分组。对应物理寄存器由当前处理器模式决定。
-
R0–R13通用寄存器,不用做特殊用途。
-
R8–R12有两个分组的物理寄存器,一个用于FIQ模式,另一个用于其他模式。
-
R13-R14有六个分组。一个分组用于系统模式和用户模式,剩下五个分别为各自的异常模式。
-
R13也堆栈指针,SP。ARM无特殊指令。
-
R14 链接寄存器 LR
- 模式自身的R14用于保存子程序返回地址
- 异常时,对应的异常版本R14设置为异常返回地址。
-
R15 程序计数器PC
ARM [1:0]为0 [31:2]保存PC
Thumb [0]为0,[31:1]保存PC
-
R16
- CPSR 程序状态寄存器 任何模式均可访问,包括条件标志位,中断禁止位等。
- SPSR 程序状态保存寄存器
进入异常时。SPSR保存CPSR寄存器的值,异常返回后写回。
-
异常(程序的正常执行流程遇到暂时的停止):
- 复位:处理器复位电平有效时,产生复位异常
- 未定义
- 软件中断
- 指令预取中止
- 数据中止
- IRQ(外部中断请求):外部中断请求引脚有效,且CPSR的I位为0,产生IRQ异常,优先级低于FIQ。
- FIQ(快速中断请求)
-
异常流程
- CPSR复制到对应异常的SPSR
- 设置对应异常的CPSR
- 下一条指令地址存入R14
- 强制PC从相关的异常向量取指令执行,从而跳转到相应的异常处理
-
从异常返回
- SPSR的值复制回CPSR
- LR的值减去相应偏移量送回PC
复位异常不用返回。
-
ARM处理器的数据类型一般是三种,字、半字、字节,分别是32位、16位、8位。ARM要求自然对界,字需要四字节对齐,地址的低两位位0;半字则是二字节对齐,地址最低位0;字节可以任意地址对齐。
-
如果一个数据地址是从偶地址开始的连续存储,则是半字对齐,否则就是非半字;如果一个数据地址是从能被4整除的地址开始的连续存储,则是字对齐,否则就是非字对齐。
-
32位微处理器,支持最大寻址为4GB。从0开始的以字节为单位的线性组合,一个字四个位置。大端低地址存放高字节,高地址存放低字节,小段格式相反
-
ARM内核属于RISC结构,指令长度固定,指令格式种类少,寻址简单。
-
寻址方式
-
指令
- LDR 从存储器中将一个32位的数据放入目的寄存器
- LDRB 传送八位的字节数据,并清空高24位
- LDRH 传送16位的半字数据,并清空高16位
- STR 从源寄存器中将32位的子数据传送到存储器中。
- STRB 8位字节数据,源寄存器的低8位。
- STRH 半字数据,源寄存器低16位
分支
- B 跳转
- BL 跳转,跳转前保存当前PC内容到R14
数据处理
- MOV 数据加载 可以将另一个寄存器、被移位的寄存器、立即数加载到目的寄存器。
- CMP 比较寄存器和寄存器或者寄存器和立即数的大小,更新CPSR某些标志位
- TST 按位与运算 检测是否设置了特定位数 寄存器,寄存器/立即数
- TEQ 按位异或运算, 检测两数是否相等
- ADD 两数相加 目的寄存器在前面。
- SUB 减法操作,操作数1-操作数2。操作数一是寄存器,操作数二什么都可以
- AND 两个操作数按位与运算 屏蔽操作数1的某些位
- ORR 两个操作数逻辑或 (寄存器 寄存器/立即数 ),常用于设置操作数一的特定位置。
- EOR 逻辑异或运算, 基本同上,反转某些位。
乘法
状态寄存器访问指令
- MRS 通用寄存器 程序状态寄存器:将程序状态寄存器内容送出
- MSR 对程序状态寄存器进行写入操作。只有这个操作能修改程序状态寄存器、
-
命名规则
ARM {X}{Y}{Z}{T}{D}{M}{I}{E}{J}{F}{S}
x:系列号
y:内部存储/保护单元,一般跟着序列号
T: 支持16位Thumb指令
D:支持JTAG片上调试
M:支持长乘法的ARM指令
I:支持断点和观察点的硬件调试
J:JAVA加速器Jazelle
F:向量浮点单元
S:可综合版本
-
实验代码指令略