您的位置:首页 > 其它

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 //调用主程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: