《arm汇编快速入门.docx》由会员分享,可在线阅读,更多相关《arm汇编快速入门.docx(10页珍藏版)》请在优知文库上搜索。
1、注杼掉整行.3.;新行分隔符.4.3操作码1. NOPnop空掾作,相当干MOV(O,r2. 1.DRIdr,=expression相i于PC存放号或其它存放器的K找限3. ADRadrregisterKU-PC存放静或共它在放号的小费用杆格.ADR1.adrl出IPC存放器或其存放潺的中范国转移.5可执行生成说明5.1IdS文件说明51.1 主器符号说明1. OUTPUT_FoRMAT(bfdname)指定输出可执行文件格式.2. OuTPUT_ARCH(bfdname)指定输出可执行文件所运行CPUF-台3. ENTRY(SymboI)指定可执行文件的人口改5.1.2段定义i明1.段定义格
2、式SECTIONS段名:内容)以前用ARM的IDE工具.运用的是ARM标准的花编悟吉.现在要运用GNU的工具,当然Jg了解一点GNUARM汇编的不同之处.共实特别的简洁.阅谈一下文档然后再行看程序就完全可以黯定了,或打你硬存头皮看GNUARM的汇编程序,用不了多少时间你就就可以无师自通了,个人比拟健忘,还是把文档翻评了一下,律是给门己个防止遗忘的理由吧.ARM汇编语言源程序语甸,一般由指令,伪6作,除指令和伪指令作成.ARMiT编语票的设计极感是汇编伪指令,汇编伪操作和宏指令.目前常用的ARM旧译环境有2种:ARMASM:ARM公司的IDE中运用了COdeWarriOr的编年器.绝大多数WIn
3、dOWS下的开发者都在运用这环境,完全根据ARM的规定:GNUARMASM:GNU二具的ARM版本,与ARMASM略有不同:关JCodeWarrirorARM汇编的归和文京许多,本文假定你己经完全了斜ARMASM,这里只说HJJGNUARM汇隔、并针对ARMASM给出说明.本文翻译自GNUARMAssemblerQuickReference.本人水平力限.指误难免.转我的刍,请注明出处.英文媒文地址不详.GNUARM汇快建入门任何汇编行都是如卜构造::commentv标签:v指令注择GNUARM汇编中,任何以日号结尾的都被认为是个标篮,而不附定非要在一行的开场,下面是一个简洁的例子,这段汇辨程
4、序定义/一个add”的函数,该函数返回两个参数的和:.section.text,x.globaladdgivethesymboladdexternallinkageadd:ADDr,r,rladdinputargumentsMOVpc,IrreturnfromsubroutineendofprogramGNUAnf汇伪指令下面列出了一些GNUARM汇编伪指令,弁绐出了相应说明.ascii“”在汇编中定义字符串并为之安排存储空间与HIlnaSnl中的DCB功能类似)。.asciz4,*和.ascii类似,但不安排存储空间.balign,以某种排列方式在内存中埴充数值。(该指令与armasm中的A
5、1.lGN类似)。powerof_2表示排列方式,其值可为4,8,16或32,单位是byte:fiI1.value是要填充的值:max_Padding最大的填充界限,恳求填充的bytes数1过该假,将被忽视.byte,定义个或多个Byte,并为之安排空间(与armasm的DCB类似).code设定指令宽度,16表示ThUmb,32表示ARMassembly(和armasm中的CODE16,CODI32一样.if.else.endif预编译宏(与armasm中的IFE1.SEENDIF一样),end汇编文件完毕标记,经常省略不用。.ends宏完毕标记.CXitm宏跳出.macroargI),)(
6、,)定义一段名为name的宏,arg_xxx为参数O必需有对应的cndm结尾。可以运用.exltm从中间跳出宏.(与armasm中的MACRO,MEND,MEX11一样).在运用宏参数时必需这样运肋”varg。例如:CODE.macroSHIFT1.EFTa,b,ifb0MOVa,a,ASR#-b.eltm.endifMOVa,a,1.S1.#b.edm,rept循环执行.endr前的代码段numberof_times次。(与armasm中的IEN相像).irp,(,)循环执行endr的的代码段PaQm依次取后面给出的值。在循环执行的代码段中必需以、”丧示您数.,endr完毕循环(与armas
7、m中的WEND相像).equ,为一个标号赋值,类似C中的#define.(与armasm中的EQU一样).err编译错误报告,将引起编译的终止.global全局声明标记,这样声明的标号将可以被外部运用.(与armasm中的EXPORT一样)。.hword,.插入一个16-bit的数据队列,(与armasm中的DCW一样).ifdef假如symbol被定义,该快代码将被编译。以.endif完毕。.ifndef假如sy三bol未被定义,该快代码将被编译.以.endif完毕。.include包含文件。(与armasm中的INC1.UDE或者C中的#include一样).reqregistern定义个
8、存放器,.req的左边是定义的存放器名,右边是运用的真正运用的存放器.与armasm中的RN类似)例如:acc.reqrCODE.section,开场一个新的代码或数据段,.text,代码段;.data,初始化数据段;.bss,未初始化数据段.这些段都有缺省的标记fags),联接错可以联别这些标记.(IjarmaSm中的AREA佯).下面是E1.F格式允许的段标记含义a允许段w可写段X执行段.setvariablen,变址赋值。(与armasm中的SETA-样).space(,安排numberof.bytes字节的数据空间,并填充其值为fiIlJyte,假设未指定该值,缺省填充0。(与a1111asrn中的SPACE功能样).word,.插入个32-bit的数据队列.(与armasm中的DCD功能一样)GNUAHf汇转别字符和法代码行中的注糅符号:整行注择符号:语句别离符号:干脆操作数前缀:、#或$.arm以arm格式编用.同COde32.thumb以thumb格式编译,jcode16.code16以thumb格式编课.code32以arm格式编译K后语,更具体的运用说明请参照:ARMArchitectureReferenceManual,Addison-WesleyISBN0-201-73719-1