基于ARM的嵌入式程序设计ok.pptx
《基于ARM的嵌入式程序设计ok.pptx》由会员分享,可在线阅读,更多相关《基于ARM的嵌入式程序设计ok.pptx(79页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、5.1 ARM汇编语言的伪操作、宏指令与伪指令两种常见的ARM编译开发环境编译环境下的伪操作和宏指令编译环境下的伪操作和宏指令汇编语言的伪指令 第1页/共79页两种常见的ARM编译开发环境ADS/SDT IDE开发环境:它由ARM公司开发,使用了CodeWarrior公司的编译器;集成了GNU开发工具的IDE开发环境:它由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。第2页/共79页编译环境下的伪操作和宏指令 ADS编译环境下的伪操作可分为以下几类:符号定义(Symbol Definition)伪操作 数据定义(Data Definition)伪操作 汇编控制(Assembly C
2、ontrol)伪操作 信息报告(Reporting)伪操作 其他(Miscellaneous)伪操作 第3页/共79页符号定义伪操作 伪操作语法格式作用GBLAGBLAVariable声明一个全局的算术变量,并将其初始化成0。GBLLGBLLVariable声明一个全局的逻辑变量,并将其初始化成FALSE。GBLSGBLSVariable声明一个全局的字符串变量,并将其初始化成空串“”。LCLALCLAVariable声明一个局部的算术变量,并将其初始化成0。LCLLLCLLVariable声明一个局部的逻辑变量,并将其初始化成FALSE。LCLSLCLSVariable声明一个局部的串变量,
3、并将其初始化成空串“”。SETASETAVariableexpr给一个全局或局部算术变量赋值。SETLSETLVariableexpr给一个全局或局部逻辑变量赋值。SETSSETSVariableexpr给一个全局或局部字符串变量赋值。RLISTname LIST list of registers为一个通用寄存器列表定义名称。CNnameCNexpr为一个协处理器的寄存器定义名称。CPnameCPexpr为一个协处理器定义名称。DN/SNnameDN/SNexprDN/SN为一个双精度/单精度的VFP寄存器定义名称。FNnameFNexpr为一个FPA浮点寄存器定义名称。第4页/共79页数据
4、定义伪操作 伪操作语法格式作用LTORGLTORG声明一个数据缓冲池(也称为文字池)的开始。MAPMAPexpr,base-register定义一个结构化的内存表(StorageMap)的首地址。FIELDlabelFIELDexpr定义一个结构化内存表中的数据域。SPACElabelSPACEexpr分配一块连续内存单元,并用0初始化。DCBlabelDCBexpr,expr分配一段字节内存单元,并用expr初始化。DCD/DCDUlabelDCDexpr,expr分配一段字内存单元。DCDOlabelDCDOexpr,expr分配一段字对齐的字内存单元。DCFD/DCFDUlabelDCF
5、DUfpliteral,fpliteral为双精度的浮点数分配字对齐的内存单元。DCFS/DCFSUlabel DCFS U fpliteral,fpliteral为单精度的浮点数分配字对齐的内存单元。DCIlabel DCI expr,expr在ARM代码中分配一段字对齐的内存单元;在Thumb代码中,分配一段半字对齐的半字内存单元。DCQ/DCQUlabelDCQUliteral,literal分配一段以双字(8个字节)为单位的内存DCW/DCWUlabelDCWUexpr,exprDCW用于分配一段半字对齐的半字内存单元。第5页/共79页汇编控制伪操作 伪操作语法格式作用IF,ELSE及
6、ENDIFIFlogicalexpressionELSEENDIF能够根据条件把一段源代码包括在汇编语言程序内或者将其排除在程序之外。WHILE及WENDWHILElogicalexpressionWEND能够根据条件重复汇编相同的一段源代码。MACRO、MEND及MEXITMACRO$labelmacroname$parameter,$parameter;宏代码MENDMACRO标识宏定义的开始,MEND标识宏定义的结束。MERIT用于从宏中跳转出去。用MACRO和MEND定义的一段代码,称为宏定义体。通过宏名称来调用宏。第6页/共79页信息报告伪操作 伪操作语法格式作用ASSERTASSE
7、RTlogicalexpression对汇编程序的第二遍扫描中,如果其中ASSERT中条件不成立,ASSERT伪操作将报告该错误信息。INFOINFO numeric-expression,string-expression在汇编处理过程的第一遍扫描或者第二遍扫描时INFO伪操作报告诊断信息。OPTOPTn通过OPT伪操作可以在源程序中设置列表选项。TTLTTLtitle在列表文件的每一页的开头插入一个标题。SUBTSUBTsubtitle在列表文件的每一页的开头插入一个子标题。第7页/共79页其他伪操作伪操作语法格式作用CODE16CODE16告诉汇编编译器后面的指令序列为16位的Thumb
8、指令CODE32CODE32告诉汇编编译器后面的指令序列为32位的ARM指令。EQUnameEQUexpr,type为数字常量、基于寄存器的值和程序中的标号(基于PC的值)定义一个字符名称。AREAAREA sectionname,attr,attr定义一个代码段或者数据段。ENTRYENTRY指定程序的入口点。ENDEND告诉编译器已经到了源程序结尾。ALIGNALIGNexpr,offset通过添加补丁字节使当前位置满足一定的对齐方式。EXPORT/GLOBALEXPORTsymbolWEAK声明一个符号可以被其他文件引用,相当于声明了一个全局变量。IMPORTIMPORTsymbolWE
9、AK告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。EXTERNEXTERNsymbolWEAK告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。GET/INCLUDEGETfilename将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。INCBININCBINfilename将一个文件包含到当前源文件中,被包含的文件不进行汇编处理。KEEPKEEPsymbol告诉编译器将局部符号包含在目标文件的符号表中。NOFPNOFP禁止源程序中包含浮点运算指令。REQUIREREQ
10、UIRElable指定段之间的相互依赖关系。RNnameRNexpr为一个特定的寄存器定义名称。ROUTnameROUT定义局部变量的有效范围。第8页/共79页编译环境下的伪操作和宏指令 GNU编译环境下的伪操作可分为以下几类:常量编译控制伪操作汇编程序代码控制伪操作宏及条件编译控制伪操作其他伪操作第9页/共79页常量编译控制伪操作 伪操作语法格式作用.byte.byteexpr,expr分配一段字节内存单元,并用expr初始化。.hword/.short.hword expr,expr分配一段半字内存单元,并用expr初始化。.ascii.asciiexpr,expr定义字符串expr(非零
11、结束符)。.asciz/.string.asciz expr,expr定义字符串expr(以/0为结束符)。.float/.single.floatexpr,expr定义一个32bitIEEE浮点数expr。.double.doubleexpr,expr定义64bitIEEE浮点数expr。word/.long/.int.word expr,expr分配一段字内存单元,并用expr初始化。.fill.fillrepeat,size,value分配一段字节内存单元,用size长度value填充repeat次。.zero.zerosize分配一段字节内存单元,并用0填充内存。.space/.ski
12、p.spacesize,value分配一段内存单元,用value将内存单元初始化。第10页/共79页字符编译控制.equ.equiv操作符.set.global.globl说明将symbol 定义为expr作用同.equ定义symbol为expr,若symbol已定义则出错将symbol 定义为全局标号使用同.global语法.equsymbol,expr.setsymbol,expr.equivsymbol,expr.globalsymbol.globlsymbol例子.equVersion,0.1.setCo,EMBEST.equivVersion,0.2.globalMyAsmFunc.
13、globlMyAsmFunc第11页/共79页汇编程序代码控制伪操作 伪操作语法格式作用.section.sectionexpr定义域中包含的段。.text.textsubsection将操作符开始的代码编译到代码段或代码段子段。.data.datasubsection将操作符开始的数据编译到数据段或数据段子段。.bss.bsssubsection将变量存放到.bss段或.bss段的子段。.code16/.thumb.code16.thumb表明当前汇编指令的指令集选择Thumb指令集。.code32/.arm.code32.arm表明当前汇编指令的指令集选择ARM指令集。.end.end标记
14、汇编文件的结束行,即标号后的代码不作处理。.include.include“filename”将一个源文件包含到当前源文件中。.align/.balign.alignalignment,fill,max通过添加填充字节使当前位置满足一定的对齐方式。第12页/共79页宏及条件编译控制伪操作 伪操作语法格式作用.macro、.exitm及.endm.macroacroname parameter,parameter.endm.macro伪操作标识宏定义的开始,.endm标识宏定义的结束。用.macro及.endm定义一段代码,称为宏定义体。.exitm伪操作用于提前退出宏。.ifdef,.else
15、及.endif.ifdefcondition.else.endif当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。其中else可以缺省。第13页/共79页其他伪操作 伪操作语法格式作用.eject.eject在汇编符号列表文件中插入一分页符。.list.list产生汇编列表(从.list到.nolist)。.nolist.nolist表示汇编列表结束处。.title.title“heading”使用“heading”作为标题。.sbttl.sbttl“heading”使用“heading”作为子标题。.ltorg.ltorg在当前段的当前地址(字对齐)产生一个文字池。.re
16、q.reqname,expr为一个特定的寄存器定义名称。.err.err使编译时产生错误报告。.print.printstring打印信息到标准输出。.fail.failexpr编译汇编文件时产生警告。第14页/共79页汇编语言的伪指令 伪指令语法格式作用ADRADRcondregister,expr将基于PC或基于寄存器的地址值读取到寄存器中。小范围的地址读取。ADRLADRL cond register,expr将基于PC或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。LDRLDR cond register,=expr|label-expr将一个32位的立即数或者一个地址值读取到
17、寄存器中。大范围的地址读取。NOPNOP在汇编时将被替换成ARM中的空操作。第15页/共79页5.2 ARM汇编语言程序设计ARM汇编中的文件格式汇编语言语句格式汇编语言编程的重点ARM汇编程序实例第16页/共79页汇编中的文件格式 ARM源程序文件(可简称为源文件)可以由任意一种文本编辑器来编写程序代码,它一般为文本格式。在ARM程序设计中,常用的源文件可简单分为以下几种:源程序文件文件名说明汇编程序文件*.S用ARM汇编语言编写的ARM程序或Thumb程序。C程序文件*.C用C语言编写的程序代码。头文件*.H为了简化源程序,把程序中常用到的常量命名、宏定义、数据结构定义等等单独放在一个文件
18、中,一般称为头文件。第17页/共79页汇编语言语句格式 ARM汇编语言语句格式如下所示:symbol instruction|directive|pseudo-instruction ;comment 其中:instruction为指令。directive为伪操作。pseudo-instruction为伪指令。symbol为符号。comment为语句的注释。第18页/共79页 ARM汇编语言程序格式 ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到
19、的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。第19页/共79页举例说明ARM汇编语言源程序的基本结构.equx,45/*x=45*/.equy,64/*y=64*/.equstack_top,0 x1000/*define the top address for stacks*/.global _start.text_start:/*code start*/movsp,#stack_topmovr0,#x /*put x value into R0*/strr0,sp/*save the value of R0 into stacks */movr0,#y/
20、*put y value into R0 */ldrr1,sp/*read the data from stack,and put it into R1*/ADDr0,r0,r1STRr0,spstop:bstop/*end the code,cycling*/.end第20页/共79页ARM汇编语言编程的重点 ARM数据处理操作设置条件码汇编语言子程序调用及返回 跳转表思想ARM与Thumb之间的状态转换及函数的相调用第21页/共79页ARM数据处理操作ARM中数据的处理有以下三种形式:简单的寄存器操作 立即数操作寄存器移位操作 其中32位立即数在32位指令中的编码以及ARM特有的寄存器移位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 嵌入式 程序设计 ok
限制150内