首页 理论教育ARM嵌入式系统原理与应用:常见伪操作

ARM嵌入式系统原理与应用:常见伪操作

【摘要】:ARM汇编语言程序是由机器指令、伪指令和伪操作组成的。常见的伪操作有以下几种。

ARM汇编语言程序是由机器指令、伪指令和伪操作组成的。

在ARM汇编语言程序中,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪操作标识符,它们所完成的操作称为伪操作(directive)。伪操作在源程序中的作用是为了完成汇编程序做各种准备工作的,这些伪操作仅在汇编过程中起作用,一旦汇编结束,伪操作的使命就结束。

在ARM的汇编程序中,伪操作主要有符号定义伪操作、数据定义伪操作、汇编控制伪操作和杂项伪操作等。

1.符号定义伪操作

符号定义伪操作用于定义ARM汇编程序中的变量、对变量赋值及定义寄存器名称等操作。常见的伪操作有以下几种。

●GBLA,GBLL和GBLS:定义全局变量。

●LCLA,LCLL和LCLS:定义局部变量

●SETA,SETL和SETS:为变量赋值。

●RLIST:为通用寄存器列表定义名称。

●CN:为协处理器的寄存器定义名称。

●CP:为协处理器定义名称。

●DN和SN:为VFP的寄存器定义名称。

●FN:为FPA的浮点寄存器定义名称。

2.数据定义伪操作

数据定义伪操作用于数据表定义、文字池定义、数据空间分配等。常用的伪操作有:

●LTORG:声明一个数据缓冲池的开始。

●MAP:定义一个结构化的内存表的首地址

●FIELD:定义结构化内存表的一个数据域。

●SPACE:分配一块内存空间,并用0初始化

●DCB:分配一段字节的内存单元,并用指定的数据初始化。

●DCD和DCDU:分配一段字的内存单元,并用指定的数据初始化。

●DCFD和DCFDU:分配一段双字的内存单元,并用双精度的浮点数据初始化。

●DCFS和DCFSU:分配一段字的内存单元,并用单精度的浮点数据初始化。(www.chuimin.cn)

●DCQ和DCQU:分配一段双字的内存单元,并用64位整型数据初始化。

●DCW和DCWU:分配一段半字的内存单元,并用指定的数据初始化。

3.汇编控制伪操作

汇编控制伪操作用于条件汇编、宏定义、重复汇编控制等,常用的伪操作有:

●IF、ELSE和ENDIF:根据条件把一段源程序代码包括在汇编程序内或排除在程序之外。

●WHILE和WEND:根据条件重复汇编相同的源程序代码。

●MACRO和MEND:MACRO标识宏定义的开始,MEND标识宏定义结束。用MACRO和MEND定义一段代码,称为宏定义体,在程序中可以通过宏指令多次调用该代码段。MACRO、MEND伪操作可以嵌套使用。

●MEXIT:用于从宏定义中跳转出去。

4.杂项伪操作

ARM汇编中还有一些其他的伪操作,在汇编程序中经常会被使用,称为杂项伪操作。杂项伪操作包括段定义伪操作、入口点设置伪操作、包含文件伪操作、标号导出伪操作或引入声明伪操作等。常用的伪操作有:

●AREA:定义一个代码段或数据段。

●ALIGN:使程序当前位置满足一定的对齐方式。

●ENTRY:指定程序入口点。

●END:指示汇编源程序结束。

●CODE16和CODE32:定义16位Thumb和32位ARM指令的起始位置。

●EQU:为数字常量、基于寄存器的值和程序中的标号定义一个字符名称。

●EXPORT和GLOBAL:声明一个全局的符号,该符号可在其他的文件中引用。

●IMPORT和EXTERN:通知编译器要使用的符号名称在其他的源文件中定义,但要在当前源文件中引用。

●GET和INCLUDE:将一个源文件包含到当前的源文件中。

●INCBIN:将一个目标文件或数据文件不作任何修改地包含到当前源文件。

●RN:给特定的寄存器定义名称。

●ROUT:定义局部变量的有效范围。