常用的ARM汇编指令

发布者:Howard_Sun最新更新时间:2016-06-30 来源: eefocus关键字:ARM  汇编指令 手机看文章 扫描二维码
随时随地手机看文章
MRS (读状态寄存器)  MRS r1, CPSR     ;   CPSR--->r1

MSR (写状态寄存器) MSR cpsr_c, #0xD3 ;  CPSR[7...0] = 0xD3

 

STMFD SP! {R8-R9}

含义:(1)SP=SP-4字节 (2) R9--->SP  (3)SP=SP-4  (4) R8-->SP

 

LDMFD SP! {R8-R9,PC}

含义:(1)SP-->R8   (2)SP=SP+4  (3)SP-->R9  (4)SP=SP+4  (5)SP-->PC  (6) SP=SP+4

 

ldmia sp! { r0-r7pc }^     ^ 表示将spsr的值赋给cpsr

 

B lable   跳转指令  PC<---lable 

BL lable 带链接跳转指令   LR<----PC-4,  PC<---lable

BX Rm 带状态切换跳转指令 PC<----Rm ,切换状态(Rm[0]=1,thumb,Rm[0]=0,ARM)

 

%F2 表示跳转到当前指令后面的标号2处

%B0 表示跳转到当前指令前面的标号0处

 

[ ----- IF   ;           | ----- ELSE  ;          ] ----- ENDIF

 

IF  logical expression                [logical expression

Instructions                                   Instructions                          

{ELSE                                         |

Instructions                                   Instructions

}                                                ]

ENDIF

 

 

(1)GBLL 伪指令用于定义一个全局的逻辑变量,并初始化为{False}。
GBLL    BOOTLOADER
BOOTLOADER   SETL    {TRUE}

(2)GET(或 INCLUDE)
GET 伪指令用于将一个源文件包含到当前的源文件中,并将被包含的源文件在当前位置进行汇编处理。可以使用 INCLUDE 代替 GET。
INCLUDE ..//..//kernel//oal//startup.s

(3)IMPORT 伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中。
    IMPORT      BootloaderMain
IMPORT      MMUSetup
(4)BL  带返回的跳转指令
(5)BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转
B   Label    ;程序无条件跳转到标号Label处执行 
CMP R1,#0   ;当CPSR寄存器中的Z条件码置位时,程序跳转到标号Label处执行 
BEQ Label   

(6)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。

(7)STR 指令的格式为: 
STR{条件} 源寄存器,<存储器地址>
STR 指令用于从源寄存器中将一个 32 位的字数据传送到存储器中。与LDR对应

(8)采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多 16 个通用寄存器的值。以下指令: 
LDMIA   R0,{R1,R2,R3,R4}   ;R1←[R0]
                                   ;R2←[R0+4]
                                  ;R3←[R0+8]
                                  ;R4←[R0+12]
该指令的后缀 IA表示在每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可将连续存储单元的值传送到 R1~R4。

(9)SBC 指令的格式为: 
SBC{条件}{S} 目的寄存器,操作数 1,操作数 2
SBC指令用于把操作数1减去操作数2,再减去 CPSR 中的C 条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于 32 位的减法。注意不要忘记设置 S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。 
指令示例: 
SUBS  R0,R1,R2     ; R0 = R1 - R2 - !C,并根据结果设置CPSR的进位标志位

(10)BX  带状态切换的跳转指令

(11)MCR 指令的格式为: 
MCR{条件} 协处理器编码,协处理器操作码 1,源寄存器,目的寄存器 1,目的寄存器 2,协处理器操作码 2
MCR 指令用于将 ARM 处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1和协处理器操作码2为协处理器将要执行的操作,源寄存器为 ARM 处理器的寄存器,目的寄存器1和目的寄存器2均为协处理器的寄存器。 
指令示例: 
MCR   P3,3,R0,C4,C5,6    ;该指令将ARM处理器寄存器R0中的数据传送到协处理器P3的寄存器C4和C5中。 

(12)CMP 指令的格式为: 
CMP{条件} 操作数 1,操作数 2 
CMP 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新 CPSR 中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数 1 与操作数 2 的关系(大、小、相等),例如,当操作数 1 大于操作操作数 2,则此后的有 GT 后缀的指令将可以执行。 
指令示例: 
CMP R1,R0  ;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位 
CMP R1,#100 ;将寄存器R1的值与立即数100相减,并根据结果设置CPSR的标志位

