版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM汇编语言
ARM汇编语言源程序语句,一般由指令,伪操作,宏指
令和伪指令作成.
ARM汇编语言的设计根底是汇编伪指令,汇编伪操作
和宏指令.
伪操作,是ARM汇编语言程序里的一些特别的
指令助记符,其作用主要是为完成汇编程序做各种打
算工作,在源程序运行汇编程序处理,而不是在计算机
运行期间有机器执行.也就是说,这些伪操作只是汇编
过程中起作用,一旦汇编完毕,伪操作的使命也就随之
消逝.
宏指令,是一段独立的程序代码,可以插在程
序中,它通过伪操作来定义,宏在被运用之前必需提前
定义好,宏之间可以相互调用,也可自己递归调用.通
过干脆书写宏名来运用宏.并本具宏指令的格式输入
输出参数.宏定义本身不产生代码,只是在调用它时把
宏体插入到原程序中.宏与C语言中的子函数形参和
实参的调用相像,调用宏时通过实际的指令来代替
宏体实现相关的一段代码,但宏的调用与子程序的调
用有本质的区分,既宏并不会节约程序的空间,其优点
是简化程序代码,提高程序的可读性以及宏内容可以
同步修改.
伪操作,宏指令一般与编译程序有关,因此AR
M汇编语言的伪操作,宏指令在不同的编译环境下有
不同的编写形式和规则.
伪指令也是ARM汇编语言程序里的特别助记
符,也不在处理器运行期间由机器执行,他们在汇编时
将被相宜的机器指令代替成ARM或Thumb指令,从而实
现真正的指令操作.
目前常用的ARM编译环境有2种.
1.ADS/SDTIDE:ARM公司
开发,运用了CodeWarrior公司的编译器.
2.集成了GNU开发工具的
IDE开发环境;它由GNU的汇编器as,穿插汇编器gcc
和连接器id组成.
ADS编译环境下的ARM伪操作和宏指令,可参考北
航出版社的"ARM微限制器根底与实践?〔周立功〕
这里主要讲解并描述ARMGNU常用汇编语言
4ARMGNU常用汇编语言介绍
4.1ARMGNU常用汇编伪指令介绍
1.abort
.abort:停顿汇编
.alignabsexprl,absexpr2:
以某种对齐方式,在未运用的存储区域填充值.第一
个值表示对齐方式,4,8,16或32.其次个表达式值
表示填充的值.
2.if...eIse...endif
.else
.endif:支持条件预编译
3.incIude
.include"file":包含指定的头文件,可以把一个
汇编常量定义放在头文件中.
4.comm
msymbol,length:在bss段申请一段命名空
间,该段空间的名称叫symbol,长度为length.Ld连
接器在连接会
为它留出空间.
5.data
.datasubsection:说明接下来的定义归属于subse
ction数据段.
6.equ
.equsymboI,expression:才日某——个符号(symbol)
定义成某一个值(expression).该指令并不安排空间.
7.globaI
.globalsymbol:定义一个全局符号,通常是为Id
运用.
8.ascii
.ascii"string":定义一个字符串并为之安排空间.
9.byte
.byteexpressions:定义一个字节,并为之安排空
间.
10.short
.shortexpressions:定义一个短整型,并为之安排
空间.
11.int
.intexpressions:定义—^整型,并为之安排空间.
12Iong
.longexpressions:定义一^长整型,并为之安排
空间.
13word
.wordexpressions:定义一个字,并为之安排空间,
4bytes.
14.macro/endm
.macro:定义一段宏代码,.macro表示代码的开场,
.endm表示代码的完毕.
15.req
name.reqregistername:为存放器定义一个别名.
16.code
.code[16132]:指定指令代码产生的长度,16表示
Thumb指令,32表示ARM指令.
17.Itorg
.Itorg:表示当前往下的定义在归于当前段,并为之
安排空间.
4.2ARMGNU专有符号
1.@
表示注释从当前位置到行尾的字符.
2.#
注释掉一整行.
3.;
新行分隔符.
4.3操作码
1.NOP
nop
空操作,相当于MOVrO,rO
2.LDR
Idr<register>,二<expression>
相当于PC存放器或其它存放器的长转移.
3.ADR
adr<register><label>
相于PC存放器或其它存放器的小范围转移.
ADRL
adrI<register><IabeI>
相于PC存放器或其存放器的中范围转移.
5可执行生成说明
5.1Ids文件说明
5.1.1主要符号说明
1.OUTPUT_FORMAT(bfdname)
指定输出可执行文件格式.
2.OUTPUT_ARCH(bfdname)
指定输出可执行文件所运行CPU平台
3.ENTRY(symbol)
指定可执行文件的入口段
5.1.2段定义说明
1.段定义格式
SECTIONS
{...
段名:
(
内容
}
•••
)
前言:
以前用ARM的IDE工具,运用的是ARM标准的汇编语言。现在耍运用
GNU的工具,当然要了解一点GNUARM汇编的不同之处。其实特别的
简洁,阅读一下文档然后再看看程序就完全可以搞定了,或者你硬着
头皮看GNUARM的汇编程序,用不了多少时间你就就可以无师自通
了。个人比拟健忘,还是把文档翻译了一下,算是给自己一个防止遗
忘的理由吧。
ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令作成.
ARM汇编语言的设计根底是汇编伪指令,汇编伪噪作和宏指令.
目前常用的ARM编译环境有2种:
ARMASM:ARM公司的IDE中运用了CodeWarrior的编译器,绝大多数
windows下的开发者都在运用这一环境,完全根据ARM的规定;
GNUARMASM:GNU工具的ARM版本,与ARMASM略有不同;
关于CodeWarrirorARM汇编的书和文章许多,本文假定你已经完全
了解ARMASM,这里只说明GNUARM汇编,并针对ARMASM给出说明。
本文翻译自:GNUARMAssemblerQuickReference,本人水平有限,
错误难免,转载随意,请注明出处。英文原文地址不详。
GNUARM汇编快速入门
任何汇编行都是如下构造:
[〈label〉:][<instructionordirective>)@comment
[〈标签》:][〈指令〉}@注释
GNUARM汇编中,任何以冒号结尾的都被认为是一个标签,而不肯定
非要在一行的开场。下面是一个简洁的例子,这段汇编程序定义了一
个〃add〃的函数,该函数返回两个参数的和:
.section.text,"x"
.globaladd@givethesymboladdexternallinkage
add:
ADDrO,rO,rl@addinputarguments
MOVpc,Ir@returnfromsubroutine
©endofprogram
GNUARM汇编伪指令
下面列出了一些GNUARM汇编伪指令,并给出了相应说明。
.ascii“<string>〃在汇编中定义字符串并为之安排存储空间(与
armasm中的DCB功能类似)。
.asciz”〈string>”和.ascii类似,但不安排存储空间。
.balign<power_of_2>{,<fill_value>{,<max_padding>}}
以某种排列方式在内存中填充数值。(该指令与armasm中的ALIGN
类似)。
power_of_2表示排列方式,其值可为4,8,16或32,单位是byte;
fillvalue是要填充的值;
max_padding最大的填充界限,恳求填充的bytes数超过该值,将被
忽视。
.byte<bytel>{,<byte2>}…定义一个或多个Byte,并为之安排
空间(与armasm的DCB类似)。
.code<number_of_bits>设定指令宽度,16表示Thumb,32表示A
RMassembly
(和armasm中的CODE16,CODE32一样)。
.if
・else
.endif
预编译宏(与armasm中的IFELSEENDIF一样)。
.end汇编文件完毕标记,经常省略不用。
.endm宏完毕标记。
.exitm宏跳出。
.macro<name>{<arg_l}{,<arg_2>)…{,<arg_N>}
定义一段名为name的宏,arg_xxx为参数0
必需有对应的.endm结尾。
可以运用.exitm从中间跳出宏。(与armasm中的MACRO,MEND,ME
XIT一样)。
在运用宏参数时必需这样运用:"\<arg>〃。
例如:
[CODE].macroSHIFTLEFTa,b
・if\b<0
MOV\a,\a,ASR#-\b
.exitm
・endif
MOV\a,\a,LSL#\b
.endm
.rept<numberoftimes>循环执行.endr前的代码段numberoft
imes次。
(与armasm中的WEN相像)
.irp<param>{,<val_l>}{,<val_2>}…
循环执行.endr前的代码段,param依次取后面给出的值。
在循环执行的代码段中必需以"\<param>表示参数。
.endr完毕循环(与armasm中的WEND相像).
.equ<symbolname>,<value>为一个标号赋值,类似C中的#defi
ne。(与armasm中的EQU一样)
.err编译错误报告,将引起编译的终止。
.global<symbol>全局声明标记,这样声明的标号将可以被外部运
用。(与armasm中的EXPORT一样)。
.hword<shortl>{,<short2>}…
插入一个16-bit的数据队列。(与armasm中的DCW一样)
.ifdef<symbol>假如〈symbol)被定义,该快代码将被编译。以.
endif完毕。
・ifndef<symbol>假如〈symbol)未被定义,该快代码将被编译。以
.endif完毕。
.include”◊〃包含文件。(与armasm中的INCLUDE或者C中的
#include一样)
<registername>.req<registername>
定义一个存放器,.req的左边是定义的存放器名,右边是运用的真
正运用的存放器。
(与armasm中的RN类似)
例如:acc.reqrO
[CODE],section<section_name>{,〃<flags>,z}
开场一个新的代码或数据段。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 船舶起重工岗中安全规程考核试卷含答案
- 电容器制造工岗前安全实操考核试卷含答案
- 护理安全警示教育
- 道路客运售票员岗位安全意识考核试卷含答案
- 静电成像显影材料载体制造工安全培训强化考核试卷含答案
- 甲醇制烯烃操作工风险评估知识考核试卷含答案
- 中药丸剂工操作规程知识考核试卷含答案
- 2026年秋新教材七年级数学上册有理数的实际应用问题重难点题型(解析版)
- 儿童急性中毒护理预防
- 水质在线监测平台搭建分析方案
- 《先兆流产中西医结合诊疗指南》
- UL2034标准中文版-2017一氧化碳报警器UL中文版标准
- AIGC提示词美学定义
- 高中新生入学开学第一课班会课件
- JT∕T 1496-2024 公路隧道施工门禁系统技术要求
- 《高二开学第一课》主题班会课件
- 2020风电场设备事故现场处置方案
- 自考《兽医法规14239》考试复习题库(必备版)
- 《中华民族大团结》(初中)第1课-爱我中华教学课件
- 2021废(污)水处理用复合碳源
- 化学(基础模块)中职PPT完整全套教学课件
评论
0/150
提交评论