ARM指令集和常用寄存器
1,寄存器寻址
MOV R1, R2 //将寄存器R2的值传给寄存器R1
2,立即寻址
MOV R0, #0XFF00 //数据包含在指令中
3,寄存器偏移寻址
MOV R0, R2, LSL #3 //R2的值左移3位,结果放入 R0中 即 R0 = R2 * 8
LSL逻辑左移、 LSR逻辑右移、 ASL算术左移、 ASR算术右移、 ROR循环右移、RRX带扩展的循环右移
4,寄存器间接寻址
LDR R1, [R2] //将R2中的数值作为地址,取出此地址的数据保存在R1中
SWP R1,R1,[R2] //将R2中的数值作为地址
5,基址寻址 将基址寄存器的内容与指令中给出的偏移量相加,形成有效地址
LDR R2,[R3, #0x0F] //将R3中数值加0x0F作为地址,取出数据保存在R2中
LDR R0, [R1], #-4 //将R1地址单元内容存入R0中,且R1= R1 - 4
STR R1, [R0, #-2] //将R0中数值减2作为地址,
6,多寄存器寻址
LDMIA R1!, {R2-R7, R12} //将R1单元的数据读出到R2-R7,R12中,R1自动加1
STMIA R0!,{R3-R6,R10} //将R3-R6中德数据保存到R0指向的地址,R0自动加1
7,堆栈寻址
满递增 LDMFA STMFA
满递减 LDMFD STMFD
空递增 LDMEA STMEA
空递减 LDMED STMED
8,块拷贝寻址 多寄存器传送指令用于一块数据从存储器的某一位置拷贝到另一位置
STMIA R0!,{R1-R7}
STMIB R0!, {R1-R7}
STMDA
STMDB
9,相对寻址
由程序计数器PC提供基准地址,指令中地址码字段作为偏移量,两者相加都得到的地址即为操作数的有效地址
带S的会影响CPSR寄存器,标志位
R15 为程序计数器PC。
2)ARM存储器访问指令
ARM处理器是加载/存储体系结构的典型RISC处理器,对存储器的访问只能使用加载和存储指令实现。LDR/STR
批量加载和存储指令可实现一条指令加载/存储多个寄存器的内容,大大提高了效率。SWP指令是一条寄存器和存储器
内容交换的指令,可用于信号量操作等。ARM处理器是冯诺依曼存储结构,程序空间、RAM空间及IO映射空间统一编址,
除对RAM操作外,对外围IO、程序数据的访问均要通过加载/存储指令进行。
LDR/STR T为可选后缀,有T表示处理器在特权模式下,使用后缀!表示结果回写。S表示带符号扩展。
B后缀表一个字节, H表示半字(2字节),
程序相对偏移 LDR Rd, label; //label为程序标号,必须是当前指令的+-4KB范围内
1,LDM 和 STM 可以实现一组寄存器和一块连续的内存单元之间传输数据。主要用于现场保护、数据、参数传递等。
IA 传送后地址加4 DA 传送后地址减4
IB 传送前地址加4 DB 传送前地址减4
STMFD R0!,{R0-R7,LR} //现场保存 将R0-R7,LR入栈
LDMFD R1!,{R0-R7,PC} //恢复现场 异常处理返回
2,SWP
寄存器和存储器交换指令,用于将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另
一个寄存器Rm的内容写入到该内存单元中。
SWP R1, R2, [R0] //将R0指向存储单元内容读取一字节到R1中(高24位清零),并将R2内容写入该内存单元
3)ARM跳转指令
B label 跳转指令 Pc<-label 限制在当前指令的+-32KB的范围内
BL label 带链接的跳转指令 LR<- PC-4, PC<- label 用于子程序调用
BX Rm 带状态切换的跳转指令 PC<- label切换状态
4)ARM协处理器指令
1,CDP 通知ARM协处理器执行特定的操作
2,LDC 从某一连续的内存单元将数据读取到协处理器的寄存器中
LDC p5, c2, [R2, #4] //读取R2+4指向内存单元的数据传送到协处理器p5的c2寄存器中
3,STC 将协处理器的寄存器数据写入到某一连续的内存单元中
4,MCR 将ARM处理器的寄存器中的数据传送到协处理器的寄存器中。
5,MRC 将协处理器的寄存器中的数据传送到ARM处理器的寄存器中。
5)ARM杂项指令
SWI immediately——24 软中断指令 处理器进入管理模式
MRS Rd, psr 读状态寄存器指令
MSR psr_fields, Rd/#immed_8r 写状态寄存器指令
6)ARM伪指令
ADR伪指令 小范围的地址读取伪指令,用于将PC相对偏移的地址值读取到寄存器中。
ADRL伪指令 中等范围的地址读取伪指令,用于将PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。
LDR伪指令 大范围的地址读取伪指令,用于加载32位的立即数或一个地址到指定寄存器中。
NOP伪指令 空操作伪指令
ARM汇编程序由机器指令, 伪指令和宏指令组成,伪指令不像机器指令那样在处理器运行期间由机器执行,而是由汇编程序
对源程序处理。
1)符号定义伪指令
GBLA全局的算术变量初始化为0 LCLA 局部的 SETA 赋值
GBLL全局的逻辑变量初始化为false LCLL 局部的 SETL 赋值
GBLS全局的字符串变量初始化空 LCLS 局部的 SETS 赋值
ARM处理器共有 37个寄存器。其中包括:
**31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。
**6
ARM指令集常用寄存 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)