arm汇编快速入门.docx

上传人:王** 文档编号:1433521 上传时间:2024-07-09 格式:DOCX 页数:16 大小:20.54KB
下载 相关 举报
arm汇编快速入门.docx_第1页
第1页 / 共16页
arm汇编快速入门.docx_第2页
第2页 / 共16页
arm汇编快速入门.docx_第3页
第3页 / 共16页
arm汇编快速入门.docx_第4页
第4页 / 共16页
arm汇编快速入门.docx_第5页
第5页 / 共16页
arm汇编快速入门.docx_第6页
第6页 / 共16页
arm汇编快速入门.docx_第7页
第7页 / 共16页
arm汇编快速入门.docx_第8页
第8页 / 共16页
arm汇编快速入门.docx_第9页
第9页 / 共16页
arm汇编快速入门.docx_第10页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《arm汇编快速入门.docx》由会员分享,可在线阅读,更多相关《arm汇编快速入门.docx(16页珍藏版)》请在优知文库上搜索。

1、ARM汇编语言ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令作成.ARM汇编语言的设计根底是汇编伪指令,汇编伪操作和宏指令.伪操作,是ARM汇编语言程序里的一些特别的指令助记符,其作用主要是为完成汇编程序做各种打算工作,在源程序运行汇编程序处理,而不是在计算机运行期间有机器执行.也就是说,这些伪操作只是汇编过程中起作用,一旦汇编完毕,伪操作的使命也就随之消逝.宏指令,是一段独立的程序代码,可以插在程序中,它通过伪操作来定义,宏在被运用之前必需提前定义好,宏之间可以相互调用,也可自己递归调用.通过干脆书写宏名来运用宏.并本具宏指令的格式输入输出参数.宏定义本身不产生代码,只是在调用

2、它时把宏体插入到原程序中.宏与C语言中的子函数形参和实参的调用相像,调用宏时通过实际的指令来代替宏体实现相关的一段代码,但宏的调用与子程序的调用有本质的区分,既宏并不会节约程序的空间,其优点是简化程序代码,提高程序的可读性以及宏内容可以同步修改.伪操作,宏指令一般与编译程序有关,因此ARM汇编语言的伪操作,宏指令在不同的编译环境下有不同的编写形式和规那么.伪指令也是ARM汇编语言程序里的特别助记符,也不在处理器运行期间由机器执行,他们在汇编时将被相宜的机器指令代替成ARM或ThUmb指令,从而实现真正的指令操作.目前常用的ARM编译环境有2种.1. ADS/SDTIDE:ARM公司开发,运用了

3、CodeWarriOr公司的编译器.2. 集成了GNU开发工具的IDE开发环境;它由GNU的汇编器as,穿插汇编器gcc和连接器id组成.ADS编译环境下的ARM伪操作和宏指令,可参考北航出版社的ARM微限制器根底与实践?周立功这里主要讲解并描述ARMGNU常用汇编语言4ARMGNU常用汇编语言介绍4.1 ARMGNU常用汇编伪指令介绍1. abort.abort:停顿汇编.alignabsexpr1,absexpr2:以某种对齐方式,在未运用的存储区域填充值.第一个值表示对齐方式,4,8,16或32.其次个表达式值表示填充的值.2. if.eIse.endif.if.else.endif:支

4、持条件预编译3. incIude.includefile:包含指定的头文件,可以把一个汇编常量定义放在头文件中.4. commmsymbol,Iength:在bss段申请一段命名空间,该段空间的名称叫SymboI,长度为Iength.1.d连接器在连接会为它留出空间.5. data.datasubsection:说明接下来的定义归属于S1.lbSeCtion数据段.6. equ.equsymboI,expression:把某一个符号(SymbOl)定义成某一个值(expression).该指令并不安排空间.7. globaI.globalsymbol:定义一个全局符号,通常是为Id运用.8.

5、ascii.asciistring:定义一个字符串并为之安排空间.9. byte.byteexpressions:定义一个字节,并为之安排空间.10. short.shortexpressions:定义一个短整型,并为之安排空间.11. int.intexpressions:定义y个整型,并为之安排空间.12. long.longexpressions:定义一个长整型,并为之安排空间.13. word.wordexpressions:定义一个字,并为之安排空间,4bytes.14. macro/endm.macro:定义一段宏代码,.macro表示代码的开场,.endm表示代码的完毕.15.

6、reqname.reqregistername:为存放器定义一个别名.16. code,code16132:指定指令代码产生的长度,16表示ThUmb指令,32表示ARM指令.17. Itorg.torg:表示当前往下的定义在归于当前段,并为之安排空间.4.2ARMGNU专有符号1. 表示注释从当前位置到行尾的字符.2. #注释掉一整行3. ;新行分隔符.4. 3操作码1. NOPnop空操作,相当于MOVr,r2. 1.DRIdr,=相当于PC存放器或其它存放器的长转移.3. ADRadr相于PC存放器或其它存放器的小范围转移.ADR1.adrI相于PC存放器或其存放器的中范围转移.5可执行

