ARM基本指令

25 篇文章 1 订阅

伪指令

ENTRY 伪指令用于指定汇编程序的入口点。在一个完成的汇编程序中至少要有一个ENTRY,但在一个源文件里最多只能有一个ENTRY(也可以没有)。

AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需要”|”括起来i,如|1_test|

EQU伪指令用于为程序中的常量,标号等定义一个等效的字符名称,类似于C语言中的#define。   名称 EQU表达式{,类型}

END伪指令用于通知编译器已经到了源程序的结尾。

加载/存储指令

LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。  LDR{条件}目的寄存器,<存储器地址> 例子:

  1. LDR
  2. r0,=0x56000054 //将地址0x56000054存放到寄存器r0中
  3. LDR r2, =SDRAM_BASE //参看sdram试验代码,结合
  4. .equ SDRAM_BASE, 0x30000000 //语句,是将0x30000000这个地址(也是个32位的字数据)放到r2寄存器中
  5. LDR PC, =on_sdram //跳到SDRAM中继续执行
  6. LDR r0,0x56000054 //将内存0x56000054地址中存储的数据搬到r0寄存器中

STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。   STR{条件}源寄存器,<存储器地址>例子:

  1. LDR R0,=0x56000054       //R0设为GPBDAT寄存器。此寄存器用于读/写端口B各引脚的数据
  2. MOV R1,#0x00000000       //此值改为0x00000010,可让LED1熄灭
  3. STR  R1,[R0]             //GPF4输出0,LED1点亮,将R1中的数据0x0000000存放到寄存器R0中

数据处理指令

MOV指令可完成从另外一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时,指令不更新CPSR中条件标志位的值。   MOV{条件}{S}目的寄存器,源操作数。例如:

MOV PC,LR //将寄存器LR的数据传送到PCR15)寄存器中

CMP指令用于吧一个寄存器的内容和另外一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。   CMP{条件}操作数1,操作数2

跳转指令:

 B指令是最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。例子:

  1. halt_loop:                                                 //这两句意思是一致跳转下去。。死胡同
  2.                  b  halt_loop                              //跳转到halt_loop程序段

 BL是另外一个跳转指令,但跳转之前,会在寄存器R14种保存PC的当前内容,因此,可以通过R14的内容重新加载到PC中来返回到跳转指令之后的那个指令处执行。该指令的实现程子程序条用的一个基本但常用的手段。

  1. bl  main  //调用主程序

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值