常用的汇编指令介绍

2020-03-26来源: eefocus关键字:汇编指令  寄存器  ARM

注意:此文档会根据学习过程中遇到的ARM汇编指令,持续更新。


LDR汇编指令:


LDR指令的格式为:

LDR{条件}  目的寄存器,<存储器地址>

LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器

中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,

指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设

计中比较常用,寻址方式灵活多样,请读者认真掌握。


指令示例:

LDR R0,[R1]                  //将存储器地址为R1的字数据读入寄存器R0。

LDR R0,[R1,R2]              //将存储器地址为R1+R2的字数据读入寄存器R0。

LDR R0,[R1,#8]               //将存储器地址为R1+8的字数据读入寄存器R0。

LDR R0,[R1,R2]!            //将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。

LDR R0,[R1,#8]!             //将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。 

LDR R0,[R1],R2              //将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。

LDR R0,[R1,R2,LSL#2]!      //将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。

LDR R0,[R1],R2,LSL#2      //将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。


ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。  

比如想把数据从内存中某处读取到寄存器中,叧能使用ldr 

比如: 

ldr r0, 0x12345678 

就是把0x12345678这个地址中的值存放到寄存器r0中。


LDR R, label和LDR R, =label的区别:


LDR r, =label会把label表示的值加载到寄存器中,而LDR r, label会把label当做地址,把label指向的地址中的值加载到寄存器中。


譬如label的值是0x8000,LDR r, =label会将0x8000这个数字加载到寄存器中,而LDR r, label则会将内存地址0x8000处的值加载到寄存器中。


BIC汇编指令:


BIC指令格式为:


bic Rd, Rn, Oprand2


BIC(位清除)指令对Rn中的值和Operand2值的反码按位进行逻辑"与"运算。BIC是逻辑"与非"指令,实现的Bit Clear的功能。


举例:

BIC R0, R0, #0xF0000000

将R0寄存器高4位清零;


BIC R1, R1, #0x0F

将R1寄存器低4位清0;


ORR汇编指令:


指令格式为:


ORR{条件}{S} 目的寄存器,操作数1,操作数2


ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1应该是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数1的某些位。


指令示例:ORR R0, R0, #3

该指令设置R0的0、1位,其余位保持不变。

orr r0, r0, #0xd3

0xd3=1101 0111

将r0与0xd3立即数或运算,然后将结果返还给r0寄存器中,即把r0的bit[7:6]和bit[4]和bit[2:0]置为1。


STR汇编指令:


STR指令的格式为:

STR{条件} 源寄存器,<存储器地址>

STR指令用于从源寄存器中的一个32位的字数据传送到存储器表示的地址中。该指令在程序设计中比较常

用,寻址方式灵活多样,使用方式可参考指令LDR。


指令示例:

STR R0,[R1], #8          //将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。

STR R0,[R1, #8]          //将R0中的字数据写入以R1+8为地址的存储器地址中。


持续更新中......

关键字:汇编指令  寄存器  ARM 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492641.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:常用ARM汇编指令及ATPCS规则
下一篇:汇编代码、机器码和存储器的关系以及数据的表示

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32启动代码学习
第一部分:汇编指令学习1.伪指令1).EQUEQU伪指令:用来为一个数字常量、或一个和内核寄存器相关的数值或一个和程序计数器相关的数值定义的一个符号名称。类似于C语言中的#define 。格式: name     EQU   expr{ , type} 格式:  名称     EQU  表达式(,类型)例如: Stack_Size  EQU   0X00000400  //定义1k字节的栈空间Heap_Size   EQU   
发表于 2020-03-24
STM32启动代码学习
单片机C51汇编指令之寻址方式学习心得
1.寄存器寻址指令举例:MOV A,R0该指令功能:将寄存器R0中的内容送累加器A中详细说明:假设R0中的内容是16进制数20H,那么执行这条指令之后,累加器A中的内容是20H 即十进制数:322.直接寻址指令举例:MOV A,30H该指令功能:将地址单元30H中的内容送累加器A中详细说明:假设地址单元30H中的内容是20H,那么执行该指令之后,累加器A中的内容是:20H 即十进制数323.寄存器间接寻址指令举例:MOV A,@R0该指令功能:将R0指向的内存单元中的内容送累加器A中详细说明:为和寄存器直接寻址区别,汇编语言中,寄存器间接寻址中的寄存器前面会加上一个@以示区别,假设R0中的内容是10H,(10H)=20H,那么执行
发表于 2020-03-20
PIC汇编指令
PIC18F系列d:目标寄存器选择位  0表示结果保存至W寄存器中,1表示保存到文件寄存器f中。a: 快速操作RAM位 0表示快速操作RAM内的RAM单元(BSR寄存器被忽略)。1表示存储区由BSR指定面向字节的操作指令1、ADDWF f,d,a;将f中的内容与W中的内容相加,存储在d提定的寄存器中.2、ADDWFC f,d,a;将f中的内容与W中的内容带进位相加3、ANDWF f,d,a;将f中的内容与W中的内容逻辑与运算4、CLRF  f,a; 将f清零5、COMF  f,d,a;将f取反6、CPFSEQ f,a; 将f与w作比较,相等则跳过下一句7、CPFSGT f
发表于 2020-03-14
ARM常用汇编指令列表
发表于 2020-02-07
ARM常用汇编指令列表
ARM 汇编指令 DCD
简介DCD:数据定义( Data Definition )伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。语法格式:标号 DCD(或 DCDU) 表达式DCD(或 DCDU)伪指令用于分配一片连续的字存储单元并用指定的表达式初始化。其中表达式可以为程序标号或数字表达式。 DCD 也可用 “ &” 代替。用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。实例(STM32 启动文件):__Vectors       DCD     __initial_sp     
发表于 2020-02-07
ARM 汇编指令 ADR 与 LDR 使用
简介这两个都是伪指令:ADR 是小范围的地址读取伪指令,LDR 是大范围的读取地址伪指令。可实际使用的区别是: ADR 是将基于 PC 相对偏移的地址值或基于寄存器相对地址值读取的伪指令,而 LDR 用于加载 32 位立即数或一个地址到指定的寄存器中。以下面的汇编代码为例:.global _start_start:    ldr r0, loop    adr r0, loop    ldr r0, =looploop:    nop用以下命令完成汇编、链接操作,并输出反汇编文件[root@localhost asm]# arm-linux-gcc
发表于 2020-02-07
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved