arm概述及其基本编程模型
arm体系结构的版本及命名方法
arm体系统构的6个版本的特点
arm体系的变种
1 thumb指令集(t变种)
2 长乘法指令(M变种)
3 增强型dsp指令(E变种)
4 java加速器jazelle(J变种)
5 arm媒体功能扩展(SIMD变种)
arm/thumb体系版本的命名格式
1 字符串ARMv
2 ARM指令的版本号 1-6
3 表示变种的字符 版本4之后M变种成为标准功能,不需要列出来
4 使用x表示排除某种写功能
arm处理器系列
arm7
arm9
arm9e
arm920T ARM922T ARM9440T
arm10e
securCore
intel的Xscale
intle的StrongARM
ARM处理器模式
7种运行模式
用户模式(User,usr) 正常程序执行的模式
快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理
外部处理中断模式(IRQ,irq) 用于通常的中断处理
特权模式(Supervisor,sve) 供操作系统使用的一种保护模式
数据访问中止模式(Abort,abt) 用于虚拟存储及存储保护
未定指令中上模式(Undefine,und) 用于支持通过软件方针硬件的协处理器
系统模式(System,sys) 用于运行特权级的操作系统任务
各种处理模式下的寄存器
工作模式可以通过软件改变,也可以通过外部中断或异常处理改变
用户模式以外的模式称为非用户模式,特权模式(privileged modes)
用户模式和系统模式以外的模式称为异常模式(exception modes)
arm寄存器介绍
arm共有37个寄存器
31个通用寄存器
分为以下三类:
未备份寄存器(the unbanked registers) r0-r7
指的都是同一个物理寄存器
任何采用通用寄存器的应用的场合都可以使用
备份寄存器(the banked registers) r8-r14
r8-r12每个寄存器对应两个不同的物理寄存器
r13-r14每个寄存器对应6个不同的物理寄存器,一个是用户模式和系统模式共用,另外5个对应于其他5种处理模式,使用R13_来区分物理寄存器
mode可以是以下几种模式:usr svc abt und irq和fiq
r13常用作栈指针sp
r14又被称为连接寄存器lr,两种特列的作用
存入当前程序的返回地址
示例代码:
MOV PC ,LF
BX LR
在子程序入口使用下面的指令将PC保存到栈中
STMFD SP! ,{,IR}
子程序返回
LDMFD SP!,{,PC}
当异常中断发生时,设置成该异常模式将要返回的地址
程序计数器PC r15
pc 指向当前指令的下两条指令的地址,第0位和第1位总为0
尽量避免使用STR/STM指令来保存R15
6个状态寄存器
CPSR(当前状态寄存器),可以在任何处理模式下被访问
每一个处理模式下都有一个物理状态寄存器(用户模式和异常中断模式除外),SPSR(备份程序状态寄存器),在特定的异常驻中断发生时,存放当前状态寄存器的内容.
cpsr的格式如下:
31 30 29 28 27 26 7 6 5 4 3 2 1 0
N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1 M0
条件标志位
N(negative) z(zero) c(carry) v(overflow)
arm指令根据cpsr中的条件标志位来选择性的执行,
影响条件标志位的指令
比较指令 cmp cmn teq tst
算术指令和逻辑指令的目标寄存器不是r15时
msr指令可以向cpsr/spsr中写入新值
ldm指令的变种可以将spsr的值复制到cpsr中
一些带"位设置"的算术和逻辑指令的变种
Q标志位
用于指示增强的dsp指令是否发生了溢出
cpsr的bit[27]
spsr的bit[27]
arm v5以前或非e系列的处理器,q标志位没有被定义
cpsr中的控制位
cpsr的低8位I F T M[4:0]
中断禁止位
当I=1时禁止IRQ中断
当F=1时禁止FIQ中断
T控制位用于控制指令的执行状态(说明本指令是arm指令还是thumb指令)
arm v4 t系列
T=0 表arm指令
T=1 表thumb指令
arm v5 非t系列
t=0 表arm指令
t=1 表强制下一条执行的指令产生未定义指令中断
M控制位 控制处理器模式
M[4:0] 处理器模式 可以访问的寄存器
0b10000 user pc r14-r0 cpsr
0b10001 fiq pc r14_fiq-r8_fiq r7-r0 cpsr spsr_fiq
0b10010 irq pc r14_irq-r13_irq r12-r0 cpsr spsr_irq
0b10011 supervisor pc r14_svc-r13_svc r12-r0 cpsr spsr_svc
0b10111 abort pc r14_abt-r13_abt r12-r0 cpsr spsr_abt
0b11011 undefined pc r14_und-r8_und r12-r0 cpsr spsr_und
0b11111 system pc r14-r0 cpsr
arm体系的异常中断
arm体系有三种方式控制程序的执行流程
1 正常程序执行过程中,每执行一条arm指令,程序计数寄存器(pc)的值加4个字 节;执行一条thumb指令,加两个字节
2 通过跳转指令,跳到特定的地址标号处执行,或特定子程序执行,
b指令执行跳转操作
bl指令执行跳转,保存子程序的返回地址
bx指令执行跳转,根据目标地址的最低位可以将程序状态切换到thumb状态
blx是以上两个指令的叠加