ARM语言程序设计思路.ppt
《ARM语言程序设计思路.ppt》由会员分享,可在线阅读,更多相关《ARM语言程序设计思路.ppt(100页珍藏版)》请在咨信网上搜索。
1、第4章ARM汇编语言程序设计n4.1ARM汇编伪指令与伪操作n4.2ARM汇编语言的语句格式n4.3ARM汇编语言的程序格式n4.4ADTIDE集成开发环境n4.5ARM汇编语言程序设计举例n4.6汇编语言与C语言的混合编程1两种常用的ARM编译开发环境nADS/SDT、RealViewMDK等ARM公司推出的开发工具nGNUARM开发工具ARM汇编语言的伪操作、宏指令在不同的编译环境下有不同的编写形式和规则21)ADS/SDT、RealViewMDK等ARM公司推出的开发工具ADS由ARM公司推出,使用了CodeWarrior公司的编译器。针对ARM资源配置为用户提供了在CodeWarrio
2、rIDE集成环境下配置各种ARM开发工具的能力。以ARM为目标平台的工程创建向导,可以使用户以此为基础,快速创建ARM和Thumb工程。ARM将Keil公司收购之后,正式推出了针对ARM微控制器的开发工具RealViewMicrocontrollerDevelopmentKit(简称RealViewMDK或者MDK),它将ARM开发工具RealViewDevelopmentSuite(简称RVDS)的编译器RVCT与Keil的工程管理、调试仿真工具集成在一起,是一款非常强大的ARM微控制器开发工具。32)GNUARM开发工具GNU是“GNUsNotUnix”的递归缩写。在1983年9月27日由
3、RichardStallman公开发起GNU计划,它的目标是创建一套完全自由的操作系统。GNU格式ARM汇编语言程序主要是面对在ARM平台上移植嵌入式Linux操作系统,GNU组织开发的基于ARM平台的编译工具有主要由GNU的汇编器as,交叉汇编器gcc和连接器ld组成。44.1ARM汇编伪指令与伪操作1.汇编语言伪指令2.ARM汇编伪操作3.GNUARM汇编伪操作51.汇编语言伪指令n伪指令是ARM处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机器执行,只是在汇编时被翻译成ARM或者Thumb(或Thumb-2)指令(或指令序列),从而实现真正的指令操作。nARM伪指令包含A
4、DR、ADRL、LDR等。61)小范围地址读取伪指令ADR格式ADRcond.Wregister,label功能将基于PC相对偏移地址或基于寄存器相对偏移地址值读取到寄存器中当地址值是字节对齐时,取值范围为255255当地址值是字对齐时,取值范围为10201020当地址值是16字节对齐时其取值范围更大ADR伪指令被汇编器编译成一条指令。汇编器通常使用ADD指令或SUB指令来实现伪操作的地址装载功能。如果不能用一条指令来实现ADR伪指令的功能,汇编器将报告错误。7示例下列指令存放在0 x8000起始的地址单元,分析汇编后的结果。.global_start.text_start:MOVR0,#0
5、x0FADRR0,_start.end解:汇编后的结果为:0 x00008000MOVR0,#0 x0F0 x00008004SUBR0,PC,#1282)中等范围地址读取伪指令ADRL格式ADRLcondregister,label功能将基于PC相对偏移的地址或基于寄存器相对偏移的地址值读取到寄存器中当地址值是字节对齐时,取值范围为6464KB;当地址值是字对齐时,取值范围为256256KB。当地址值是16字节对齐时,其取值范围更大。ADRL伪指令被编译器换成两条指令。即使一条指令可以完成该操作,编译器也将产生两条指令,其中一条为多余指令。如果汇编器不能在两条指令内完成操作,将报告错误,中止
6、编译。9示例以下指令存放在0 x8000起始的地址单元,分析汇编后的结果。.global_start.text_start:MOVR0,#0 x0FADRLR0,_start.end解:汇编后的结果为:0 x00008000MOVR0,#0 x0F0 x00008004SUBR0,PC,#120 x00008008NOP(MOVR0,R0)10格式LDRcond.Wregister,=expr|label-expr功能将一个32位的常数或者一个地址值读取到寄存器中,可以看作是加载寄存器的内容。如果加载的常数符合MOV或MVN指令立即数的要求,则用MOV或MVN指令替代LDR伪指令。如果加载的常
7、数不符合MOV或MVN指令立即数的要求,汇编器将常量放入数据缓存池,并使用一条程序相对偏移的LDR指令从数据缓存池读出常量。3)大范围地址读取伪指令LDR11示例将常数0 xff0读到R1中。LDRR3,=0 xff0;汇编后将得到:MOVR3,#0 xff0将常数0 xfff读到R1中。LDRR1,=0 xfff;汇编后将得到:LDRR1,pc,offset_to_litpoollitpoolDCD0 xfff12将place标号地址读入R1中。LDRR2,=place;汇编后将得到:LDRR2,pc,offset_to_litpoollitpoolDCDplace132.ARM汇编伪操作n
8、伪操作(Directive)是ARM汇编语言程序里的一些特殊的指令助记符,其作用主要是为完成汇编程序做各种准备工作,对源程序运行汇编程序处理,而不是在计算机运行期间由处理器执行。n伪操作只是汇编过程中起作用,一旦汇编结束,伪操作也就随之消失。nARM公司推出的开发工具所支持的汇编伪操作符号定义伪操作数据定义伪操作汇编控制伪操作杂项伪操作141)符号定义伪操作(1)全局变量定义GCLA、GCLL及GCLS(2)局部变量定义LCLA、LCLL及LCLS格式:GCLA/GCLL/GCLS variable格式:LCLA/GCLL/GCLS variable说明variable全局/局部变量名称A算术
9、变量(初始化为0)L逻辑变量(初始化为假F)S字符串变量(初始化为空)15(3)变量赋值伪操作SETA、SETL及SETS格式VariableSETA/SETL/SETSexpr说明Expr算术、逻辑或字符串表达式,也就是将要赋予变量的值示例LCLATest4Test3SETA0 xaaLCLLTest5Test4SETLTRUELCLSTest6Test6SETSTesting16(4)给通用寄存器列表定义名称RLIST格式:NameRLISTlist-of-registers说明Name寄存器列表的名称list-of-registers通用寄存器列表示例将寄存器列表名称定义为RegList
10、,可在ARM指令LDM/STM中通过该名称访问寄存器列表。RegListRLISTR0-R5,R8,R10172)数据定义伪操作n数据定义伪操作一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。DCB/DCW(DCWU)/DCD(DCDU)/DCQ(DCQU)DCFD(DCFDU)/DCFS(DCFSU)LTORGSPACEMAP/FIELD18(1)DCD(DCDU)格式label DCD expr,exprlabel DCDUexpr,expr说明Label可选的程序标号;Expr表达式。DCD可能在分配的内存单元前加13字节以保证内存字对齐。当程序对内存对齐方式要求不严
11、格时可以是DCDU伪操作。19示例StrDCBThisisatest!C_stringDCBC_string,0DataTestDCW1,2,3DataDCW-255,2*numberDCWUnumber+4DataTestDCD4,5,6DataTestDCQ10020(2)声明数据缓存池LTORG在使用LDR伪指令时,要在适当的位置加入LTROG声明数据缓存池,这样就会把要加载的数据保存到缓存池中,再使用ARM加载指令读出,如果没有使用LTROG声明数据缓冲池,则汇编器会在程序末尾自动声明。格式:LTROG21(3)分配存储空间SPACE格式labelSPACEexpr说明Label可选的
12、程序标号;Expr分配的字节数。示例分配连续100字节的存储单元并初始化为0。DataSpaceSPACE10022(4)定义结构化内存表首地址/数据域格式MAPexpr,base_registerlabelFIELDexpr示例定义一个内存表,其首地址为0 x100。该表包含3个域:A的长度为16个字节,位置为0 x100;B的长度为32个字节,位置为0 x110;S的长度为256个字节,位置为0 x130。MAP0 x100AFIELD16BFIELD32SFIELD256一个寄存器相关的首地址定义结构化内存表。MAP0,R9;将结构化内存表的首地址设为R9的值FIELD4LABFIELD
13、4LDRr0,LAB;相当于LDRR0,R9,#4233)汇编控制伪操作n汇编器在对程序代码进行编译时,会根据汇编控制伪操作的定义情况对程序进行编译。n常用的汇编控制伪操作条件编译(IF、ELSE、ENDIF)重复汇编(WHILE、WEND)宏定义(MACRO、MEND、MEXIT)244)杂项伪操作nAREAnALIGNnENTRYnENDnEQUnEXPORT(或GLOBAL)nEXPORTASnIMPORT/EXTERNnGET(或INCLUDE)/INCBIN25(1)段属性定义伪操作AREA格式AREAsectionname,attr,attr.说明定义一个代码段或数据段,AREA伪
14、操作指示汇编器汇编新的代码段或数据段。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。Sectionname指定所定义段的段名。段名若以数字开头,则该段名需用“|”括起来,如:|1_test|。Attr指定代码段或数据段的属性。在AREA伪操作中,各属性之间用逗号隔开。26段属性及说明27(2)对齐方式设置ALIGN格式:ALIGNexpr,offset,pad说明对齐方式设置ALIGN伪操作通过用零或NOP指令进行填充来使当前位置与指定的边界对齐。Expr对齐表达式。表达式的值用于指定对齐方式,可能的取值为2的幂,如1、2、4、8、16等。若未指定表达式,则将当前位置
15、对齐到下一个字的位置。Offset偏移量,若使用该字段,则当前位置的对齐方式为:n*expr+偏移量。Pad用作填充的字节。如果没有指定pad,用零填充28示例通过ALIGN伪操作使程序中的地址标号字对齐。AREAExample,CODE,READONLYSTARTLDRR0,=SdfjkMOVPC,LRSdfjkDCB0 x58ALIGN;声明字对齐SUBIMOVR1,R3;其他代码MOVPC,LR29(3)声明程序的入口点ENTRY格式:ENTRY说明一个完整的汇编程序中至少要有一个ENTRY,如果在程序连接时没有发现ENTRY伪操作,连接器将产生警告信息。在一个源文件里最多只能有一个EN
16、TRY,如果多个ENTRY同时出现在源文件中,汇编时将产生错误信息。示例AREAInit,CODE,READONLYENTRY;指定应用程序的入口点30(4)源程序结尾标识END格式:END说明END伪操作用于通知汇编程序已经到了源程序的结尾。每一个汇编源文件必须以END结束。示例AREAInit,CODE,READONLYEND31(5)定义常量或标号名称EQU格式:nameEQUexpr,type说明为程序中的常量、标号等定义一个等效的符号名称。name符号名称。expr32位表达式。其值为基于寄存器的地址值、程序中的标号、32位的地址常量或32位的常量。Type数据类型,为一个可选项。示
17、例TestEQU50;定义标号Test的值为50AddrEQU0 x55,CODE32;定义Addr的值为0 x55,且该处为32位的ARM指令32(6)声明全局标号EXPORT(或GLOBAL)格式:EXPORTsymbolWEAK,attr说明用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。EXPORT可用GLOBAL代替。Symbol声明的符号名称。名称区分大小写。如果symbol被忽略,所有符号被定义为可以被其他文件引用属性。WEAK声明其他的同名标号优先于该标号被引用。attr符号属性。默认情况下,被定义为全局的(global)的符号对其他文件是“可见的”,也就是说可以被
18、其他文件引用。33(7)将符号导出到目标文件EXPORTAS格式:EXPORTASsymbol1,symbol2说明用于修改已被编译的目标文件中的符号。Symbol1源文件中的符号名。symbol1必须在源文件中已被定义。它可以是段名、标号或常量。symbol2,希望在目标文件中出现的符号名称,该符号名称区分大小写。34(8)外部符号声明IMPORT和EXTERN格式IMPORTsymbolattrIMPORTsymbolWEAK,attrEXTERNsymbolattrEXTERNsymbolWEAK,attr说明IMPORT不管当前源文件中是否引用都导入到当前源文件的符号表中EXTERN在
19、当前源文件中引用时才导入到当前源文件的符号表中35(9)文件包含伪操作GET和INCBIN格式GET(或INCLUDE)filenameINCBINfilename说明GET(或INCLUDE)将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理INCBIN将一个源文件包含到当前源文件中,但被包含文件不进行汇编处理363.GNUARM汇编伪操作n符号定义伪操作n数据定义伪操作n汇编与反汇编代码控制伪操作n预定义控制伪操作371)符号定义伪操作(1)常量定义伪操作.equ或.set格式.equ symbol,expr.set symbol,expr说明Symbol要指定的名称
20、,它可以是以前定义过的符号;Expr表示数字常量或程序中的标号。38示例.equUndef_Mode,0 x1B.equMode_Mask,0 x1F.equNOINT,0 xC0.global_start.text_start:MRSR0,CPSR读CPSRBICR0,R0,#Mode_MaskORRR1,R0,#Undef_Mode|NOINT修改MSRCPSR_cxsf,R1进入未定义模式Stop:BStop使程序停在此处查看结果.end39(2)常量定义伪操作.equiv格式:.equivsymbol,expr说明Symbol要指定的名称,它不可以是以前定义过的符号;Expr表示数字常
21、量或程序中的标号。40(3)声明全局变量伪操作.global或.globl格式.globalsymbol.globlsymbol说明Symbol为要声明的全局变量名称,该变量可以被其它文件引用。41(4)声明外部变量伪操作.extern格式:.extern symbol说明symbol为要声明的外部变量名称,该变量在其它文件中被定义。422)数据定义伪操作(1)字节定义.byte格式:.byteexpr,expr说明expr数字表达式或程序中的标号。(2)半字定义.hword或.short格式.hwordexpr,expr.shortexpr,expr说明expr数字表达式或程序中的标号。43
22、(3)字定义.word或.int或.long格式.wordexpr,expr.intexpr,expr.longexpr,expr说明expr数字表达式或程序中的标号。(4)双字定义.quad格式:.quadexpr,expr说明expr数字表达式。44(6)字符串定义.ascii和.asciz或.string格式.asciiexpr,expr.ascizexpr,expr.stringexpr,expr说明expr表示字符串。(5)四字定义.octa格式:.octaexpr,expr说明expr数字表达式。45(7)单精度浮点数定义.float或.single格式.floatexpr,exp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 语言程序设计 思路
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。