




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 ARM程序设计 广嵌教育 2 第四章ARM程序设计 4 1ARM伪操作4 2ARM汇编伪指令4 3ARM汇编语言语句格式4 4ARM汇编语言程序格式4 5ARM汇编程序设计4 6ARM汇编语言中的子程序调用 3 4 1ARM伪操作 伪操作是ARM汇编语言源程序里的一些特殊指令助记符 作用主要是为完成汇编程序做各种准备工作 在源程序进行汇编时由汇编程序处理 而不是在程序运行期间由CPU执行 这些伪操作只在汇编过程中起作用 当汇编结束 伪指令的使命也就随之结束 ADS编译环境下的伪操作有如下几种 符号定义伪操作数据定义伪操作汇编控制伪操作信息报告伪操作其他伪操作 4 4 1ARM伪操作 符号定义伪操作 符号定义伪操作用于定义ARM汇编程序中的变量 对变量赋值以及定义寄存器的别名等操作 常见的符号定义伪操作有如下几种 用于定义全局变量的GBLA GBLL和GBLS 用于定义局部变量的LCLA LCLL和LCLS 用于对变量赋值的SETA SETL SETS 为一个通用寄存器列表定义别名 RLIST为一个协处理器的寄存器定义名称 CN为一个协处理器定义名称 CP为一个双精度的VFP寄存器定义名称 DN为一个单精度的VFP寄存器定义名称 SN为一个浮点寄存器定义名称 FN 5 4 1ARM伪操作 符号定义伪操作 例 GBLATest1 定义一个全局的数字变量 变量名为Test1 Test1SETA0 xaa 将该变量赋值为0 xaa LCLSTest6 定义一个局部的字符串变量 变量名为Test6 Test6SETS Testing 将该变量赋值为 Testing GBLLcodedbg 声明一个全局逻辑变量codedbgSETL TRUE 设置变量为 TRUE ListRLIST R0 R3 PowerCN6DSPCP8 6 4 1ARM伪操作 数据定义伪操作 数据定义伪操作一般用于为特定的数据分配存储单元 同时可完成已配存储单元的初始化 常见的数据定义伪操作有如下几种 DCB用于分配一片连续的字节存储单元并用指定的数据初始化 DCW DCWU 用于分配一片连续的半字存储单元并用指定的数据初始化 DCD DCDU 用于分配一片连续的字存储单元并用指定的数据初始化 DCFD DCFDU 用于为双精度的浮点数分配一片连续的字存储单元并用指定的数据初始化 DCFS DCFSU 用于为单精度的浮点数分配一片连续的字存储单元并用指定的数据初始化 DCQ DCQU 用于分配一片以8字节为单位的连续的存储单元并用指定的数据初始化 SPACE用于分配一片连续的存储单元 并用0初始化 MAP用于定义一个结构化的内存表首地址 与FIELD配合使用 FIELD用于定义一个结构化的内存表中的数据域LTORG用于声明一个数据缓冲池 文字池 的开始 7 4 1ARM伪操作 数据定义伪操作 例 StrDCB Thisisatest 分配一片连续的字节存储单元并初始化 DataTestDCW1 2 3 分配一片连续的半字存储单元并初始化 FDataTestDCFD2E115 5E7 分配一片连续的字存储单元并初始 化为指定的双精度数 FDataTestDCFS2E5 5E 7 分配一片连续的字存储单元并初始化为指定的单精度数 DataSpaceSPACE100 分配连续100字节的存储单元并初始化为0MAP0 x100 R0 定义结构化内存表首地址的值为0 x100 R0 MAP0 x100 定义结构化内存表首地址的值为0 x100 AFIELD16 定义A的长度为16字节 位置为0 x100BFIELD32 定义B的长度为32字节 位置为0 x110SFIELD256 定义S的长度为256字节 位置为0 x130 8 4 1ARM伪操作 数据定义伪操作 DCB也可用 代替DCD也可用 代替SPACE也可用 代替MAP也可用 代替FILED也可用 代替EQU可用 代替 9 4 1ARM伪操作 汇编控制伪操作 汇编控制伪操作用于控制汇编程序的执行流程 如 条件汇编 宏定义 重复汇编控制等 常用的汇编控制伪操作包括以下几条 IF ELSE ENDIFWHILE WENDMACRO MEND MEXIT1 IF ELSE和ENDIF伪操作能够根据条件 把一段代码包括在汇编程序内或将其排除在程序之外 2 MACRO和MEND伪操作用于宏定义 MACRO标识宏定义的开始 MEND标识宏定义的结束 用MACRO及MEND定义的一段代码 称为宏定义体 这样在程序中就可以通过宏操作多次调用该代码段 MEXIT 退出宏定义 3 WHILE和WEND伪操作用于根据条件重复汇编相同的一段源程序 10 4 1ARM伪操作 信息报告伪操作 信息报告伪伪操作用于汇编报告指示 ASSERT 断言错误伪操作 用于保证源程序被汇编时满足相关的条件 如果条件不满足 则ASSERT伪操作报告错误类型 并终止汇编 INFO 汇编诊断信息显示伪操作 用于显示用户自定义的错误信息 OPT 设置列表选项伪操作 通过OPT伪操作可以在源程序中设置类表选项 TTL伪操作在列表文件的页顶部显示一个标题 SUBT伪操作在列表文件页标题的下面显示一个子标题 11 4 1ARM伪操作 其他伪操作 AREA 用于定义一个代码段或数据段 ALIGN 通过添加填充字节的方式 使当前位置满足一定的对其方式 CODE16 CODE32 伪操作通知编译器 其后的指令序列为16位的Thumb指令或为32位的ARM指令 ENTRY 用于指定汇编程序的入口 一个源文件中最多只有一个ENTRY 一个程序中至少有一个ENTRY END 用于通知编译器已经到了源程序的结尾 每个源程序包含一个END EQU 用于为程序中的数字常量 标号等定义一个等效的字符名称 类似于C语言中的 define EXPORT 或GLOBAL 用于在程序中声明一个全局的标号 区分大小写 该标号可在其他的文件中引用 IMPORT EXTERN 用于通知编译器要使用一个在其他的源文件中定义的标号 GET 或INCLUDE 用于将一个源文件包含到当前的源文件中 INCBIN 用于将一个目标文件或数据文件包含到当前的源文件中 ROUT 用于给一个局部变量定义作用范围 12 4 2ARM汇编伪指令 ARM中伪指令不是真正的ARM指令或Thumb指令 这些伪指令在编译器对源程序进行汇编处理时被替换成相应的ARM或Thumb指令序列 ARM伪指令包括ADR ADRL LDR和NOP ADR 小范围的地址读取伪指令该指令将基于PC的地址值或基于寄存器的地址值读取到寄存器中 当地址值是字对齐时 地址的取址范围是 1020 1020字节 在处理源程序时 ADR伪指令通常被编译器替换成一条ADD指令或SUB指令来实现该ADR伪指令的功能 读取的地址必须和ADR指令在同一个代码段中 语法格式 ADR cond register expr例 startMOVr0 10ADRr4 start SUBr4 pc 0 xc 13 4 2ARM汇编伪指令 ADRL 中等范围的地址读取伪指令该指令将基于PC或寄存器的地址值读取到寄存器中 ADRL伪指令与ADR伪指令的不同之处在于它可以读取更大范围的地址 ADRL伪指令在汇编时被编译器替换成2条数据处理指令 语法格式 ADR cond Lregister expr例 startMOVr0 10ADRLr4 start 60000 ADDr4 pc 0 xe800 ADDr4 r4 0 x254NOP 空操作伪指令NOP伪指令在汇编时将被替换成ARM中的空操作 如可能为 MOVR0 R0 等 NOP伪指令不影响CPSR中的条件标志位 14 4 2ARM汇编伪指令 LDR 大范围的地址读取伪指令LDR伪指令将一个32位的立即数或者一个地址值读取到寄存器中 LDR伪指令主要有以下2种用途 当需要读取到寄存器中的数据超过了MOV及MVN指令可操作的范围时 可使用LDR伪指令将该数据读取寄存器中 将一个基于PC的地址值或者外部的地址值读取到寄存器中 语法格式 LDR cond register expr label expr 例 LDRr3 0 xff0 MOVr3 0 xff0LDRr1 0 xfff LDRr1 pc offset to litpool litpoolDCD0 xfffLDRr2 place loadstheaddressofplaceintor2 LDRr2 pc offset to litpool litpoolDCDplace 15 4 3ARM汇编语言语句格式 ARM汇编语言程序中符号的定义规则 符号区分大小写 同名的大 小写符号会被编译器认为是两个不同的符号 符号由大小写字母 数字以及下划线组成 符号在其作用范围内必须唯一 自定义的符号名不能与系统的保留字相同 符号名不应与指令或伪操作同名 程序中的变量和常量变量 变量有数字变量 逻辑变量和串变量3种类型数字常量 使用EQU伪操作来定义数字常量 标号 标号代表一个地址 段内标号的地址在汇编时确定 而段外标号的地址在连接时确定 16 4 3ARM汇编语言程序格式 在ARM Thumb 汇编语言程序中 以段为单位组织源文件的 段是相对独立的指令或数据序列 具有特定的名称 段可以分为代码段和数据段 代码段的内容为执行码 数据段存放代码运行时需要用到的数据 多个段在程序编译链接时最终形成一个可执行的映象文件 可执行映象文件通常由以下几部分构成 一个或多个代码段 代码段的属性为只读 0个或多个包含初始化数据的数据段 数据段的属性为可读写 0个或多个不包含初始化数据的数据段 这些数据段被初始化为0 数据段的属性为可读写 17 4 3ARM汇编语言程序格式 代码段示例 汇编语言源程序的基本结构 AREAInit CODE READONLYENTRYStartLDRR0 0 x3FF5000LDRR1 0 xFFSTRR1 R0 LDRR0 0 x3FF5008LDRR1 0 x01STRR1 R0 END 18 4 3ARM汇编语言程序格式 ARM体系中通常有以下3种方式控制程序的执行流程 在正常执行过程中 每执行一条ARM指令 程序计数器 PC 的值加4个字节 每执行一条Thumb指令 程序计数器寄存器 PC 加2个字节 整个过程是按顺序执行 跳转指令 程序可以跳转到特定的地址标号处执行 或者跳转到特定的子程序处执行 当异常中断发生时 系统执行完当前指令后 将跳转到相应的异常中断处理程序处执行 19 4 4ARM汇编程序设计 顺序结构程序顺序结构是按照逻辑操作顺序 从某一条指令开始逐条顺序执行 直至某一条指令为止 AREAEXAMPLE CODE READONLYENTRY 程序入口Start 程序开始MOVR0 10 将立即数10放入寄存器R0MOVR1 3 将立即数3放入寄存器R1ADDR0 R0 R1 将R1和R0相加 结果放入R0END 程序结束 20 4 4ARM汇编程序设计 选择分支结构程序单分支结构程序 21 4 4ARM汇编程序设计 选择分支结构程序多分支结构 22 4 5ARM汇编语言中的子程序调用 在ARM汇编语言程序中 子程序的调用一般是通过BL指令来实现的 在程序中 使用指令 BL子程序名该指令在执行时完成如下操作 将子程序的返回地址存放在连接寄存器LR中 同时将程序计器PC指向子程序的入口点 当子程序执行完毕需要返回调用处时 只需要将存放在LR中的返回地址重新拷贝给程序计数器PC即可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件注会教学课件
- 课件模板颜色搭配
- 粘土手工植物课件
- 厂商施工安全培训
- 课件标题卡纸
- 药厂物料管理培训
- 提升连带技巧培训
- 乐理通考试题及答案
- 广东方剂学自考试题及答案
- 客服招聘考试题及答案
- 第二单元混合运算单元测试卷(含答案) 2025-2026学年人教版三年级数学上册
- 出境人员行前安全培训课件
- 短视频个人劳务合同范本
- 纯电动汽车维护与保养 课件 模块一新能源汽车维护与保养基础认知
- 翻译后的基因表达调控
- 2025年度中国工商银行河南省分行社会招聘120人备考练习试题及答案解析
- 2025甘肃兰州兴蓉环境发展有限责任公司招聘内控管理岗等岗位5人笔试模拟试题及答案解析
- (2025年标准)酒店政府采购协议书
- 苏教版三年级上册数学全册教学设计(配2025年秋新版教材)
- 重庆中医药学院2025年第二季度考核招聘工作人员笔试备考题库带答案详解
- 用电安全与消防知识培训课件
评论
0/150
提交评论