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位中
preserve8area reset, code, readonlycode32entrystartldr sp, =0x40001000mov r0, #1mov r1, #2mov r2, #3mov r3, #4import c_addbl c_addnopb startexport asm_add
asm_addstmfd sp!, {r4-r12, lr} ; 保护现场add r0, r0, r1ldmfd sp!, {r4-r12, pc} ; 恢复现场end