徐春雷ARM体系结构域编程第4章

上传人:飞****9 文档编号:131965874 上传时间:2020-05-11 格式:PPT 页数:24 大小:873KB
返回 下载 相关 举报
徐春雷ARM体系结构域编程第4章_第1页
第1页 / 共24页
徐春雷ARM体系结构域编程第4章_第2页
第2页 / 共24页
徐春雷ARM体系结构域编程第4章_第3页
第3页 / 共24页
徐春雷ARM体系结构域编程第4章_第4页
第4页 / 共24页
徐春雷ARM体系结构域编程第4章_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《徐春雷ARM体系结构域编程第4章》由会员分享,可在线阅读,更多相关《徐春雷ARM体系结构域编程第4章(24页珍藏版)》请在金锄头文库上搜索。

1、2 第4章ARM汇编语言程序设计 本章介绍如何编写ARM和Thumb汇编语言程序 同时介绍ARM汇编编译器armasm的使用方法 3 4 1伪操作 ARM汇编语言源程序中语句由指令 伪操作和宏指令组成 在ARM中伪操作称为derective 这里为保持和国内在IBMPC汇编语言中对名词翻译的一致性derective称为伪操作 同样在ARM中宏指令被称为pseudo instruction 这里将其称为宏指令 宏指令也是通过伪操作定义的 本节介绍以下类型的ARM伪操作和宏指令 符号定义 Symboldefinition 伪操作 数据定义 Datadefinition 伪操作 汇编控制 Assem

2、blycontrol 伪操作 框架描述 Framedescription 伪操作 信息报告 Reporting 伪操作 其他 Miscellaneous 伪操作 4 4 1 1符号定义伪操作 符号定义 Symboldefinition 伪操作用于定义ARM汇编程序中的变量 对变量进行赋值以及定义寄存器名称 包括以下伪操作 GBLA GBLL及GBLS声明全局变量 LCLA LCLL及LCLS声明局部变量 SETA SETL及SETS给变量赋值 RLIST为通用寄存器列表定义名称 CN为协处理器的寄存器定义名称 CP为协处理器定义名称 DN及SN为VFP的寄存器定义名称 FN为FPA的浮点寄存器

3、定义名称 5 4 1 2数据定义伪操作 数据定义 Datadefinition 伪操作包括以下的伪操作 LTORG声明一个数据缓冲池 literalpool 的开始 MAP定义一个结构化的内存表 storagemap 的首地址 FIELD定义结构化的内存表中的一个数据域 field SPACE分配一块内存单元 并用0初始化 DCB分配一段字节的内存单元 并用指定的数据初始化 DCD及DCDU分配一段字的内存单元 并用指定的数据初始化 DCDO分配一段字的内存单元 并将个单元的内容初始化成该单元相对于静态基值寄存器的偏移量 6 4 1 2数据定义伪操作 DCFD及DCFDU分配一段双字的内存单元

4、 并用双精度的浮点数据初始化 DCFS及DCFSU分配一段字的内存单元 并用单精度的浮点数据初始化 DCI分配一段字节的内存单元 用指定的数据初始化 指定内存单元中存放的是代码 而不是数据 DCQ及DCQU分配一段双字的内存单元 并用64位的整数数据初始化 DCW及DCWU分配一段半字的内存单元 并用指定的数据初始化 DATA在代码段中使用数据 现已不再使用 仅用于保持向前兼容 7 4 1 3汇编控制伪操作 汇编控制 Assemblycontrol 伪操作包括下面的伪操作 IF ELSE及ENDIFWHILE及WENDMACRO及MENDMEXIT 8 4 1 4栈中数据帧描述伪操作 栈中数据

5、帧描述伪操作主要用于调试 这里不介绍这部分内容 感兴趣的读者可以参考ARM的相关资料 9 4 1 5信息报告伪操作 信息报告 Reporting 伪操作包括伪操作 ASSERTINFOOPTTTL及SUBT 10 4 1 6其他的伪操作 这些杂类的伪操作包括 ALIGNAREACODE16及CODE32ENDENTRYEQUEXPORT或GLOBALEXTERN 11 4 1 6其他的伪操作 GET或INCLUDEIMPORTINCBINKEEPNOFPREQUIREREQUIRE8及PRESERVE8RNROUT 12 4 2ARM汇编语言伪指令 ARM中伪指令不是真正的ARM指令或者Thu

