ARM常用汇编指令学习

发布者:JoyfulSpirit5最新更新时间:2016-07-12 来源: eefocus关键字:ARM  汇编指令 手机看文章 扫描二维码
随时随地手机看文章
以前用ARM的IDE工具,使用的是ARM标准的汇编语言。现在要使用GNU的工具,当然要了解一点GNU ARM汇编的不同之处。其实非常的简单,浏览一下文档然后再看看程序就完全可以搞定了,或者你硬着头皮看GNU ARM的汇编程序,用不了多少时间你就就可以无师自通了。个人比较健忘,还是把文档翻译了一下,算是给自己一个避免遗忘的理由吧。 

ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令作成.ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令. 
目前常用的ARM编译环境有2种:
ARMASM: ARM公司的IDE中使用了CodeWarrior的编译器,绝大多数windows下的开发者都在使用这一环境,完全按照ARM的规定; 
GNU ARM ASM: GNU工具的ARM版本,与ARMASM略有不同; 
关于CodeWarriror ARM汇编的书和文章很多,本文假定你已经完全了解ARMASM,这里只说明GNU ARM汇编,并针对ARMASM给出说明。本文翻译自:GNU ARM Assembler Quick Reference, 本人水平有限,错误难免,转载随意,请注明出处。英文原文地址不详。 
GNU ARM 汇编快速入门


任何汇编行都是如下结构:
 
[
 
GNU ARM 汇编中,任何以冒号结尾的都被认为是一个标签,而不一定非要在一行的开始。下面是一个简单的例子,这段汇编程序定义了一个"add"的函数,该函数返回两个参数的和:
 
.section .text, “x”
.global add @ give the symbol add external linkage
add:
ADD r0, r0, r1 @ add input arguments
MOV pc, lr @ return from subroutine
@ end of program
 
GNU ARM汇编伪指令

下面列出了一些GNU ARM汇编伪指令,并给出了相应说明。
 
.ascii “” 在汇编中定义字符串并为之分配存储空间(与armasm中的DCB功能类似)。 
.asciz “” 和.ascii类似, 但不分配存储空间。
 
.balign {, {,} } 
以某种排列方式在内存中填充数值。 (该指令与armasm中的ALIGN类似)。
power_of_2表示排列方式,其值可为4,8,16或32,单位是byte; 
fill_value是要填充的值; 
max_padding最大的填充界限,请求填充的bytes数超过该值,将被忽略。
 
.byte {,} … 定义一个或多个Byte,并为之分配空间(与armasm的DCB类似)。 
.code 设定指令宽度,16表示Thumb,32表示ARM assembly 
(和armasm中的CODE16,CODE32相同)。
 
.if  
.else 
.endif 
预编译宏(与armasm中的IF ELSE ENDIF相同)。
 
.end 汇编文件结束标志,常常省略不用。

.endm 宏结束标志。 
.exitm 宏跳出。 
.macro {} … {,
定义一段名为name的宏,arg_xxx为参数。
必须有对应的.endm结尾。
可以使用.exitm从中间跳出宏。(与armasm中的MACRO, MEND, MEXIT相同)。 
在使用宏参数时必须这样使用:“/”。
例如: 
[CODE].macro SHIFTLEFT a, b
.if /b < 0
MOV /a, /a, ASR #-/b
.exitm
.endif
MOV /a, /a, LSL #/b
.endm

.rept 循环执行.endr前的代码段number_of_times次。
(与armasm中的WEN相似)

.irp {,} {,} … 
循环执行.endr前的代码段,param依次取后面给出的值。
在循环执行的代码段中必须以“/ ”表示参数。

.endr 结束循环(与armasm中的WEND相似).
 
.equ , 为一个标号赋值,类似C中的#define。(与armasm中的EQU相同)
 
.err 编译错误报告,将引起编译的终止。
 
.global 全局声明标志,这样声明的标号将可以被外部使用。(与armasm中的EXPORT相同)。
 
.hword {,} …
插入一个16-bit的数据队列。(与armasm中的DCW相同)
 
.ifdef 如果 被定义,该快代码将被编译。以 .endif结束。
.ifndef 如果 未被定义,该快代码将被编译。以 .endif结束。
 
.include “” 包含文件。(与armasm中的INCLUDE 或者C中的#i nclude一样)
 
.req
定义一个寄存器,.req的左边是定义的寄存器名,右边是使用的真正使用的寄存器。
(与armasm中的RN类似)
例如:acc .req r0
 
[CODE].section {,””}
开始一个新的代码或数据段。.text, 代码段;.data, 初始化数据段;.bss, 未初始化数据段。 
这些段都有缺省的标志(flags),联接器可以识别这些标志。(与armasm中的AREA相同)。
下面是ELF格式允许的段标志
<标志> 含义
a 允许段
w 可写段
x 执行段
 
.set , 变量赋值。(与armasm中的SETA相同)
 
.space {,}
分配number_of_bytes字节的数据空间,并填充其值为fill_byte,若未指定该值,缺省填充0。
(与armasm中的SPACE功能相同)
 
.word {,} … 
插入一个32-bit的数据队列。(与armasm中的DCD功能相同)
几个常用的段代号,基本上与编译器/处理器都没有无关系(FLAT模式):
.text - 代码段
.const - 只读数据段(有些编译器不使用此段,将只读数据并入.data段)
.data - 读写数据段
.bss - 堆
GNU ARM汇编特殊字符和语法
 
代码行中的注释符号: ‘@’
整行注释符号: ‘#’
语句分离符号: ‘;’
直接操作数前缀: ‘#’ 或 ‘$’
 
.arm 以arm格式编译,同code32 
.thumb 以thumb格式编译,同code16
.code16 以thumb格式编译
.code32 以arm格式编译
 
篇后语:

更详细的使用说明请参照:ARM Architecture Reference Manual, Addison-Wesley ISBN 0-201-73719-1
译者:

重要的部分翻译完成了,本人认为不重要的没有翻译,如force_thumb,寄存器命名等等。
关键字:ARM  汇编指令 引用地址:ARM常用汇编指令学习

上一篇:ARM的BX指令
下一篇:ARM协处理器及其指令

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

关于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