(13)批量数据加载/存储指令LDM(或 STM)指令的格式为: 
LDM(或 STM){条件}{类型} 基址寄存器{!},寄存器列表{∧}
LDM(或 STM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈(SDM)或出栈(LDM)。其中,{类型}为以下几种情况: 
IA  每次传送后地址加 1; 
IB  每次传送前地址加 1; 
DA  每次传送后地址减 1; 
DB  每次传送前地址减 1; 
FD  满递减堆栈; 
ED  空递减堆栈; 
FA  满递增堆栈; 
EA  空递增堆栈; 
{!}为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。

STMFD  R13!,{R0,R4-R12,LR}  ;将寄存器列表中的寄存器(R0,R4 到R12,LR)存入堆栈
LDMFD  R13!,{R0,R4-R12,PC} ;将堆栈内容恢复到寄存器(R0,R4到R12,LR)

(14)ORR 指令的格式为: 
ORR{条件}{S} 目的寄存器,操作数 1,操作数 2
ORR 指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数 1
应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数 1 的某些位。 
指令示例: 
ORR   R0,R0,#3             ; 该指令设置R0的0、1位,其余位保持不变。

(15)BIC 指令的格式为: 
BIC{条件}{S} 目的寄存器,操作数 1,操作数 2 
BIC指令用于清除操作数1 的某些位,并把结果放置到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。操作数 2 为 32 位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。 
指令示例: 
BIC   R0,R0,#%1011     ; 该指令清除 R0 中的位 0、1、和 3,其余的位保持不变。

(16)
ADR(小范围的地址读取伪指令)
ADRL(中等范围的地址读取伪指令)
LDR(大范围的地址读取伪指令)
ldr     r0, =0xFFFFC000
用于将基于PC的地址或基于寄存器的地址读取到寄存器中。
///伪指令通过汇编编译器替换成对应的ARM/Thumb 指令。

关键字:ARM  汇编指令 引用地址:常用的ARM汇编指令

上一篇:ARM 中断处理过程
下一篇:ARM地址重映射的通俗解释

推荐阅读最新更新时间:2024-03-16 14:58

关于arm中的中断处理
中断处理的流程 1.cpu内部的中断控制器收集外部各个中断,经过一个的处理以后在报给cpu 2.然后cpu保存现场,调用中断服务程序(ISR) 3.用ISR去识别相应的中断,然后调用相应的中断处理程序 4.处理完以后就进行清除中断 5.恢复被中断的程序 这就是中断处理的流程,下面是对第一步的过程进行详细的介绍。 根据2440手册上的介绍,把这一部分用一副图进行描述 request sources:中断请求源. 这里的中断请求源被分成了2个不同的类型,一个是有子中断(with sub-register),一个是没有子中断的,从图中可以得知不同的类型在中断的处理过程也是不一样的。 1.with sub-register 的
[单片机]
关于<font color='red'>arm</font>中的中断处理
三星准备丢开ARM,开发RISC-V架构自主CPU内核
今年三星的半导体部门已经开始尝试一些大的飞跃,其运用于Galaxy S7旗舰的Exynos 8890处理器,首次采用了自主定制的CPU内核M1。现在来看,三星正计划扩大芯片定制开发的实力,因为日前根据业内人士透露的消息了解,三星设备解决方案(Device Solution)事业部正在为研发32位的MCU微控制器定制一种CPU内核,并且似乎是以可穿戴设备或物联网市场为目标。 据称,三星研发中的这个CPU内核基于开源的RISC-V指令集架构,而不是我们常见的ARM架构(例如三星旗舰机长期所用的ARMv6-M最新的ARMv8-M架构)。这就意味着,三星不必支付ARM授权许可费。更进一步来说,三星的CPU战略目标正在发生转变,从之前获
[单片机]
研华认证首个ARM-Based Design Partner 携手艾博唯提供可信赖的灵
京,4月 12日,2017–全球智能系统领导厂商研华公司(股票代号:2395)郑重宣布,与北京艾博唯科技有限公司正式签订“Advantech Cer TI fied ARM-Based Design Partner”合作协议,双方将携手为客户提供更加快速、灵活、可信赖的深度开发支持及客制化服务。 艾博唯成为研华首家认证ARM-Based Design Partner 研华科技IoT嵌入式平台事业群中国区总经理许杰弘先生与北京艾博唯科技董事长陈大勇先生代表双方出席现场。双方就本次签约协议达成共识,签订合作协议。许杰弘先生代表研华对艾博唯颁布授权证书,艾博唯正式成为研华首个ARM-Based Design Partner,双方相互
[半导体设计/制造]
采用ARM Cortex-M01处理器的DMX512调光设备的软硬件系统设计
1.引言 DMX512协议是美国剧场技术协会(United-States Institute forTheaterTechnology,USITT)制定的数字多路复用协议,其制定的初衷是为了使舞台、剧场等地所使用的众多的调光器和控制器能相互兼容。虽然它不是一个行业或国家标准,但是由于它的简单性和实用性,自从出台以来,得到了世界各地生产商和使用者普遍承认。在国内也有越来越多的生产厂家在生产或关注采用DMX512协议的数字调光设备。 本文提出了一种基于Cortex-M0单片机的DMX512调光设备的设计方案,该方案能接入2路DMX信号,并进行合并进行调光,并根据内部AD进行硅路温度,电压和电流进行检测,然后报告给控台。 2.C
[单片机]
采用<font color='red'>ARM</font> Cortex-M01处理器的DMX512调光设备的软硬件系统设计
ARM调查显示:机器人将帮助而不是取代人类
根据ARM资助的一项对全球近4000名消费者进行的独立调查显示,仅有少数消费者认为人工智能会导致机器人失控并取代人类就业。下面就随网络通信小编一起来了解一下相关内容吧。 ARM调查显示:机器人将帮助而不是取代人类 考虑到未来人工智能可能逐步成为人们生活某些领域的一部分,30%的消费者指出其最大的缺点是“人们将从事更少或者不同的工作”。但是,受访者仍对机器人持肯定态度,认为它们能够在大部分工作中帮助而不是取代人类,并且承担更多枯燥、危险的工作。 ARM品牌与传播全球营销副总裁Joyce Kim表示:“调查结果所显示的对人工智能的乐观和其可能带来的机遇非常鼓舞人心,但是我们其实刚刚触到人工智能所有潜能的冰山一角。人工智能对就
[网络通信]
基于DSP、DDS和ARM的雷达中频信号模拟器设计与实现
摘要:介绍了一种基于PC+ARM+DSP+DDS体系结构的通用雷达中频信号模拟器。该系统能够模拟多种体制的雷达中频信号,而且不同信号间切换方便、使用灵活。介绍了该系统的硬件设计和在模拟相参脉冲雷达动目标信号中的应用。 关键词:雷达中频信号模拟器 AD9852 TMS320C6416 S3C44B0X 相参 雷达信号模拟器是模拟技术与雷达技术相结合的产物。它通过模拟的方法产生雷达回波信号,以便在实际雷达系统前端不具备的条件下对雷达系统后级进行调试。随着数字技术的进步,高速、超大规模集成电路的使用,雷达信号模拟系统正朝着灵活、通用的方向发展。笔者设计了一种基于PC+ARM+DSP+DDS体系结构的能家长雷达中频信号模拟器,介绍了该
[应用]
ARM CPU与Intel x86 CPU性能比较
随着移动互联网时代的到来,Qualcomm(高通)、Texas Instruments(德州仪器)等基于ARM架构的CPU受到越来越多人的关注,而昔日王者的Intel x86架构由于功耗问题,在移动互联网似乎举步维艰。 Intel x86架构对比于ARM架构来说,性能强大,功耗较高是大家都知道的事实。那Intel x86架构的CPU性能究竟比ARM架构的强多少呢?下面我们对单个Core做一个简单的评测。 我的PC机CPU:Intel Pentium Dual-Core CPU E5300 2.60GHz(Launched 2008Q1 x86) 我手机的CPU:Qualcomm Snapdragon S2 MSM8255 1.0
[单片机]
采用ARM单片机+CPLD实现数字-轴角转换的方法
同步机.正余弦旋转变压器等广泛应用于火力控制.航空航天.自动控制等领域以实现系统间轴角信息的传输.由于计算机技术在上述领域的广泛应用,数字-轴角转换已(Digitalto Shaft-angle Converting,DSC)成为一个重要的问题.市场上DSC集成模块产品价格较高且接口不够灵活,在某些领域应用受到限制,特别在多路DSC使用时效费问题更为突出.基于上述问题,提出一种采用ARM 单片机+CPLD实现数字-轴角转换的方法. 1 数字-轴角转换原理数字-轴角转换(DSC)是将数字形式表示的轴角度θ通过运算电路转换为正余弦旋转变压器形式的电压(如式(1)),经正余弦旋转变压器和经过Scott变压器后驱动同步机指向对
[单片机]
采用<font color='red'>ARM</font>单片机+CPLD实现数字-轴角转换的方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved