版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1TM第第6章章 ARM汇编伪指令与伪操作汇编伪指令与伪操作本章将详细介绍进行汇编语言程序本章将详细介绍进行汇编语言程序设计时所用的设计时所用的ARM/Thumb汇编语汇编语言伪指令、由言伪指令、由ARM公司推出的开公司推出的开发工具所支持的伪操作以及发工具所支持的伪操作以及GNU ARM开发工具所支持的伪操作。开发工具所支持的伪操作。 2TM2内容提要内容提要61 汇编语言伪指令汇编语言伪指令62 ARM汇编语言伪操作汇编语言伪操作63 ARM汇编伪操作汇编伪操作64 GNU ARM汇编伪操作汇编伪操作3TM361 汇编语言伪指令汇编语言伪指令n伪指令是伪指令是ARM处理器支持的汇编语言程序
2、里处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机的特殊助记符,它不在处理器运行期间由机器执行器执行,只是在汇编时将被合适的机器指令代只是在汇编时将被合适的机器指令代替成替成ARM或或Thumb指令指令,从而实现真正的指从而实现真正的指令操作。令操作。 4TM46.1.1 ARM汇编语言伪指令汇编语言伪指令 1大范围地址读取伪指令大范围地址读取伪指令LDRLDR伪指令将一个伪指令将一个32位的常数或者一个地址值位的常数或者一个地址值读取到寄存器中,可以看作是加载寄存器的读取到寄存器中,可以看作是加载寄存器的内容。内容。LDRcond register , = expressio
3、n 5TM56.1.1 ARM汇编语言伪指令汇编语言伪指令n如果加载的常数符合如果加载的常数符合MOV或或MVN指令立即数指令立即数的要求,则用的要求,则用MOV或或MVN指令替代指令替代LDR伪指伪指令。令。n如果加载的常数不符合如果加载的常数不符合MOV或或MVN指令立即指令立即数的要求,汇编器将常量放入内存文字池,数的要求,汇编器将常量放入内存文字池,并使用一条程序相对偏移的并使用一条程序相对偏移的LDR指令从内存指令从内存文字池读出常量。文字池读出常量。 6TM66.1.1 ARM汇编语言伪指令汇编语言伪指令n例:伪指令语句:例:伪指令语句:nLDR R0,=0 x0AA00;R00
4、counter SETA counter-1WEND33TM336.3.3 汇编代码控制伪操作汇编代码控制伪操作3. MACRO宏定义伪操作宏定义伪操作语法格式:语法格式:MACRO$labelmacroname$parameter,$ parameter程序代码段程序代码段MEND其中:其中:$label在宏指令被展开时,标号被替换成用在宏指令被展开时,标号被替换成用户定义的符号户定义的符号$parameter为宏的参数列表,当宏被展开为宏的参数列表,当宏被展开时被替换为相应的值。时被替换为相应的值。功能:将一段程序代码定义成一个宏。功能:将一段程序代码定义成一个宏。34TM346.3.3
5、汇编代码控制伪操作汇编代码控制伪操作3. MACRO宏定义伪操作宏定义伪操作宏在调用时被替换展开,没有其他的附加操作。宏在调用时被替换展开,没有其他的附加操作。宏多用于所定义的程序代码量较小,而需要传送参数宏多用于所定义的程序代码量较小,而需要传送参数比较多的场合。相对子程序调用而言,能有效提高比较多的场合。相对子程序调用而言,能有效提高处理速度。处理速度。如果变量在宏定义中被定义,则该变量只在该宏定义如果变量在宏定义中被定义,则该变量只在该宏定义体中有效。体中有效。35TM356.3.3 汇编代码控制伪操作汇编代码控制伪操作3. MACRO宏定义伪操作宏定义伪操作例例6-30 (验证验证)在
6、在ARM和和Thumb代码中,测试并跳转代码中,测试并跳转操作需要执行两条操作需要执行两条ARM指令。可以定义一个与下面类指令。可以定义一个与下面类似的宏来实现相应的操作:似的宏来实现相应的操作:MACRO$label TestAndBranch $dest,$reg,$cc$label CMP $reg,#0B$cc $destMEND36TM366.3.3 汇编代码控制伪操作汇编代码控制伪操作3. MACRO宏定义伪操作宏定义伪操作例例6-30 (续)(续) 宏调用:宏调用:test TestAndBranch NonZero,R0,NE.NonZero替换后将变成:替换后将变成:test
7、 CMP R0,#0BNE NonZeroNonZero 37TM376.3.4 汇编信息报告控制伪操作汇编信息报告控制伪操作 n信息报告伪操作用于程序汇编指示,主要是信息报告伪操作用于程序汇编指示,主要是在程序调试阶段使用。这类伪操作分为错误在程序调试阶段使用。这类伪操作分为错误信息报告伪操作、诊断信息报告伪操作、列信息报告伪操作、诊断信息报告伪操作、列表选项设置伪操作、插入文件标题伪操作表选项设置伪操作、插入文件标题伪操作 38TM386.3.4 汇编信息报告控制伪操作汇编信息报告控制伪操作1、错误信息报告、错误信息报告ASSERT 语法格式语法格式:ASSERT logical_expr
8、ession其中:其中:logical_expression用于表示的条件的逻辑表达式。用于表示的条件的逻辑表达式。功能:用于保证源程序被汇编时满足相关的条件。如功能:用于保证源程序被汇编时满足相关的条件。如果汇编时逻辑表达式果汇编时逻辑表达式logical_expression不成立,不成立,ASSERT将报告错误信息。将报告错误信息。39TM396.3.4 汇编信息报告控制伪操作汇编信息报告控制伪操作2、诊断信息报告、诊断信息报告INFOINFO numeric_expression, string_expression其中:其中:numeric_expression数字表达式。如果数字表
9、达式。如果numeric_expression为为0,则在第二遍扫描时,伪,则在第二遍扫描时,伪操作打印操作打印string_expression的内容;如果的内容;如果numeric_expression的值不为的值不为0,则在汇编处理中,则在汇编处理中,第一遍扫描时,伪操作打印,第一遍扫描时,伪操作打印string-expression的的内容,并终止汇编。内容,并终止汇编。40TM406.3.4 汇编信息报告控制伪操作汇编信息报告控制伪操作3、列表选项设置、列表选项设置OPT OPT为编译列表选项设置伪操作,用于在源程序为编译列表选项设置伪操作,用于在源程序中设置汇编列表选项。中设置汇编
10、列表选项。语法格式语法格式:OPT n其中:其中:n是是OPT 指令设置选项编号。教材中表指令设置选项编号。教材中表6-5列列出了有效的选项编号及其含义。出了有效的选项编号及其含义。41TM416.3.4 汇编信息报告控制伪操作汇编信息报告控制伪操作4、插入文件标题伪操作、插入文件标题伪操作TTL与与SUBT语法格式语法格式:TTL titleSUBT subtitle其中:其中:title 为所插入的列表文件的标题;为所插入的列表文件的标题;subtitle为所插入的列表文件的子标题。为所插入的列表文件的子标题。功能:功能:TTL/SUBT在列表文件显示一个标题在列表文件显示一个标题/子标题
11、。如果子标题。如果要在列表文件的第一页显示标题要在列表文件的第一页显示标题/子标题,子标题,TTL/SUBT要要放在源程序的第一行。放在源程序的第一行。42TM426.3.5 指令集类型标识伪操作指令集类型标识伪操作 n指令集类型标识伪操作用来告诉编译器所处指令集类型标识伪操作用来告诉编译器所处理的是理的是32位的位的ARM指令还是指令还是16位的位的Thumb指令,实现这一操作的操作符有指令,实现这一操作的操作符有ARM、CODE32、THUMB、CODE16 43TM43n指令集类型标识伪操作指令集类型标识伪操作 6.3.5 指令集类型标识伪操作指令集类型标识伪操作 例:例:AREA AR
12、MThumb,CODE,READONLYENTRYCODE32startADR R0,into_thumb+1BX R0CODE16into_thumbMOVS R0,#1044TM446.3.6 文件包含伪操作文件包含伪操作 文件包含伪操作包括两类:文件包含伪操作包括两类:一类是将一个源文件包含到当前源文件中,并一类是将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理将被包含的文件在其当前位置进行汇编处理;另一类是也将一个源文件包含到当前源文件中另一类是也将一个源文件包含到当前源文件中,但被包含文件不进行汇编处理。,但被包含文件不进行汇编处理。 45TM456.3.6
13、文件包含伪操作文件包含伪操作1. 文件包含文件包含GET 或或 INCLUDE语法格式语法格式:GET filenameINCLUDE filename其中:其中:filename 是要在汇编中包含的文件名称。汇编程序接是要在汇编中包含的文件名称。汇编程序接受受 UNIX 或或 MS-DOS格式的路径名。格式的路径名。功能:将一个源文件包含到当前源文件并进行汇编处功能:将一个源文件包含到当前源文件并进行汇编处理。理。例:例: AREA Example, CODE, READONLYGET include_s.sGET d:testinclude_s.s46TM466.3.6 文件包含伪操作文件
14、包含伪操作2、文件原样包含、文件原样包含INCBIN 语法格式语法格式:INCBIN filename其中:其中:filename 是要在汇编中包含的文件名称。是要在汇编中包含的文件名称。 汇编程序汇编程序接受接受 UNIX 或或 MS-DOS格式的路径名。格式的路径名。功能:将一个文件包含到当前源文件中,该文件按原功能:将一个文件包含到当前源文件中,该文件按原样包含,不进行汇编处理。通常用于将目标文件或数样包含,不进行汇编处理。通常用于将目标文件或数据文件包含到当前源文件中。据文件包含到当前源文件中。例:例: INCBIN a1.datINCBIN a2.o47TM476.3.7 其他类型伪
15、操作其他类型伪操作 n对齐方式设置对齐方式设置ALIGNALIGNn段属性定义伪操作段属性定义伪操作AREA AREA n源程序结尾标识源程序结尾标识END END n声明程序的入口点声明程序的入口点ENTRYENTRY n定义常量或标号名称定义常量或标号名称EQU EQU n声明全局标号声明全局标号EXPORTEXPORT或或GLOBAL GLOBAL n将符号导出到目标文件将符号导出到目标文件EXPORTAS EXPORTAS n外部符号声明外部符号声明IMPORT IMPORT 和和 EXTERN EXTERN n保留局部符号保留局部符号KEEP KEEP n禁止使用浮点指令禁止使用浮点
16、指令NOFP NOFP n指定段的相关性指定段的相关性REQUIRE REQUIRE n堆栈八字节对齐堆栈八字节对齐REQUIRE8 REQUIRE8 和和 PRESERVE8 PRESERVE8 n局部变量范围定义局部变量范围定义ROUT ROUT 48TM486.3.7 其他类型伪操作其他类型伪操作1. 对齐方式设置对齐方式设置ALIGN 对齐方式设置对齐方式设置ALIGN 伪操作通过用零或伪操作通过用零或 NOP 指指令进行填充来使当前位置与指定的边界对齐。令进行填充来使当前位置与指定的边界对齐。语法格式语法格式:ALIGN expr,offset,pad , padsize expr:
17、 用于指定对齐方式,值为用于指定对齐方式,值为2的的n次幂,次幂,0n 31;offset: 表示偏移量,可以是任何数值表达式;表示偏移量,可以是任何数值表达式;pad: 数值表达式,用于对齐时填充的内容;数值表达式,用于对齐时填充的内容;padsize: 可以为可以为1、2、4,用于指定,用于指定pad的类型(字的类型(字节节/半字半字/ 字)字)49TM496.3.7 其他类型伪操作其他类型伪操作1. 对齐方式设置对齐方式设置ALIGN 使用场景:使用场景:ADR伪指令用于伪指令用于Thumb代码时只能加载字对齐的地代码时只能加载字对齐的地址,但址,但Thumb代码内的标签可能不是字对齐的
18、,此代码内的标签可能不是字对齐的,此时须使用时须使用ALIGN 4来保证代码内地址为来保证代码内地址为4字节对齐;字节对齐;使用使用ALIGN可确保可确保ARM处理器高速缓存的使用效率。处理器高速缓存的使用效率。例如使用例如使用ALIGN 16来确保在来确保在16字节边界上对齐函数字节边界上对齐函数入口点;入口点;LDRD和和STRD双字数据传送必须是双字数据传送必须是8字节对齐的,此字节对齐的,此时就在内存分配指令(如时就在内存分配指令(如DCQ)前使用)前使用ALIGN 8.50TM506.3.7 其他类型伪操作其他类型伪操作2. 段属性定义伪操作段属性定义伪操作AREA 汇编程序采用分段
19、设计,段属性定义伪操作汇编程序采用分段设计,段属性定义伪操作AREA用于定义一个代码段或数据段,用于定义一个代码段或数据段,AREA 伪操作伪操作指示汇编器汇编新的代码段或数据段。段是不可分的指示汇编器汇编新的代码段或数据段。段是不可分的已命名独立代码或数据块,它们由链接器处理。已命名独立代码或数据块,它们由链接器处理。语法格式语法格式:AREA sectionname,attr,attr.51TM516.3.7 其他类型伪操作其他类型伪操作2. 段属性定义伪操作段属性定义伪操作AREA sectionname: 段名。如果以数字开始必须包含在段名。如果以数字开始必须包含在“|”内内;attr
20、:段属性,常用的选项如下:段属性,常用的选项如下:1)ALIGN=expr:规定段为:规定段为2expr字节对齐,取值字节对齐,取值231;2)CODE:指定该段为代码段,此时:指定该段为代码段,此时READONLY为为默认属性;默认属性;3)DATA:定义数据段,默认属性为:定义数据段,默认属性为READWRITE;4)READONLY:指定该段只读;:指定该段只读;5)READWRITE:指定该段可读可写。:指定该段可读可写。52TM526.3.7 其他类型伪操作其他类型伪操作2. 段属性定义伪操作段属性定义伪操作AREA 注意事项:注意事项:一组汇编代码必须有一个一组汇编代码必须有一个A
21、REA指令;指令;可以在多个可以在多个AREA指令中使用相同的名称,名称相同指令中使用相同的名称,名称相同的所有区域都放在相同的的所有区域都放在相同的ELF段中。段中。通常对代码和数据使用不同的通常对代码和数据使用不同的ELF段。段。53TM536.3.7 其他类型伪操作其他类型伪操作3、源程序结尾标识、源程序结尾标识ENDEND 伪操作通知汇编程序它已到达源文件的末尾。伪操作通知汇编程序它已到达源文件的末尾。语法格式语法格式:END54TM546.3.7 其他类型伪操作其他类型伪操作4、声明程序的入口点、声明程序的入口点ENTRY ENTRY 伪操作声明程序的入口点。伪操作声明程序的入口点。
22、语法格式语法格式: ENTRY注意:注意:必须为一个程序指定至少一个必须为一个程序指定至少一个ENTRY点;点;一个源文件内不能使用多个一个源文件内不能使用多个ENTRY指令;指令;并非每个源文件都必须包含并非每个源文件都必须包含ENTRY指令。指令。例:例: AREA ARMex,CODE,READONLYENTRYMOV R0,#155TM556.3.7 其他类型伪操作其他类型伪操作5、定义常量或标号名称、定义常量或标号名称EQU 功能:为数值常量、标号指定一个符号名称。功能:为数值常量、标号指定一个符号名称。语法格式语法格式:name EQU expr, type其中:其中:name:是
23、要为数值指定的符号名称。:是要为数值指定的符号名称。expr:可以是一个寄存器相对的地址、程序相对的地:可以是一个寄存器相对的地址、程序相对的地址、绝对地址或址、绝对地址或 32 位整型常数。位整型常数。type : 可选项,值为可选项,值为CODE32或或CODE16,仅当,仅当expr为绝对地址时使用。为绝对地址时使用。56TM566.3.7 其他类型伪操作其他类型伪操作5、定义常量或标号名称、定义常量或标号名称EQU 例:例:Sub1EQU 0 x100Test EQU label+8IRQ_vEQU 0 x18,CODE3257TM576.3.7 其他类型伪操作其他类型伪操作6. 声明全局标号声明全局标号EXPORT或或GLOBAL EXPORT 指令声明一个全局的符号,可由链接指令声明一个全局的符号,可由链接器用于解析不同的对象和库文件中的符号引用。器用于解析不同的对象和库文件中的符号引用。 GLOBAL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械加工安全教育课件
- 生活中的安全标志课件
- 2025-2026学年河大版(三起)(新教材)小学信息科技第三册期末测试卷附答案
- 震后互救 安全第一课件
- 五一安全课件
- 2025年制冷与空调设备安装修理作业证考试练习题
- 大学生计算机基础操作考试模拟试卷(附答案解析)
- 一级建造师建筑实务考试真题及答案
- 叉车安全操作规程考试试题
- 广东深圳公务员行测考试真题:常识判断
- 2025年江苏省南京市玄武区中考二模英语试题(含答案)
- 2025年山东省重点高中中考自主招生化学试卷试题(含答案)
- 传染病模型研究与应用
- 仓库维护合同范例
- 内蒙古鑫元硅材料科技有限公司年产10万吨颗粒硅绿色升级项报告书
- 变压器绝缘测试评分表
- 小学生心理健康与辅导(第4版) 课件 第九章 小学生心理健康教育课程
- 园区安全管理培训
- 护理危急值管理
- 外贸船务知识培训班课件
- 课题申报书:基于项目式学习的高中语文整本书阅读实践研究
评论
0/150
提交评论