- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM宏汇编 伪操作 对源程序进行汇编期间处理,而不是直接由计算机执行的指令 伪指令(宏指令) 并非真正的指令,而是一段独立的程序代码;在源程序被汇编时,每个宏被展开,用宏定义体取代宏指令。也是通过伪操作定义的。 ARM宏汇编-寄存器定义 ARM宏汇编-状态、浮点、协处理器定义 定义的程序状态寄存器名 cpsr和CPSR spsr和SPSR 定义的浮点寄存器名 f0-f7 F0-F7 定义的协处理器名 p0-p15 c0-c15 ARM宏汇编-内置变量定义 ARM宏汇编-内置变量举例 内置变量不能用SETA、SETL、SETS等指示词来设置,只能用字符或条件表达式来设置,例 IF {ARCHITECTURE} = “4T” …… ARM宏汇编-符号定义伪操作 ARM宏汇编-全局变量定义(一) GBLA-声明一个全局算术变量,并初始化为0 GBLL-声明一个全局逻辑变量,并初始化为{FALSE} GBLS-声明一个全局串变量,并初始化为空串“” ARM宏汇编-全局变量定义(二) 全局变量,例: GBLA objectsize ;声明一个全局算术变量 objectsize SETA 0xff ;赋值 SPACE objectsize ;引用该变量 GBLL statusB ;声明一个全局逻辑变量 statusB SETL {TRUE} ;赋值 ARM宏汇编-局部变量定义 定义类似全局变量 作用范围为包含该局部变量的宏代码的一个实例。 例: LCLS err err SETS “error no: ” ARM宏汇编-变量赋值伪操作 SETA伪操作给一个算术变量赋值 SETL伪操作给一个逻辑变量赋值 SETS伪操作给一个串变量赋值 ARM宏汇编-数据定义伪操作 ARM宏汇编-MAP及FIELD 类似C中结构体: MAP 8, R9 ;内存表首地址=8+R9 Consta FIELD 4 ;consta长为4字节,相对位置为0 Constb FIELD 4 ;constb长为4字节,相对位置为4 X FIELD 8 ;X长为8字节,相对位置为8 Y FIELD 8 ;Y长为8字节,相对位置为16 String FIELD 256 ;string长256字节,相对位置为24 ARM宏汇编-SPACE Datastruct SPACE 200 ;分配200字节的内存单元,并将内存单元内容初始化为0 ARM宏汇编-DCB Nullstring DCB “Null string”,0 ;构造一个以NULL结尾的字符串 ARM宏汇编-汇编控制伪操作 IF,ELSE及ENDIF WHILE及WEND MACRO及MEND MEXIT ARM宏汇编-IF,ELSE及ENDIF 例: IF Version = “4.0” … ;指令及伪指令 ELSE … ;指令及伪指令 ENDIF ARM宏汇编-WHILE及WEND 例: Count SETA 1 ;循环计数变量,初识1 WHILE count =4 ;由count控制循环次数 Count SETA count+1 ;count+=1 …… WEND ARM宏汇编-MACRO,MEND及MEXIT(一) 语法 MACRO {$label} macroname {$p1…} … MEND ARM宏汇编-MACRO,MEND及MEXIT(二) 例 MACRO $label mac1 $p1,$p2 IF condition1 BL $p1 MEXIT ELSE BL $p2 ENDIF WEND ARM宏汇编-其他伪操作 1. AREA: AREA 段名 属性,…… AREA用于定义一个代码段、数据段或者特定属性的段。 属性部分表示该代码段/数据段的相关属性,多个属性可以用“,”分隔。 其他伪指令Ⅰ 常见属性如下: ?DATA:定义数据段。 ?CODE:定义代码段。 READONLY:表示本段为只读。 READWRITE:表示本段可读写。 一个汇编程序至少应该包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。 例如: AREA test,CODE,READONLY AREA ||.text||, CODE, READONLY 2.? CODE16、CODE32: CODE16/CODE32 CODE16伪操作指示编译器后面的代码为16位的Thumb指令。CODE32伪操作指示编译器后面的代码为32位的ARM指令。 如果在汇编源代码中同时包含Thumb和ARM指令时,可以用“CODE32”通知编译器其后的指令序列为32位的ARM指令,用“CODE16”伪指令通知编译器其后的指令序列为16位的Thumb指令。 在使用ARM指令和Thumb指
文档评论(0)