| |
符号定义伪操作
符号定义伪操作用于定义ARM汇编程序中的变量,对变量进行赋值以及定义寄存器名称。
(1) GBLA、GBLL及GBLS
GBLA、GBLL及GBLS伪操作作用于声明一个ARM程序中的全局变量,并在默认情况下将其初始化。
GBLA伪操作声明一个全局的算数变量,并将其初始化成0.
GBLL伪操作声明一个全局的逻辑变量,并将其初始化{FALSE}.
GBLS伪操作声明一个全局的字符串变量,并将其初始化成空串“”。
语法格式
<GBLX> Variable
其中:<GBLX>是GBLA、GBLL或GBLS 3种伪操作之一;Variable是全局变量的名称。在其作用范围内必须惟一,即同一个变量名只能在作用范围内出现一次。
使用说明
如果这些伪操作重新声明已经声明过的变量,则变量的值将被初始化成第2次声明语句中的值。全局变量的作用范围为包含该变量的源程序。
示例1变量定义举例
GBLA arithmetic ;声明一个全局的算数变量
Arithmatic SETA 0xEF ;向该变量赋值
SPACE arithmetic ;使用该变量
GBLL logical ;声明一个全局的逻辑变量logical
Logical SETL{TURE} ;向该变量赋值
(1) LCLA、LCLL及 LCLS
LCLA、LCLL及LCLS伪操作作用于声明一个ARM程序中的局部变量,并在默认情况下将其初始化。
LCLA伪操作声明一个局部的算术变量,并将其初始化成0.
LCLL伪操作声明一个局部的逻辑变量,并将其初始化成{FALSE}.
LCLS伪操作声明一个局部的串变量,并将其初始化成空串“”。
语法格式
<LCLX> Variable
其中:<LCLX>是LCLA、LCLL或LCLS三种伪操作之一;Variable是局部变量的名称。在其作用范围内必须惟一,即同一个变量只能在作用范围内出现一次。
使用说明
如果用这些伪操作重新声明已经声明过的变量,则变量的值将被初始化成第2次声明语句中的值。局部变量的作用范围为包含该局部变量的宏代码的一个实例,即局部变量一般只用于宏代码中。
实例2 局部变量定义举例
MACRO ;声明一个宏
$lable message $a ;宏的原型,宏的名称为message,有一个参数$a
LCLS string ;声明一个局部变量string
String SETS “error” ;向该变量赋值
$lable ;代码
INFO 0,“string”:CC::STR:$a ;使用该串变量
MEND ;宏定义结束
(3)SETA、SETL及SETS
SETA、SETL及SETS伪操作作用于给一个ARM程序中的全局或局部变量赋值。
SETA伪操作给一个全局或局部算术变量赋值。
SETL伪操作给一个全局或局部逻辑变量赋值。
SETS伪操作给一个全局或局部字符串变量赋值。
语法格式
<SETX> Variable expr
其中:<SETX>是SETA、SETL或SETS三种伪操作之一;Variable是使用GBLA、GBLL、GBLS、LCLA、LCLL或LCLS定义的变量的名称,在其作用范围内必须惟一;expr为表达式,即赋予变量的值。
使用说明
注意:在向变量赋值前,必须先声明该变量。
实例3 变量赋值举例
GBLA arithmetic ;声明一个全局的算术变量
Arithmetic SETA 0xEF ;向该算术变量赋值
SPACE arithmetic ;引用该算术变量
GBLL logical ;声明一个全局的逻辑变量logical
Logical SETL{TURE} ;向该变逻辑量赋值
(4)RLIST
RLIST为一个通用寄存器列表定义名称。
语法格式
name RLIST {list of registers}
其中:name是将要定义的寄存器列表的名称;{list of registers}为通用寄存器列表。
使用说明
RLIST伪操作作用于给一个通用寄存器列表定义名称。定义的名称可在LDM/STM指令中使用,即这个名称代表了一个通用寄存器列表。在LDM/STM指令中,寄存器列表中的寄存器的访问次序总是先访问编号较低的寄存器,再访问编号较高的寄存器。也可以说,是编号低的寄存器对应于存储器的低地址,而不管寄存器列表中各寄存器的排列顺序。但为了编程的统一性,寄存器列表中各寄存器一般按编号由低到高排列。
示例4 RLIST伪操作举例
List RLIST{R0-R3} ;将寄存器列表{R0-R3}的名称定义为List
STMDF SP! List ;保存寄存器列表List
(5)CN
CN为一个协处理器的寄存器定义名称。
语法格式
name CN expr
其中:name是该寄存器的名称;expr为协处理器的寄存器的编号,数值范围为0~15.
使用说明
CN伪操作作用于一个协处理器的寄存器定义名称,方便程序员记忆该寄存器的功能,所以为该寄存器取的名称一般与该寄存器的功能有关。
示例5 CN伪操作举例
Power CN 6 ;将协处理器的寄存器6名称定义为Power
(6)CP
CP为一个协处理器定义名称。
语法格式
name CP expr
其中:name是该协处理器的名称。Expr为协处理器的编号,数值范围为0~15.
使用说明
CP伪操作用于给一个协处理器定义名称,方便程序员记忆该协处理器的功能,所以为该寄存器取的名称一般与该寄存器的功能有关。
示例6 CP伪操作举例
Dzx CP 6
(7)DN、SN
DN为一个双精度的VFP寄存器定义名称。
SN为一个单精度的VFP寄存器定义名称。
语法格式
name DN expr
name SN expr
其中:name是将要定义的VFP寄存器的名称。Expr为VFP双精度寄存器编号(0~15)或者VFP单精度寄存器编号(0~31)
使用说明
DN和SN伪操作用于一个VFP寄存器定义名称,方便程序员记忆该协处理器的功能,所以为该寄存器取的名称一般与该寄存器的功能有关。
示例7 DN、SN伪操作举例
Height DN 6 ;将VFP双精度寄存器6名称定义为height
Width SN 20 ;将VFP单精度寄存器20名称定义为width
(8)FN
name FN expr
其中:expr是将要定义的浮点寄存器的名称。expr为浮点寄存器的编号,数值范围为0~7.
使用说明
FN伪操作作用于给一个浮点寄存器定义名称,方便程序员记忆该协处理器的功能,所以为该寄存器取的名称一般与该寄存器的功能有关。
示例8
FN伪操作举例
Lengh FN 6 ;将浮点寄存器6名称定义为Lengh
凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网