6、mb指令 这些伪指令在汇编编译器对源程序进行汇编处理时被替换成对应的ARM或者Thumb指令 序列 1 ADR 小范围的地址读取伪指令 2 ADRL 中等范围的地址读取伪指令 3 LDR大范围的地址读取伪指令4 NOP空操作伪指令 13 4 3ARM汇编语言语句格式 ARM汇编语言语句格式如下所示 symbol instruction directive pseudo instruction comment 在ARM汇编语言中 各个指令 伪指令及伪操作的助记符必须全部用大写字母 或者全部用小写字母 不能在一个伪操作助记符中既有大写字母又有小写字母 源程序中 语句之间可以插入空行 以源代码的可读

7、性更好 如果一条语句很长 为了提高可读性 可以将该长语句分成若干行来写 这时在一行的末尾用 表示下一行将续在本行之后 14 4 3 1ARM汇编语言中的符号 在ARM汇编语言中 符号 symbols 可以代表地址 addresses 变量 variables 和数字常量 numericconstants 符号的命名规则如下 符号由大小写字母 数字以及下划线组成 局部标号以数字开头 其他的符号都不能以数字开头 符号是区分大小写的 符号中的所有字符都是有意义的 符号在其作用范围内必须惟一 即在其作用范围内不可有同名的符号 程序中的符号不能与系统内部变量或者系统预定义的符号同名 程序中的符号通常不要

8、与指令助记符或者伪操作同名 15 4 3 1ARM汇编语言中的符号 1 变量2 数字常量3 汇编时的变量替换4 标号5 局部标号 16 4 3 2ARM汇编语言中的表达式 表达式是有符号 数值 单目或多目操作符以及括号组成的 在一个表达式各种元素的优先级如下所示 括号内的表达式优先级最高 各种操作符有一定的优先级 相邻的单目操作符的执行顺序为由右到左 单目操作符优先级高于其他操作符 优先级相同的双目操作符执行顺序为由左到右 17 4 3 2ARM汇编语言中的表达式 1 字符串表达式2 数字表达式3 基于寄存器和基于PC的表达式4 逻辑表达式5 其他的一些操作符 18 4 4ARM汇编语言程序格

9、式 本小节介绍ARM汇编语言程序的基本格式以及子程序间调用的格式 19 4 4 1汇编语言程序格式 ARM汇编语言以段 section 为单位组织源文件 段是相对独立的 具有特定名称的 不可分割的指令或者数据序列 ARM汇编语言源程序经过汇编处理后生成一个可执行的映像文件 类似于windows系统下的EXE文件 该可执行的映像文件通常包括下面3部分 一个或多个代码段 代码段通常是只读的 零个或多个包含初始值的数据段 这些数据段通常是可读写的 零个或多个不包含初始值的数据段 这些数据段被初始化为0 通常是可读写的 20 4 4 2汇编语言子程序调用 在ARM汇编语言中 子程序调用是通过BL指令完

10、成的 BL指令的语法格式如下 BLsubname其中 subname是调用的子程序的名称 BL指令完成两个操作 将子程序的返回地址放在LR寄存器中 同时将PC寄存器值设置成目标子程序的第一条指令地址 在子程序返回时可以通过将LR寄存器的值传送的PC寄存器中来实现 21 4 5ARM汇编编译器的使用 ARMASM的语法格式如下所示 armasm 16 32 apcs none qualifier qualifier bigend littleend checkreglist cpucpu dependdependfile m md errorserrorfile fpuname g help i

11、dir dir keep list listingfile options maxcachen memaccessattributes nocache noesc noregs nowarn ofilename predefine directive split ldm unsafe viafile inputfile 22 4 6汇编程序设计举例 在本节中通过一些例子来说明ARM中伪操作以及指令的用法 4 6 1中举了一些伪操作的实例 4 6 2中是一些ARM汇编程序的实例 23 4 6 1ARM中伪操作使用实例 程序4 1ARM中伪操作的使用实例 参见教材P157 24 4 6 2ARM中汇编程序实例 本节列举一些ARM汇编程序的实例 1 数据块复制2 ADR伪操作的使用实例3 利用跳转表实现程序跳转4 伪指令LDR的使用实例

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

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