7、生成说明5.1 Ids文件说明5.1.1 主要符号说明1. OUTPUT.FORMAT(bfdname)指定输出可执行文件格式.2. OUTPUT_ARCH(bfdname)指定输出可执行文件所运行CPU平台3. ENTRY(SymboI)指定可执行文件的入口段5.1.2段定义说明1.段定义格式SECTIONS.段名:(内容)前言:以前用ARM的IDE工具,运用的是ARM标准的汇编语言。现在要运用GMJ的工具,当然要了解一点GMJARM汇编的不同之处。其实特别的简洁,阅读一下文档然后再看看程序就完全可以搞定了,或者你硬着头皮看GNUARv的汇编程序,用不了多少时间你就就可以无师自通了。个人比拟

8、健忘,还是把文档翻译了一下,算是给闩己一个防止遗忘的理由吧。ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令作成.ARM汇编语言的设计根底是汇编伪指令,汇编伪操作和宏指令.目前常用的ARv编译环境有2种:RMSM:ARM公司的IDE中运用了CodeWarrior的编译器,绝大多数windows下的开发者都在运用这一环境,完全根据ARM的规定;GNUARMASM:GNU工具的ARM版本,与ARMASM略有不同;关于CodeWarrirorARM汇编的书和文堂许多,本文假定你已经完全了解ARMASM,这里只说明GNUARM汇编,并针对ARMASM给出说明。本文翻译自:GNURMAsse

9、mblerQuickReference,本人水平有限,错误难免,转载随意,请注明出处。英文原文地址不详。GNUARM汇编快速入门任何汇编行都是如下构造::comment:卜指令Q注释GMJARM汇编中,任何以冒号结尾的都被认为是一个标签,而不肯定非要在一行的开场。下面是一个简洁的例子,这段汇编程序定义了一个add”的函数,该函数返回两个参数的和:.section.text,.globaladdQgivethesymboladdexternallinkageadd:ADDr,r,riaddinputargumentsMOVpc,Irreturnfromsubroutineendofprogram

10、GNUARM汇编伪指令下面列出了一些GUARM汇编伪指令,并给出了相应说明。.ascii”string)”在汇编中定义字符串并为之安排存储空间(与armasm中的DCB功能类似)。.ascizstring”和.ascii类似,但不安排存储空间。.balign,以某种排列方式在内存中填充数值。(该指令与armasm中的A1.IGN类似)。PoWeJOf1.2表示排列方式,其值可为4,8,16或32,单位是byte:fiI1.value是要填充的值:max_Padding最大的填充界限,恳求填充的bytes数超过该值,将被忽视。.byte,定义一个或多个Byte,并为之安排空间(与armasm的D

11、CB类似)。.code设定指令宽度,16表示ThUmb,32表示ARMassembly(和armasm中的CODE16C0DE32一样)0.if.else.endif预编译宏(与armasm中的IFE1.SEENDlF一样)。,end汇编文件完毕标记,经常省略不用。.endm宏完毕标记。.cxitm宏跳出。.macroarg_l)(,(,定义一段名为name的宏,arg_xxx为参数。必需有对应的.endm结尾。可以运用.exitm从中间跳出宏。(与armasm中的MACRO,MEND,MEXIT一样)。在运用宏参数时必需这样运用:“Karg。例如:CODE.macroSHIFT1.EFTa,

12、b.ifb0MOVa,a,ASR#-b.exitm.endifMOVa,a.1.S1.#b.endm.rept循环执行.endr前的代码段number_of_times次。(与armasn中的WEN相像).irp,循环执行.endr前的代码段,param依次取后面给出的值。在循环执行的代码段中必需以表示参数。.endr完毕循环(与armasm中的WEND相像).equ,为一个标号赋值,类似C中的#defineo(与armasm中的EQU-*样).err编译错误报告,将引起编译的终止。.global全局声明标记,这样声明的标号将可以被外部运用。(与armasm中的EXPORT一样)。.hword

13、(,插入一个16-bit的数据队列。(与armasm中的DCW一样).ifdef假如symbol被定义,该快代码将被编译。以.endif完毕。.ifndef假如symbol未被定义,该快代码将被编译。以.endif完毕。.include”包含文件。(与armasm中的INC1.UDE或者C中的#include一样)req定义一个存放器,.req的左边是定义的存放器名,右边是运用的真正运用的存放器。(与armasm中的RN类似)例如:acc.reqrCODE,section,“w开场一个新的代码或数据段tcxl,代码段;.data,初始化数据段;.bss,未初始化数据段。这些段都有缺省的标记(flags),联接器可以识别这些标记。(与armasm中的AREA一样)。下面是E1.F格式允许的段标记标记含义a允许段W可写段X执行段.set,变量赋值。(与armasm中的SETA一样).space,安排number_of_bytes字节的数据空间,并填充其值为fill.byte,假设未指定该值,缺省填充0。(与armasm中的SP.CE功能

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 数据结构与算法

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!