4.1.5 ARM汇编器所支持的伪指令(1)
ARM伪指令不是ARM指令集中的指令,它们是一些特殊的指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,它们并不是在运行期间由机器执行,而是在汇编程序对源程序汇编期间由汇编程序处理,这些特殊指令助记符就被称作为伪指令。它们可以像其他ARM指令一样使用,但是在编译时这些指令将被等效的ARM指令取代。它们在源程序中的作用是为完成汇编程序作各种准备工作,也就是说这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成了。
在ARM的汇编程序中,伪指令种类繁多,可以细分为如下几种。
符号定义伪(Symbol Definition)指令
数据定义伪(Data Definition)指令
汇编控制伪(Assembly Control)指令
宏指令
其他伪指令
1. 符号定义伪指令
符号定义伪指令用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等。常见的符号定义伪指令有如下几种。
用于定义全局变量的GBLA、GBLL和GBLS。
用于定义局部变量的LCLA、LCLL和LCLS。
用于对变量赋值的SETA、SETL、SETS。
为通用寄存器列表定义名称的RLIST。
下面我们详细介绍该类伪指令的语法格式及其功能。
(1) 用于定义全局变量的GBLA、GBLL和GBLS
功能:定义全局变量,并将其初始化。其中,
GBLA伪指令用于定义一个全局的数字变量,并初始化为0;
GBLL伪指令用于定义一个全局的逻辑变量,并初始化为F(假);
GBLS伪指令用于定义一个全局的字符串变量,并初始化为空。
语法:
- GBLA(GBLL和GBLS) 全局变量名
下面是这类指令的一些使用实例。
如果想定义一个全局的数字变量,变量名为num,则可这样定义:
- GBLA num;定义一个全局的数字变量,变量名为num
将该变量赋值为0x0a,应该为:
- num SETA 0x0a;
定义一个变量名为str全局的字符串变量,应该这样:
- GBLS str;
如果想将该变量赋值为"hello",也可这样:
- str SETS"hello";
(2) 用于定义局部变量的LCLA、LCLL和LCLS
功能:定义局部变量,并将其初始化。其中,
LCLA伪指令用于定义一个局部的数字变量,并初始化为0;
LCLL伪指令用于定义一个局部的逻辑变量,并初始化为F(假);
LCLS伪指令用于定义一个局部的字符串变量,并初始化为空。
语法:
- LCLA(LCLL或LCLS) 局部变量名
它的使用与上一种类似。假如需要定义一个局部的数字变量,变量名为num1,可以这样定义:
- LCLA num1;
将该变量赋值为0xaa的格式应该如下:
- num1 SETA 0xaa;
定义一个变量名为str1全局字符串变量,使用如下格式:
- LCLS str1;
与上面类似,将该变量赋值为"hello"的格式为:
- str1 SETS "hello";