版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1TM第第6章章 ARM汇编伪指令与伪操作汇编伪指令与伪操作本章将详细介绍进行汇编语言程序设本章将详细介绍进行汇编语言程序设计时所用的计时所用的ARM/Thumb汇编语言伪汇编语言伪指令、由指令、由ARM公司推出的开发工具公司推出的开发工具所支持的伪操作以及所支持的伪操作以及GNU ARM开发开发工具所支持的伪操作。工具所支持的伪操作。 2TM2内容提要内容提要61 汇编语言伪指令汇编语言伪指令62 ARM汇编语言伪操作汇编语言伪操作63 ARM汇编伪操作汇编伪操作64 GNU ARM汇编伪操作汇编伪操作3TM361 汇编语言伪指令汇编语言伪指令n伪指令是伪指令是ARM处理器支持的汇编语言程序
2、里处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机的特殊助记符,它不在处理器运行期间由机器执行器执行,只是在汇编时将被合适的机器指令代只是在汇编时将被合适的机器指令代替成替成ARM或或Thumb指令指令,从而实现真正的指从而实现真正的指令操作。令操作。 4TM4ARM汇编语言伪指令汇编语言伪指令 n1大范围地址读取伪指令大范围地址读取伪指令LDRnLDR伪指令将一个伪指令将一个32位的常数或者一个地址位的常数或者一个地址值读取到寄存器中,可以看作是加载寄存器值读取到寄存器中,可以看作是加载寄存器的内容。的内容。nLDRcond register , = expression 5
3、TM5n如果加载的常数符合如果加载的常数符合MOV或或MVN指令立即指令立即数的要求,则用数的要求,则用MOV或或MVN指令替代指令替代LDR伪指令。伪指令。n如果加载的常数不符合如果加载的常数不符合MOV或或MVN指令立指令立即数的要求,汇编器将常量放入内存文字池即数的要求,汇编器将常量放入内存文字池,并使用一条程序相对偏移的,并使用一条程序相对偏移的LDR指令从内指令从内存文字池读出常量。存文字池读出常量。 6TM6n伪指令语句:伪指令语句:nLDRR0, =0 x0AA00;R00 x0AA00n汇编后:汇编后:nMOV R0, #435207TM7n2中等范围地址读取伪指令中等范围地址
4、读取伪指令ADRLn它将基于它将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。相对偏移的地址值读取到寄存器中。 nADRLcond register , = expression8TM8n汇编器在处理源程序时,汇编器在处理源程序时,ADRL伪指令被两伪指令被两条具有条具有ADRL等同功能的等同功能的ARM指令指令(通常用通常用ADD或或SUB指令指令)替代。替代。n如果不能用两条指令实现如果不能用两条指令实现ADRL伪指令的功伪指令的功能,则编译器报告错误,编译失败。能,则编译器报告错误,编译失败。 9TM9n以下指令存放在以下指令存放在0 x
5、8000起始的地址单元,分析汇编后的结果。起始的地址单元,分析汇编后的结果。n.global _startn.textn_start:nMOVR0,#0 x0FnADRL R0,_startn.endn解:汇编后的结果为:解:汇编后的结果为:n0 x00008000MOV R0, #0 x0Fn0 x00008004SUB R0, PC, #12n0 x00008008NOP (MOV R0,R0)10TM10n3小范围地址读取伪指令小范围地址读取伪指令ADRn它将基于它将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。当地址相对偏移的地址值读取
6、到寄存器中。当地址是字节对齐时,取值范围为是字节对齐时,取值范围为-255+255 nADRcond register , = expression11TM11n下列指令存放在下列指令存放在0 x8000起始的地址单元,分析汇编后的结果。起始的地址单元,分析汇编后的结果。n.global _startn.textn_start:nMOVR0,#0 x0FnADRR0,_startn.endn解:汇编后的结果为:解:汇编后的结果为:n0 x00008000MOV R0, #0 x0Fn0 x00008004SUB R0, PC, #1212TM12n4空操作伪指令空操作伪指令NOPnNOP是空操
7、作伪指令,在汇编时将会被替代是空操作伪指令,在汇编时将会被替代成成ARM中的空操作中的空操作 .13TM13Thumb汇编语言伪指令汇编语言伪指令 n1大范围地址读取伪指令大范围地址读取伪指令LDRnLDR伪指令将一个伪指令将一个32位的常数或者一个地址位的常数或者一个地址值读取到寄存器中,可以看作是加载寄存器值读取到寄存器中,可以看作是加载寄存器的内容。其语法格式如下:的内容。其语法格式如下:nLDR register , = expression14TM14n2小范围地址读取伪指令小范围地址读取伪指令ADRnADR为小范围地址读取伪指令,它将基于为小范围地址读取伪指令,它将基于PC相对偏移
8、的地址值读取到寄存器中。偏移量相对偏移的地址值读取到寄存器中。偏移量必须是正数并小于必须是正数并小于1KB。 nADR register , = expression相当于相当于PC寄存器或其它寄存器的长转移。寄存器或其它寄存器的长转移。15TM15n汇编器在处理源程序时,汇编器在处理源程序时,ADR伪指令一条具伪指令一条具有有ADR等同功能的等同功能的thumb指令指令(通常用通常用ADD或或SUB指令指令)替代。替代。n如果不能用一条指令实现如果不能用一条指令实现ADR伪指令的功能伪指令的功能,则编译器报告错误,编译失败。,则编译器报告错误,编译失败。 16TM16n3空操作伪指令空操作伪
9、指令NOP nNOP是空操作伪指令,在汇编时将会被替代是空操作伪指令,在汇编时将会被替代成成ARM中的空操作(也就是什么也没做)指中的空操作(也就是什么也没做)指令,例如可能为:令,例如可能为:“MOVR0,R0” nNOPn空操作伪指令可用于延时操作。空操作伪指令可用于延时操作。17TM1762ARM汇编语言伪操作汇编语言伪操作n伪操作伪操作(Directive)是是ARM汇编语言程序里的汇编语言程序里的一些特殊的指令助记符一些特殊的指令助记符,其作用主要是为完成其作用主要是为完成汇编程序做各种准备工作汇编程序做各种准备工作,对源程序运行汇编对源程序运行汇编程序处理程序处理,而不是在计算机运
10、行期间由处理器而不是在计算机运行期间由处理器执行。执行。n伪操作只是汇编过程中起作用伪操作只是汇编过程中起作用,一旦汇编结束一旦汇编结束,伪操作也就随之消失。伪操作也就随之消失。18TM18n目前常用的编译环境有目前常用的编译环境有2种:种:n1. ADS/SDT、RealView MDK等等ARM公公司推出的开发工具司推出的开发工具n2. GNU ARM开发工具开发工具19TM19n1. ADS/SDT、RealView MDK等等ARM公司推出公司推出的开发工具的开发工具nADS由由ARM公司推出公司推出,使用了使用了CodeWarrior公司的公司的编译器。针对编译器。针对ARM资源配置
11、为用户提供了在资源配置为用户提供了在 CodeWarrior IDE 集成环境下配置各种集成环境下配置各种ARM 开发开发工具的能力。工具的能力。n 以以ARM为目标平台的工程创建向导,可以使用户为目标平台的工程创建向导,可以使用户以此为基础,快速创建以此为基础,快速创建ARM和和Thumb工程。工程。 20TM20nARM 将将Keil 公司收购之后公司收购之后,正式推出了针对正式推出了针对ARM 微控制器的开发工具微控制器的开发工具RealView Microcont roller Development Kit ( 简称简称Real View MDK 或者或者MDK) ,它将,它将ARM
12、 开发工具开发工具RealView Development Suite (简称简称RVDS) 的编译器的编译器RVCT 与与Keil的工程管理、调试仿真工具集成在一起,是的工程管理、调试仿真工具集成在一起,是一款非常强大的一款非常强大的ARM 微控制器开发工具。微控制器开发工具。 21TM21n2. GNU ARM开发工具开发工具nGNU是是“GNUs Not Unix”的递归缩写。在的递归缩写。在1983年年9月月27日由日由Richard Stallman公开发起公开发起GNU计划,计划,它的目标是创建一套完全自由的操作系统。它的目标是创建一套完全自由的操作系统。 nGNU格式格式ARM汇
13、编语言程序主要是面对在汇编语言程序主要是面对在ARM平平台上移植嵌入式台上移植嵌入式Linux操作系统,操作系统,GNU组织开发的组织开发的基于基于ARM平台的编译工具有主要由平台的编译工具有主要由GNU的汇编器的汇编器as,交叉汇编器交叉汇编器gcc和连接器和连接器ld组成。组成。22TM226.3 ARM汇编伪操作汇编伪操作nARM公司推出的开发工具所支持的汇编伪操公司推出的开发工具所支持的汇编伪操作包括符号定义伪操作、数据定义伪操作、作包括符号定义伪操作、数据定义伪操作、汇编信息报告控制伪操作、汇编代码控制伪汇编信息报告控制伪操作、汇编代码控制伪操作、文件包含伪操作、指令集类型标识伪操作
14、、文件包含伪操作、指令集类型标识伪操作以及其他功能伪操作。操作以及其他功能伪操作。23TM23符号定义伪操作符号定义伪操作_表表6-1 n局部变量定义局部变量定义LCLA、LCLL及及LCLSn语法格式语法格式nLCLA variable nLCLL variable nLCLSvariable n其中:其中:nvariable所说明的局部变量名称。所说明的局部变量名称。24TM24n全局变量定义全局变量定义GBLA、GBLL及及GBLSn语法格式语法格式nGBLA variable nGBLL variable nGBLS variable n其中:其中:nvariable所说明的全局变量名
15、称所说明的全局变量名称。25TM25n变量赋值伪操作变量赋值伪操作SETA、SETL及及SETSn语法格式语法格式nvariable_aSETAexpr_anvariable_lSETL expr_lnvariable_sSETS expr_s26TM26n给通用寄存器列表定义名称给通用寄存器列表定义名称RLISTn语法格式语法格式nnameRLISTregisters_listn其中:其中:nname 寄存器列表的名称;寄存器列表的名称;nregisters_list通用寄存器列表。通用寄存器列表。27TM27nVFP寄存器名称定义寄存器名称定义DN、SNnnameDN exprnnameS
16、N exprn其中:其中:nnameVFP寄存器的名称;寄存器的名称;nexpr要定义的要定义的VFP寄存器编号:双精度寄存器编号:双精度寄存器编号范围为寄存器编号范围为015,单精度寄存器编号范围,单精度寄存器编号范围为为031。28TM28nFPA浮点寄存器定义名称浮点寄存器定义名称FNn语法格式语法格式nnameFN exprn其中:其中:nnameFPA浮点寄存器的名称;浮点寄存器的名称;nexpr要定义的要定义的FPA浮点寄存器编号:编浮点寄存器编号:编号范围为号范围为07。29TM29n协处理器名称定义协处理器名称定义CPn语法格式语法格式nnameCP exprn其中:其中:nn
17、ame定义的协处理器的名称;定义的协处理器的名称;nexpr要定义名称的协处理器编号:编号要定义名称的协处理器编号:编号范围为范围为015。30TM30n协处理器寄存器名称定义协处理器寄存器名称定义CNn语法格式语法格式nnameCN exprn其中:其中:nname定义的协处理器的寄存器名称;定义的协处理器的寄存器名称;nexpr要定义名称的协处理器的寄存器编要定义名称的协处理器的寄存器编号:编号范围为号:编号范围为015。31TM31数据定义伪操作数据定义伪操作 n数据定义伪操作一般用于为特定的数据分配数据定义伪操作一般用于为特定的数据分配存储单元,也可以完成已分配存储单元的初存储单元,也
18、可以完成已分配存储单元的初始化始化 。n表表6-232TM32n分配字节存储单元分配字节存储单元DCBn语法格式语法格式nlabelDCB expr, expr n其中:其中:nlabel可选的程序标号可选的程序标号;nexpr是是-128255之间的数字或字符串。之间的数字或字符串。n例例6-1633TM33n分配半字存储单元分配半字存储单元DCW及及DCWUn语法格式语法格式nlabel DCWexpr, expr nlabel DCWUexpr, expr n其中:其中:nlabel:可选的程序标号:可选的程序标号;nexpr:是:是-3276865535之间的数字表达式之间的数字表达式
19、。n例例6-1734TM34n分配字存储单元分配字存储单元DCD及及DCDUn语法格式语法格式nlabelDCD expr, expr nlabelDCDUexpr, expr n其中:其中:nlabel可选的程序标号可选的程序标号;nexpr表达式。表达式。n例例6-1835TM35n分配单精度浮点数存储单元分配单精度浮点数存储单元DCFS及及DCFSUn语法格式语法格式nlabelDCFSfpliteral, fpliteral nlabelDCFSUfpliteral, fpliteral n其中:其中:nfpliteral单精度浮点表达式,取值范围:单精度浮点表达式,取值范围:1.17
20、549435e-383.4028234e+38。每个单精度浮点。每个单精度浮点数占数占一个字单元一个字单元。n例例6-1936TM36n分配双精度浮点数存储单元分配双精度浮点数存储单元DCFD及及DCFDUnlabelDCFDfpliteral, fpliteral nlabelDCFDUfpliteral, fpliteral n其中:其中:nfpliteral双精度浮点表达式,取值范围:双精度浮点表达式,取值范围:2.22507385850720138e-3081.7976931348623157e+308。每个双精度浮点数占每个双精度浮点数占两个字单元两个字单元。n例例6-2037TM3
21、7n分配双字存储单元分配双字存储单元DCQ及及DCQUnlabel DCQ-expr, -expr nlabel DCQU-expr, -expr n其中:其中:nlabel可选的程序标号可选的程序标号;nexpr用于初始化内存的数字或表达式用于初始化内存的数字或表达式,其数值必须是整数。,其数值必须是整数。n例例6-2138TM38n声明数据缓冲池声明数据缓冲池LTORGn在使用在使用LDR伪指令时,要在适当的位置加入伪指令时,要在适当的位置加入LTORG声明数据缓冲池,这样就会把要加载的数声明数据缓冲池,这样就会把要加载的数据保存到缓存池中,再使用据保存到缓存池中,再使用ARM加载指令读出
22、,加载指令读出,如果没有使用如果没有使用LTORG声明数据缓冲池,则汇编器声明数据缓冲池,则汇编器会在程序末尾自动声明。会在程序末尾自动声明。n语法格式语法格式nLTORGn例例6-2239TM39n分配存储空间分配存储空间SPACEn分配连续的字节区域并初始化为分配连续的字节区域并初始化为0。nlabelSPACEexprn其中:其中:nlabel可选的程序标号可选的程序标号;nexpr分配的字节数。分配的字节数。n例:例:S_buffer1 SPACE 500 ;40TM40n定义结构化内存表首地址定义结构化内存表首地址MAPn语法格式语法格式nMAP expr,base_register
23、n其中:其中:n结构化内存表的首地址为结构化内存表的首地址为expr与与base_register之和之和。n例例6-2441TM41n定义结构化内存表数据域定义结构化内存表数据域FIELDn语法格式语法格式nlabelFIELDexprn其中:其中:expr:FIELD指定的域所占内存单元字节指定的域所占内存单元字节数数。n注意事项。注意事项。n例例6-2542TM42n取相对地址初始化内存单元取相对地址初始化内存单元DCDOn语法格式:语法格式:nlable DCDO expr,expr.nlable可选取的标号;可选取的标号;nexpr数字表达式或为程序标号,内数字表达式或为程序标号,内
24、存分配的字数是由存分配的字数是由expr的个数决定的。的个数决定的。43TM43n分配代码存储单元分配代码存储单元DCIn语法格式:语法格式:nlable DCI exprnlable:可选取的标号,是内存块起始地址的标号;:可选取的标号,是内存块起始地址的标号;nexpr:数字表达式(整数)或为程序标号。:数字表达式(整数)或为程序标号。44TM44汇编代码控制伪操作汇编代码控制伪操作n汇编器在对程序代码进行编译时,会根据汇汇编器在对程序代码进行编译时,会根据汇编控制伪操作的定义情况对程序进行编译,编控制伪操作的定义情况对程序进行编译,常用的有常用的有条件编译条件编译、重复汇编重复汇编和和宏
25、定义。宏定义。 n表表6-3。45TM45nIF条件编译伪操作条件编译伪操作n语法格式:语法格式:nIFlogical_expressionn程序代码段程序代码段AnELSEn程序代码段程序代码段BnnENDIF例例6-2846TM46nWHILE条件编译伪操作条件编译伪操作n语法格式:语法格式:nWHILElogical_expressionn程序代码段程序代码段nWEND例例6-2947TM47nMACRO宏定义伪操作宏定义伪操作n语法格式:语法格式:nMACROn$labelmacroname$parameter,$ parametern程序代码段程序代码段nMEND例例6-3048TM
26、48汇编信息报告控制伪操作汇编信息报告控制伪操作 n信息报告伪操作用于程序汇编指示,主要是信息报告伪操作用于程序汇编指示,主要是在程序调试阶段使用。这类伪操作分为在程序调试阶段使用。这类伪操作分为错误错误信息报告伪操作、诊断信息报告伪操作、列信息报告伪操作、诊断信息报告伪操作、列表选项设置伪操作、插入文件标题伪操作表选项设置伪操作、插入文件标题伪操作n表表6-4 49TM49指令集类型标识伪操作指令集类型标识伪操作 n指令集类型标识伪操作用来告诉编译器所处指令集类型标识伪操作用来告诉编译器所处理的是理的是32位的位的ARM指令还是指令还是16的的Thumb指令指令,实现这一操作的操作符有,实现
27、这一操作的操作符有ARM、CODE32、THUMB、CODE16 50TM50n指令集类型标识伪操作指令集类型标识伪操作 51TM51文件包含伪操作文件包含伪操作 n文件包含伪操作包括两类:文件包含伪操作包括两类:n一类是将一个源文件包含到当前源文件中,一类是将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处并将被包含的文件在其当前位置进行汇编处理;理;n另一类是也将一个源文件包含到当前源文件另一类是也将一个源文件包含到当前源文件中,但被包含文件不进行汇编处理。中,但被包含文件不进行汇编处理。 n表表6-7。52TM52其他类型伪操作其他类型伪操作 n对齐方式设置对齐方式设
28、置ALIGNn段属性定义伪操作段属性定义伪操作AREA n源程序结尾标识源程序结尾标识END n声明程序的入口点声明程序的入口点ENTRY n定义常量或标号名称定义常量或标号名称EQU n声明全局标号声明全局标号EXPORT或或GLOBAL n将符号导出到目标文件将符号导出到目标文件EXPORTAS n外部符号声明外部符号声明IMPORT 和和 EXTERN n保留局部符号保留局部符号KEEP n禁止使用浮点指令禁止使用浮点指令NOFP n指定段的相关性指定段的相关性REQUIRE n堆栈八字节对齐堆栈八字节对齐REQUIRE8 和和 PRESERVE8 n局部变量范围定义局部变量范围定义RO
29、UT 53TM53n对齐方式设置对齐方式设置ALIGN n对齐方式设置对齐方式设置ALIGN 伪操作通过用零或伪操作通过用零或 NOP 指令指令进行填充来使当前位置与指定的边界对齐。进行填充来使当前位置与指定的边界对齐。n语法格式语法格式:nALIGN expr,offset,pad , padsize 54TM54n段属性定义伪操作段属性定义伪操作AREA n段属性定义伪操作段属性定义伪操作AREA用于用于定义一个代码段或数定义一个代码段或数据段据段,AREA 伪操作指示汇编器汇编新的代码段或伪操作指示汇编器汇编新的代码段或数据段。段是不可分的已命名独立代码或数据块,数据段。段是不可分的已命
30、名独立代码或数据块,它们由链接器处理。它们由链接器处理。n语法格式语法格式:nAREA sectionname,attr,attr.nP131表表6-955TM55n源程序结尾标识源程序结尾标识ENDnEND 伪操作通知汇编程序它已到达源文件的末尾。伪操作通知汇编程序它已到达源文件的末尾。n语法格式语法格式:nEND56TM56n声明程序的入口点声明程序的入口点ENTRY nENTRY 伪操作声明程序的入口点。伪操作声明程序的入口点。n语法格式语法格式:nENTRY57TM57n定义常量或标号名称定义常量或标号名称EQU n语法格式语法格式:nname EQU expr, typen其中:其中
31、:nname 是要为数值指定的符号名称。是要为数值指定的符号名称。nexpr 可以是一个寄存器相对的地址、程序相对的地可以是一个寄存器相对的地址、程序相对的地址、绝对地址或址、绝对地址或 32 位整型常数。位整型常数。n例例6-4158TM58n声明全局标号声明全局标号EXPORT或或GLOBALnEXPORT 指令声明一个全局的符号,可由链接器用指令声明一个全局的符号,可由链接器用于解析不同的对象和库文件中的符号引于解析不同的对象和库文件中的符号引n用。用。 GLOBAL 是是 EXPORT 的同义词。的同义词。n语法格式语法格式:nEXPORT symbol WEAK,attrnGLOBAL symbol WEAK,attr59TM59n将符号导出到目标文件将符号导出到目标文件EXPORTAS n语法格式语法格式:n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阿超公司拓展活动方案
- 重量级会员活动方案
- 阳台创意活动方案
- 门窗终端市场活动方案
- 锻炼团日活动方案
- 采摘园桃子活动方案
- 钓鱼员工生日活动方案
- 酒水摆摊活动方案
- 铁塔公司党日活动方案
- 镇万企兴万村活动方案
- 2025云南省交投集团下属临沧管理处收费员等岗位招聘(30人)考试参考题库及答案解析
- 2025 全球海上风电大会专刊 海上风电回顾与展望2025
- 1978年全国高考语文试卷
- 外研版六年级英语一般现在时的用法
- 创伤病人急救护理课件
- 2022-2023学年新疆维吾尔自治区乌鲁木齐市第七十中学物理九年级第一学期期中学业水平测试试题(含解析)
- GB∕T 12237-2021 石油、石化及相关工业用的钢制球阀
- 阀门设计手册第三版计算书(带公式)
- 教练技术第一阶段导师讲义
- 妊娠期急性脂肪肝ppt课件
- 生化工程导言课件
评论
0/150
提交评论