一、开发工具
1、ADS(ARM Developer Suite):
ARM公司的ARM集成开发环境,包括命令行开发工具、GUI开发环境、支持软件
**注:ADS包括AXD和CodeWarrior,前者用于使用Jtag、HJtag等工具硬件调试程序,后者用于编译代码
2、COdeWarrior的配置要点:
A、
B、
C、
3、AXD的配置要点:
A、
B、
C、
二、ARM基础知识:
1、存储器格式:
大端模式:字数据高字节存储在低地址,低字节存储在高地址
小端模式:字数据高字节存储在高地址,低字节存储在低地址
2、指令长度:
ARM状态:32位
Thumb状态:16位
数据类型:支持字节(8位)、半字(16位)、字(32位)
数据对齐:字 4字节对齐(地址低两位为0);半字 2字节对齐(地址最低两位为0)
3、工作模式:
A、用户模式(usr):正常执行程序
B、快速中断模式(FIQ):高速数据传输
C、外部中断模式(IRQ):通常的中断处理
D、管理模式(svc):操作系统使用的保护模式
E、数据访问种植模式(abt):数据或指令终止时进入该模式,可用于虚拟村吃及存储保护
F、系统模式(sys):运行具有特殊权限的操作系统任务
G、未定义指令终止模式(und):未定义的指令执行时进入该模式,可用于支持硬件
**注: 运行模式可以通过软件或者外部中断或异常处理改变;
BCDEFG模式又称为非用户模式或者特权模式;
除用户模式和系统模以外的模式又称为异常模式
4、寄存器:
A、ARM微处理器有37和32位寄存器,31个通用,6个状态寄存器。
寄存器不能同时访问,不同状态对用不同寄存器;
通用和寄存器R14-R0、程序计数器PC、某状态对应的状态寄存器任何时候可访问;
非用户模式下,可访问特定模式分组寄存器
**注:Rx寄存器和Rx_irq之类的寄存器是不同的寄存器
B、通用寄存器:
R0~R15
R13_svc R13_abt R13_und R13_irq
R14_svc R14_abt R14_und R14_irq
R8_fig~R14_fig
不分组寄存器:R0~R7
分组寄存器:R8~R14
程序计数器:R15(PC)
**注:
R13通常作为堆栈指针SP
R14用作子程序链接寄存器,也称LR,指向函数的返回地址
R15寄存器的值等于当前执行的指令地址+8(多了译码阶段)
C、状态寄存器:
所有工作模式下都可以访问程序状态寄存器CPSR
CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息
CPSR在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR
当异常出现时,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态
D、CPSR/SPSR(同格式):
M0-M4:模式位;
T:工作状态位 【1:Thumb 0:ARM
】
F:FIQ中断禁止位【1:禁止 0:允许】
I:IRQ中断禁止位【1:禁止 0:允许】
bit8-bit27:保留位
//以下为条码标志位
V、OverFlow(溢出等)
C、Carry
Z、Zero
N、Negative
5、ARM寻址方式:
A、寻址的概念:处理器根据指令中给出的地址信息来寻找物理地址的方式。
B、立即寻址(立即数寻址):操作数本身在指令中给出,只要取出指令也就取到了操作;
只要取出指令也就取到了操作数,此操作数被称为立即数,对应的寻址方式叫立即寻址
例如以下指令:
ADD R0,R0,#1 ;R0←R0+1
ADD R0,R0,#0x3f ;R0←R0+0x3f
说明:在以上两条指令中,第二个源操作数即为立即数,要求以
“#”为前缀,对于以十六进制表示的立即数,还要求在
“#”后加上“0x”或“&”。
6、寄存器寻址:
A、概念:利用寄存器中的数值作为操作数
B、特点:各类微处理器经常采用;效率较高的寻址方式
eg: ADD R0,R1,R2 ;R0←R1+R2
说明: 该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中
7、寄存器间接寻址:
A、概念:以寄存器中的值作为操作数的地址,操作数本身存放在存储器中
eg: ADD R0,R1,[R2] ;R0←R1+[R2]
LDR R0,[R1] ;R0←[R1]
说明: 第一条指令中,以寄存器【R2的值作为操作数的地址】,在存储器中取得一个操作数后与R1相加,结果存
入寄存器R0中。
第二条指令将以R1的值为地址的存储器中的数据传送到R0中
8、变址寻址:
A、概念:将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,
从而得到一个操作数的有效地址
eg: LDR R0,[R1,#4] ;R0←[R1+4]
LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+4
LDR R0,[R1] ,#4 ;R0←[R1]、R1←R1+4
LDR R0,[R1,R2] ;R0←[R1+R2]
9、多址寻址:
A、概念:一条指令可以完成多个寄存器值的传送。一条指令完成传送最多16个通用寄存器的值
eg: LDMIA R0,{R1,R2,R3,R4} ;R1←[R0] R2←[R0+4] R3←[R0+8] R4←[R0+12]
说明: 该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,
因此,指令可将连续存储单元的值传送到R1~R4。
10、相对寻址:
A、概念:以程序计数器PC当前值为基地址,指令中地址标号作为偏移量,两者相加得到操作数的有效地址
eg: BL NEXT ;跳转到子程序NEXT处执行
……
NEXT
……
MOPC,LR ;从子程序返回
说明: 上述程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式
11、堆栈寻址:
A、概念:堆栈是一种数据结构,按先进后出的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,
堆栈指针总是指向栈顶。
*递增堆栈:向高地址方向生长
*递减堆栈:向低地址方向生长
*满堆栈:堆栈指针指向最后压入堆栈的有效数据项
*空堆栈:堆栈指针指向下一个要放入数据的空位置
三、ARM指令集与编程
1、跳转指令:
A、用途:实现程序流程的跳转
B、实现方法:
在ARM程序中有两种方法可以实现程序流程的跳转:
-使用专门的跳转指令
-直接向程序计数器PC写入跳转地址值,可实现在4GB的地址空间中的任意跳转;
在跳转之前结合使用MOLR,PC等类似指令,可保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用
C、ARM中的跳转指令:
-ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转
-包括以下4条指令:
B 跳转指令
BL 带返回的跳转指令
BLX 带返回和状态切换的跳转指令
BX 带状态切换的跳转指令
D、ARM跳转指令详解:
-B指令
格式:B{条件} 目标地址 【注意:{}表示条件可有可无】
说明:最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。
eg: B Label ;程序无条件跳转到标号Label处执行
CMP R1,#0
BEQ Label ;当CP
ARM指令
最新推荐文章于 2020-09-19 15:48:28 发布