1.cortex
1. Cortex-A 低功耗 消费类
ARM Cortex-A 系列处理器是一种广泛应用于
移动设备、嵌入式系统和物联网的高效能处理器,因其低功耗和高性能的特点而受到青睐。
2. Cortex-R 实时性
Cortex-R处理器针对高性能实时应用,例如硬盘控制器(或固态驱动控制器)、企业中的网络设备和打印机、消费电子设备(例如
蓝光播放器和媒体播放器)、以及汽车应用(例如安全气囊、制动系统和发动机管理)。
3.Cortex-M 高性能,偏控制
面向各类嵌入式应用的
微控制器内核
2.ARM9
指令集架构(版本): armV4
程序执行的过程: 预取 译码 执行
3.处理器工作模式
1.User:非特权模式,大部分任务执行在这种模式
用户模式
2.FIQ:当一个高优先级(fast)中断产生时会进入这种模式。
快中断
3.IRQ:当一个低优先级(normal)中断产生时会进入这种模式。 慢中断
4.Supervisor:当复位或软中断指令执行时会进入这种模式。
SVC模式 管理模式
5.Abort:当存取异常时将会进入这种模式。
中止模式
6.Undef:当执行未定义指令时会进入这种模式。
未定义
7.System:使用和User模式相同寄存器集的特权模式。
系统模式
Cortex-A特有模式:
Monitor:是为了安全而扩展出的用于执行安全监控代码的模式,也是一种特权模式。
监护模式
4.CPSR 程序状态寄存器
条件位:
N = Negative result from ALU
Z = Zero result from ALU
C = ALU operation Carried out or borrow
V = ALU operation oVerflowed
Q
位:
仅ARM v5TE-J架构支持
指示饱和状态
J
位
仅ARM v5TE-J架构支持
T=0;J = 1
处理器处于
Jazelle
状态
也可以和其他位组合
DNM
位:
Do Not Modify
GE[3:0] 大于或等于(
当执行
SIMD
指令时有效
)
IT[7:2] IF….THEN….指令执行状态位
E
位:
大小端控制位
A位:
A=1
禁止不精确的数据异常
中断禁止位:
I = 1: 禁止 IRQ.
F = 1: 禁止 FIQ
T Bit
T = 0;J=0; 处理器处于 ARM
状态
T = 1;J=0 处理器处于 Thumb
状态
T = 1;J=1 处理器处于 ThumbEE
状态
Mode
位:
处理器模式位
00000 User mode; 10001 FIQ mode; 10011 SVC mode;
10111 Abort mode; 11011 Undfined mode; 11111 System;
10110 Monitor mode;10010 IRQ
5.异常处理
当异常产生时, ARM core:
拷贝 CPSR 到
SPSR_<mode>
设置适当的 CPSR 位:
改变处理器状态进入 ARM 态
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断 (如果需要)
保存返回地址到 LR_<mode>
设置 PC 为相应的异常向量
返回时,
异常处理需要:
从 SPSR_<mode>恢复
CPSR
从LR_<mode>恢复
PC
Note:这些操作只能在 ARM
态执行
6.ARM汇编语言程序格式
ARM汇编语言是以段
(section)
为单位来组织源文件的。段是相对独立
的、具有特定名称的、不可分割的指令或者数据序列。
段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代
码运行时需要用到的数据。一个
ARM
源程序至少需要一个代码段,大的程
序可以包含多个代码段和数据段。
ARM指令集可以分为六大类
1.分别为数据处理指令 (
完成
CPU
内部的计算)
2. Load/Store指令 (
完成
CPU
与内存
IO
外设之间的数据传输)
3. 跳转指令 (
完成程序的跳转)
4. 程序状态寄存器处理指令 (
完成
CPSR
的管理
)
5. 协处理器指令 (
完成
CPU
扩展功能的实现
)
6. 异常产生指令 (
用户程序异常触发
)
函数传参规则:
4个以内:r0~r3
大于4个的使用栈传递
返回值: r0
立即数: 一个数(或其按位取反后)循环右移偶数位后所有的1能放进低8位中
preserve8
area reset, code, readonly
code32
entry
start
ldr sp, =0x40001000
mov r0, #1
mov r1, #2
mov r2, #3
mov r3, #4
import c_add
bl c_add
nop
b start
export asm_add
asm_add
stmfd sp!, {r4-r12, lr} ; 保护现场
add r0, r0, r1
ldmfd sp!, {r4-r12, pc} ; 恢复现场
end