第一章:ARM概述及其基本编程模型
1.4 arm处理器模式
arm体系结构支持7中处理模式。
用户模式 (usr) 正常程序执行的模式
快速中断模式(fiq) 用于高速数据传输和通道处理
外部中断模式(irq) 用于通常的中断处理
特权模式(svc) 供操作系统使用的一种保护模式
数据访问中止模式(abt) 用于虚拟存储及存储保护
未定义指令中止模式(und) 用于支持通过软件仿真硬件的协处理器
系统模式(sys) 用于运行特权级的操作系统任务
备注:除用户模式为,其他的六种模式成为特权模式,而除系统模式外,剩下的五种模式又成为异常模式。每种异常模式都有特定的2个寄存器,用来保存特定异常模式的状态信息。
1.5 arm共有37个寄存器,可以分为两类:
1、通用寄存器31个
R0~R7共8个未分组寄存器,所有处理模式下都是同一个物理寄存器。
R8~R14有两个分组,一个分组为R8~R12,为fiq模式单独用了5个寄存器,故有10个寄存器。
另一个分组为R13~R14分组寄存器,5(异常模式)x2+2(用户模式和系统模式共用)共12个寄存器。
R13和R14都有特定的用途。一般R13用作堆栈指针。R14用作连接寄存器,保存子程序或者异常返回地
址,当然也可以当做通用寄存器。
R15为程序计数器,即PC。当向R15写入正常的地址时,程序将转向该地址并执行。注:由于arm指令是字对齐的,而存储结构中是按照字节存储的,也就是存储中的每一位代表一个字节,故要求写入R15的地址应该为4的倍数,也就是要求bits[1:0]=0b00。
2、状态寄存器6个
CPSR,7种模式共用,保存当前程序的状态信息。包括条件标志位、中断禁止位、当前处理器模式标志以及其他一些控制和状态位。
SPSR,5种异常模式各有一个专用的备份程序状态寄存器。当特定的异常中断发生时,用来保存CPSR中的内容,直到退出异常程序,再将保存的内容恢复到CPSR中。
关于状态寄存器的状态信息:
1、bits[31:28],条件标志位,分别保存N(表示结果正负)、Z(表示结果是否为零,CMP指令,=1表示相等)、C(进/借位标志,受加/减运算影响)、V(表示符号溢出,受加/减运算影响)
2、bit[27],Q标志位,在E系列处理器中表示增强的DSP指令是否发生溢出。
3、bits[7:0],控制位,分别为I(IRQ中断控制)、F(FIQ中断控制)、T(Thumb指令控制)、M[4:0](处理器模式控制)
1.6 arm异常中断
arm共有7种异常中断,包括复位、未定义指令、软件中断、预取指令中断、数据访问中止、外部中断、快速中断。
异常中断响应过程:
1、保存CPSR到将要执行的相对应SPSR中。
2、重新设置CPSR相应位,使处理器进入相应的中断模式。
3、将相应的链接寄存器LR_mode设置为返回地址。
4、将PC设置为异常中断的中断向量地址,及跳转到异常中断程序中去执行。
5、将SPSR内容送CPSR,将LR_mode送PC。
1.7 arm体系中存储系统
arm存储以字节为单位,地址空间为2^32个字节共4G空间。
arm存储格式有小端结尾(低字节存储在低位,即由小到大)、大端结尾(最高字节存储在低位,即由大到小)。
arm存储访问由对齐访问和非对齐访问。
第二章 ARM指令分类及寻址方式
2.1arm指令概述
arm指令共6种,分为:跳转指令、数据处理指令、程序状态传输指令、Load/Store指令、协处理器指令、异常中断指令
arm指令长度固定为一个字长,即32位。
典型的arm指令编码格式为
典型的arm指令语法格式为:
<opcode> {<cond>} {s} <Rd>, <Rn>, <shifter_operand>
其中:<opcode> 指令助记符,如ADD表示算术加操作指令
{<cond>} 表示指令执行条件,大括号表示可选
{S} 指令操作是否影响标志位
<Rd> 表示目标寄存器
<Rn> 表示第1个操作数的寄存器
<shifter_operand> 表示第2个操作数
arm指令条件码域
2.2 arm指令寻址方式
1. 寄存器寻址:
MOV R1,R2 ;读取R2的值到R1中
SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0中
2.立即寻址:
SUBS R0,R0,#1 ;R0减1,结果保存到R0中,并影响标志位
MOV R0,#0xFF000 ;将0xFF000存储到R0中
3. 寄存器移位寻址:
MOV R0,R2,