欢迎来到天天文库
浏览记录
ID:45993620
大小:3.54 MB
页数:120页
时间:2019-11-20
《基于ARM的嵌入式程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五章基于ARM的嵌入式程序设计5.1ARM汇编语言的伪操作、宏指令与伪指令5.1.1两种常见的ARM编译开发环境5.1.2ADS编译环境下的伪操作和宏指令5.1.3GNU编译环境下的伪操作和宏指令5.1.4ARM汇编语言的伪指令ARM汇编语言的伪操作、宏指令与伪指令伪操作——为汇编程序所用,在源程序进行汇编时由汇编程序处理,只在汇编过程起作用,不参与程序运行。宏指令——通过伪操作定义的一段独立的代码。在调用它时将宏体插入到源程序中。伪指令——是汇编语言程序里的特殊指令助记符,在汇编时被合适的机器指令替代。5.1.1两种常见的ARM编译开发环境ADS/SDTID
2、E开发环境:它由ARM公司开发,使用了CodeWarrior公司的编译器;EmbestIDE开发环境:集成了GNU开发工具的IDE开发环境,由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。这两种开发环境的编译器都完全支持ARM指令集,但伪操作不同,代码风格不同。5.1.2ADS编译环境下的伪操作和宏指令ADS编译环境下的伪操作可分为以下几类:符号定义(SymbolDefinition)伪操作数据定义(DataDefinition)伪操作汇编控制(AssemblyControl)伪操作信息报告(Reporting)伪操作其他(Miscellaneous)伪
3、操作符号定义伪操作GBLA,GBLL,GBLS:声明全局变量。LCLA,LCLL,LCLS:声明局部变量。SETA,SETL,SETS:给变量赋值。RLIST:为通用寄存器列表定义名称。1、GBLA,GBLL,GBLS用于声明一个ARM程序中的全局变量,并将其初始化。GBLA:声明一个全局算术变量,并初始化成0。GBLL:声明一个全局逻辑变量,并初始化成{FALSE}。GBLS:声明一个全局串变量,并初始化成空串“”。语法格式:variable全局变量的作用范围为:包含该变量的源程序,全局变量名称在作用范围内必须唯一。2、LCLA,LCLL,LCLS用于
4、声明一个ARM程序中的局部变量,并将其初始化。LCLA:声明一个局部算术变量,并初始化成0。LCLL:声明一个局部逻辑变量,并初始化成{FALSE}。LCLS:声明一个局部串变量,并初始化成空串“”。语法格式:variable局部变量的作用范围为:包含该局部变量的宏代码的一个实例3、SETA,SETL,SETS用于给ARM程序中的变量赋值。SETA:给一个算术变量赋值。SETL:给一个逻辑变量赋值。SETS:给一个串变量赋值。语法格式:variableexpressionexpression:赋给变量的值。在向变量赋值前,必须先声明该变量。例
5、:GBLSS1GBLSS2LCLSS3S1SETS“strings1”S2SETS“strings2”S3SETSS1:CC:S2GBLLlogiclogicSETL{TRUE}LCLAarithmeticarithmeticSETA0xff;声明一个全局串变量s1;声明一个全局串变量s2;声明一个局部串变量s3;串变量s1赋值为“strings1”;串变量s2赋值为”strings2”;串变量s3赋值;声明一个全局逻辑变量logic;声明一个局部算术变量;变量logic赋初值为{TRUE};变量arithmetic赋初值为oxff4、RLIST为一个通用寄存器列表
6、定义名称。定义的名称可以在LDM/STM指令中使用。语法格式:nameRLIST{list-of-registers}name:寄存器列表名称。{list-of-registers}:通用寄存器列表。例:contextRLIST{R0-R6};将寄存器列表名称定义为contextLDMDFSP!,context;加载寄存器列表数据定义伪操作LTORG:声明一个数据缓冲池的开始。SPACE:分配一块内存单元,并用0初始化。MAP:定义一个结构化的内存表的首地址。FIELD:定义结构化内存表中的一个数据域。DCB:分配一段字节内存单元,并初始化。DCD、DCDU:分配一
7、段字内存单元,并初始化。1、LTORG用于声明一个数据缓冲池(文字池)的开始。语法格式:LTORG例:startBLfunc……funcLDRR1,=0x55555555;子程序……MOVPC,LR;子程序返回LTORG;定义数据缓冲池存放0x55555555DataSPACE4200;从当前位置开始分配4200字节的内存单元,并初始化为0。END默认数据缓冲池为空注意:LTORG伪操作通常放在无条件跳转指令之后,或者子程序返回指令之后,这样处理器不会错误地将数据缓冲池中的数据当作指令来执行。通常ARM汇编编译器把数据缓冲池放在代码段的最后面,即下一个代码段开始
此文档下载收益归作者所有