第5章第1节arm汇编语言的伪操作傅扬烈

上传人:小** 文档编号:45551590 上传时间:2018-06-17 格式:PPT 页数:45 大小:176.02KB
返回 下载 相关 举报
第5章第1节arm汇编语言的伪操作傅扬烈_第1页
第1页 / 共45页
第5章第1节arm汇编语言的伪操作傅扬烈_第2页
第2页 / 共45页
第5章第1节arm汇编语言的伪操作傅扬烈_第3页
第3页 / 共45页
第5章第1节arm汇编语言的伪操作傅扬烈_第4页
第4页 / 共45页
第5章第1节arm汇编语言的伪操作傅扬烈_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《第5章第1节arm汇编语言的伪操作傅扬烈》由会员分享,可在线阅读,更多相关《第5章第1节arm汇编语言的伪操作傅扬烈(45页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统开发与应用嵌入式系统开发与应用傅扬烈 计算机应用教研室 407#理论教学内容安排理论教学内容安排1. 1.嵌入式系统开发与应用基础综述嵌入式系统开发与应用基础综述2. 2.ARMARM体系结构及体系结构及ARMARM指令介绍指令介绍3. 3.基于基于ARMARM的嵌入式软件开发基础的嵌入式软件开发基础4. 4.基于基于S3C44B0XS3C44B0X嵌入式系统应用开发实例介绍嵌入式系统应用开发实例介绍嵌入式系统开发与应用嵌入式系统开发与应用第三部分第三部分基于基于ARMARM的嵌入式软件开发基础的嵌入式软件开发基础基于基于ARMARM的嵌入式软件开发基础的嵌入式软件开发基础1. 1.

2、ARMARM汇编语言的伪操作、宏指令与伪指令汇编语言的伪操作、宏指令与伪指令2. 2.ARMARM汇编语言程序设计汇编语言程序设计 3.3.嵌入式嵌入式C C语言程序设计基础语言程序设计基础 4.4.嵌入式嵌入式C C语言程序设计实例语言程序设计实例5. 5.嵌入式嵌入式C C语言程序设计技巧语言程序设计技巧6. 6.C C与汇编语言混合编程与汇编语言混合编程 7.7.基于基于EmbestEmbest IDE for ARM IDE for ARM 环境的软件开发环境的软件开发 实例实例第一讲第一讲ARMARM汇编语言的伪操作、宏指令汇编语言的伪操作、宏指令 与伪指令与伪指令ARMARM汇编语

3、言的伪操作、宏指令与伪汇编语言的伪操作、宏指令与伪 指令指令伪操作、宏指令及伪指令概念n两种常见的ARM编译环境ADS编译环境下的伪操作nGNU编译环境下的伪操作nARM汇编语言的伪指令一、伪操作、宏指令 及伪指令的概 念n伪操作是ARM汇编语言程序里的一些特殊指令助 记符,主要是为完成汇编程序做各种准备工作,在 源程序进行汇编时由汇编程序处理,而不是在处理 器运行期间由机器执行。n宏指令是一段独立的程序代码,它通过伪操作来 定义。通过宏名来调用宏,并可以设置相应的参数 。宏定义本身不会产生代码,只是在调用它时把宏 体插入到源程序中。n伪指令也是ARM汇编语言程序里的特殊指令助记 符,也不在处

4、理器运行期间由机器执行,它们在汇 编时将被合适的机器指令代替成ARM或Thumb指 令从而实现真正指令操作。 二、两种常见的ARM编译开发环境ADS/SDT IDE开发环境:它由ARM公司 开发,使用了CodeWarrior公司的编译 器; 集成了GNU开发工具的IDE开发环境: :它由GNU的汇编器as、交叉编译器gcc 、和链接器ld等组成。 三、ADS编译环境下的伪操作和宏 指令 ADS编译环境下的伪操作可分为以 下几类:符号定义(Symbol Definition)伪操作 数据定义(Data Definition)伪操作 汇编控制(Assembly Control)伪操作 信息报告(R

5、eporting)伪操作 其他(Miscellaneous)伪操作 1 符号定义(Symbol Definition)伪指 令n符号定义伪指令用于定义ARM汇编程序 中的变量、对变量赋值以及定义寄存器的 别名等操作。常见的符号定义伪指令有如 下几种:n用于定义全局变量的GBLA、GBLL和 GBLS。n用于定义局部变量的LCLA、LCLL和 LCLS。n用于对变量赋值的SETA、SETL、SETS 。n为通用寄存器列表定义名称的RLIST。GBLA、GBLL和GBLSn语法格式:nGBLA(GBLL或GBLS) 全局变量名nGBLA、GBLL和GBLS伪指令用于定义一个ARM程 序中的全局变量

6、,并将其初始化。其中:nGBLA伪指令用于定义一个全局的数字变 量,并初始化为0;nGBLL伪指令用于定义一个全局的逻辑变 量,并初始化为F(假);nGBLS伪指令用于定义一个全局的字符串 变量,并初始化为空;n由于以上三条伪指令用于定义全局变量,因此在整个程 序范围内变量名必须唯一。n使用示例:nGBLATest1;定义一个全局的数字变量,变量 名为Test1nTest1SETA0xaa;将该变量赋值为0xaanGBLLTest2;定义一个全局的逻辑变量,变量 名为Test2nTest2SETLTRUE;将该变量赋值 为真nGBLSTest3;定义一个全局的字符串变量,变 量名为Test3n

7、Test3SETS“Testing”;将该变量赋值 为“Testing”LCLA、LCLL和LCLSn语法格式:nLCLA(LCLL或LCLS)局部变量名nLCLA、LCLL和LCLS伪指令用于定义一个ARM程序 中的局部变量,并将其初始化。其中:nLCLA伪指令用于定义一个局部的数字变 量,并初始化为0;nLCLL伪指令用于定义一个局部的逻辑变 量,并初始化为F(假);nLCLS伪指令用于定义一个局部的字符串 变量,并初始化为空;n以上三条伪指令用于声明局部变量,在其作用范围内变 量名必须唯一。n使用示例:nLCLATest4;声明一个局部的数字变量,变量 名为Test4nTest3SETA

8、0xaa;将该变量赋值为0xaanLCLLTest5;声明一个局部的逻辑变量,变量 名为Test5nTest4SETLTRUE;将该变 量赋值为真nLCLSTest6;定义一个局部的字符串变量,变 量名为Test6nTest6SETS“Testing”;将该变量赋值 为“Testing”SETA、SETL和SETSn语法格式:n变量名 SETA(SETL或SETS)表达式n伪指令SETA、SETL、SETS用于给一个已经定义的全局变 量或局部变量赋值。nSETA伪指令用于给一个数学变量赋值;nSETL伪指令用于给一个逻辑变量赋值;nSETS伪指令用于给一个字符串变量赋值;n其中,变量名为已经定

9、义过的全局变量或局部变量,表达式 为将要赋给变量的值。n使用示例:nLCLATest3;声明一个局部的数字变量, 变量名为Test3nTest3SETA0xaa;将该变量赋值为0xaanLCLLTest4;声明一个局部的逻辑变量, 变量名为Test4nTest4SETLTRUE;将该变量赋 值为真RLISTn语法格式:n名称 RLIST寄存器列表nRLIST伪指令可用于对一个通用寄存器列表定义 名称,使用该伪指令定义的名称可在ARM指令 LDM/STM中使用。在LDM/STM指令中,列表中 的寄存器访问次序为根据寄存器的编号由低到高, 而与列表中的寄存器排列次序无关。n使用示例:nRegLis

10、tRLISTR0-R5,R8, R10;将寄存器列表名称定义为RegList,可在 ARM指令LDM/STM中通过该名称访问寄存器列表 。2.数据定义(Data Definition)伪 指令 n数据定义伪指令一般用于为特定的数据分配存储单元,同 时可完成已分配存储单元的初始化。常见的数据定义伪指令 有如下几种:nDCB:用于分配一片连续的字节存储单元并用指定的数 据初始化。 (8 位值) nDCW(DCWU):用于分配一片连续的半字存储单元 并用指定的数据初始化。(16 位值)nDCD(DCDU):用于分配一片连续的字存储单元并用 指定的数据初始化。(32 位值) nDCFD(DCFDU):

11、用于为双精度的浮点数分配一片连 续的字存储单元并用指定的数据初始化。nDCFS(DCFSU):用于为单精度的浮点数分配一片连 续的字存储单元并用指定的数据初始化。nDCQ(DCQU):用于分配一片以8字节为单位的连续 的存储单元并用指定的数据初始化。nSPACE:用于分配一片连续的存储单元nMAP:用于定义一个结构化的内存表首地址nFIELD:用于定义一个结构化的内存表的数据域DCB和DCW(或DCWU)nDCBn语法格式:n标号DCB表达式nDCB伪指令用于分配一片连续的字节存储单元并用伪指令中指定的表达 式初始化。其中,表达式可以为0255的数字或字符串。DCB也可用“=” 代替。n使用示

12、例:nStrDCB“This is a test!” ;分配一片连续的字节 存储单元并初始化。nDCW(或DCWU)n语法格式:n标号DCW(或DCWU)表达式nDCW(或DCWU)伪指令用于分配一片连续的半字存储单元并用伪指令 中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。n用DCW分配的字存储单元是半字对齐的;而用DCWU分配的字存储单元 并不严格半字对齐。n使用示例:nDataTestDCW1,2,3;分配一片连续的半字存储单元并 初始化。DCD(或DCDU)与DCFD(或DCFDUnDCD(或DCDU)n语法格式:n标号DCD(或DCDU)表达式nDCD(或DCDU)伪

13、指令用于分配一片连续的字存储单元并用伪指令中 指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。DCD 也可用“&”代替。n用DCD分配的字存储单元是字对齐的,而用DCDU分配的字存储单元并 不严格字对齐。n使用示例:nDataTestDCD4,5,6;分配一片连续的字存储单元并初 始化。nDCFD(或DCFDU)n语法格式:n标号DCFD(或DCFDU)表达式nDCFD(或DCFDU)伪指令用于为双精度的浮点数分配一片连续的字存 储单元并用伪指令中指定的表达式初始化。每个双精度的浮点数占据两个 字单元。n用DCFD分配的字存储单元是字对齐的,而用DCFDU分配的字存储单元 并不严格

14、字对齐。n使用示例:nFDataTestDCFD2E115,-5E7;分配一片连续 的字存储单元并初始化为指定的双精度数。DCFS(或DCFSU)与DCQ(或DCQU)nDCFS(或DCFSU)n语法格式:n标号DCFS(或DCFSU)表达式nDCFS(或DCFSU)伪指令用于为单精度的浮点数分配一片连续的字存 储单元并用伪指令中指定的表达式初始化。每个单精度的浮点数占据一个 字单元。n用DCFS分配的字存储单元是字对齐的,而用DCFSU分配的字存储单元 并不严格字对齐。n使用示例:nFDataTest DCFS 2E5,-5E7 ;分配一片连续的字存储单 元并初始化为指定的单精度数。nDCQ

15、(或DCQU)n语法格式:n标号DCQ(或DCQU)表达式nDCQ(或DCQU)伪指令用于分配一片以8个字节为单位的连续存储区域 并用伪指令中指定的表达式初始化。n用DCQ分配的存储单元是字对齐的,而用DCQU分配的存储单元并不严 格字对齐。n使用示例:nDataTestDCQ100;分配一片连续的存储单 元并初始化为指定的值。SPACE与MAPnSPACEn语法格式:n标号SPACE 表达式nSPACE伪指令用于分配一片连续的存储区域并初始化为0。其中,表达式 为要分配的字节数。SPACE也可用“”代替。n使用示例:nDataSpace SPACE 100;分配连续100字节的存储单元并初

16、始化为0。nMAPn语法格式:nMAP表达式,基址寄存器nMAP伪指令用于定义一个结构化的内存表的首地址。MAP也可用“”代 替。n表达式可以为程序中的标号或数学表达式,基址寄存器为可选项,当基 址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在 时,内存表的首地址为表达式的值与基址寄存器的和。nMAP伪指令通常与FIELD伪指令配合使用来定义结构化的内存表。n使用示例:nMAP0x100,R0;定义结构化内存表首地址的值为 0x100R0。FILEDnFILEDn语法格式:n标号FIELD 表达式nFIELD伪指令用于定义一个结构化内存表中的数据域。FILED也可用“#” 代替。n表达式的值为当前数据域在内存表中所占的字节数。nFIELD伪指令常与MAP伪指令配合使用来定义结构化的内存表。MAP伪指令 定义内存表的首地址,FIELD伪指令定义内存表中的各个数据域,并可以为 每个数据域指定一个标号供其他的指令引用。n注意MAP和FIELD伪指令仅用于定义数据结构,并不实际分配存储单元 。n使用示例:nM

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号