ARM基本指令
2012-04-07 12:17
232 查看
伪指令:
ENTRY 伪指令用于指定汇编程序的入口点。在一个完成的汇编程序中至少要有一个ENTRY,但在一个源文件里最多只能有一个ENTRY(也可以没有)。
AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需要”|”括起来i,如|1_test|。
EQU伪指令用于为程序中的常量,标号等定义一个等效的字符名称,类似于C语言中的#define。 名称
EQU表达式{,类型}
END伪指令用于通知编译器已经到了源程序的结尾。
加载/存储指令:
LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。 LDR{条件}目的寄存器,<存储器地址>
例子:
LDR
r0,=0x56000054 //将地址0x56000054存放到寄存器r0中
LDR r2, =SDRAM_BASE //参看sdram试验代码,结合
.equ SDRAM_BASE, 0x30000000 //语句,是将0x30000000这个地址(也是个32位的字数据)放到r2寄存器中
LDR PC, =on_sdram //跳到SDRAM中继续执行
LDR r0,0x56000054 //将内存0x56000054地址中存储的数据搬到r0寄存器中
STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。 STR{条件}源寄存器,<存储器地址>例子:
LDR R0,=0x56000054 //R0设为GPBDAT寄存器。此寄存器用于读/写端口B各引脚的数据
MOV R1,#0x00000000 //此值改为0x00000010,可让LED1熄灭
STR R1,[R0] //GPF4输出0,LED1点亮,将R1中的数据0x0000000存放到寄存器R0中
数据处理指令:
MOV指令可完成从另外一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时,指令不更新CPSR中条件标志位的值。 MOV{条件}{S}目的寄存器,源操作数。例如:
MOV PC,LR //将寄存器LR的数据传送到PC(R15)寄存器中
CMP指令用于吧一个寄存器的内容和另外一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。 CMP{条件}操作数1,操作数2
跳转指令:
B指令是最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。例子:
halt_loop: //这两句意思是一致跳转下去。。死胡同
b halt_loop //跳转到halt_loop程序段
BL是另外一个跳转指令,但跳转之前,会在寄存器R14种保存PC的当前内容,因此,可以通过R14的内容重新加载到PC中来返回到跳转指令之后的那个指令处执行。该指令的实现程子程序条用的一个基本但常用的手段。
bl main //调用主程序
ENTRY 伪指令用于指定汇编程序的入口点。在一个完成的汇编程序中至少要有一个ENTRY,但在一个源文件里最多只能有一个ENTRY(也可以没有)。
AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需要”|”括起来i,如|1_test|。
EQU伪指令用于为程序中的常量,标号等定义一个等效的字符名称,类似于C语言中的#define。 名称
EQU表达式{,类型}
END伪指令用于通知编译器已经到了源程序的结尾。
加载/存储指令:
LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。 LDR{条件}目的寄存器,<存储器地址>
例子:
LDR
r0,=0x56000054 //将地址0x56000054存放到寄存器r0中
LDR r2, =SDRAM_BASE //参看sdram试验代码,结合
.equ SDRAM_BASE, 0x30000000 //语句,是将0x30000000这个地址(也是个32位的字数据)放到r2寄存器中
LDR PC, =on_sdram //跳到SDRAM中继续执行
LDR r0,0x56000054 //将内存0x56000054地址中存储的数据搬到r0寄存器中
STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。 STR{条件}源寄存器,<存储器地址>例子:
LDR R0,=0x56000054 //R0设为GPBDAT寄存器。此寄存器用于读/写端口B各引脚的数据
MOV R1,#0x00000000 //此值改为0x00000010,可让LED1熄灭
STR R1,[R0] //GPF4输出0,LED1点亮,将R1中的数据0x0000000存放到寄存器R0中
数据处理指令:
MOV指令可完成从另外一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时,指令不更新CPSR中条件标志位的值。 MOV{条件}{S}目的寄存器,源操作数。例如:
MOV PC,LR //将寄存器LR的数据传送到PC(R15)寄存器中
CMP指令用于吧一个寄存器的内容和另外一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。 CMP{条件}操作数1,操作数2
跳转指令:
B指令是最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。例子:
halt_loop: //这两句意思是一致跳转下去。。死胡同
b halt_loop //跳转到halt_loop程序段
BL是另外一个跳转指令,但跳转之前,会在寄存器R14种保存PC的当前内容,因此,可以通过R14的内容重新加载到PC中来返回到跳转指令之后的那个指令处执行。该指令的实现程子程序条用的一个基本但常用的手段。
bl main //调用主程序
相关文章推荐
- ARM 最基本指令运算
- ARM 最基本指令运算
- ARM汇编编程基础(二) -- 基本寻址方式与基本指令
- ARM汇编编程基础之三 —— 基本寻址方式与基本指令
- ARM学习笔记(九)--指令基本格式
- ARM汇编编程基础(二) -- 基本寻址方式与基本指令
- ARM汇编编程基础之三 —— 基本寻址方式与基本指令
- ARM汇编编程基础(二) -- 基本寻址方式与基本指令
- arm的寄存器以及基本指令介绍
- ARM汇编编程基础之三 —— 基本寻址方式与基本指令
- 简图记录-ARM汇编基础(基本指令、伪指令、协处理器指令)
- arm 指令介绍
- ARM中指令的学习和分析(用法、格式以及英文全称)
- arm汇编指令理解
- ARM平台下bl和ldr指令的区别
- 【AngularJS: Up & Running】第02章_基本的AngularJS指令及控制器
- 黑马程序员-----预处理指令的基本概念
- git 基本操作指令
- vue 指令基本使用
- ARM指令集中的跳转指令