ARM汇编器所支持的伪操作

您所在的位置:网站首页 dsp仿真器引脚定义 ARM汇编器所支持的伪操作

ARM汇编器所支持的伪操作

#ARM汇编器所支持的伪操作| 来源: 网络整理| 查看: 265

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

在ARM的汇编程序中,有如下几种伪操作:符号定义伪操作、数据定义伪操作、汇编控制伪操作、信息报告伪操作、宏指令以及其他伪指令。

符号定义(Symbol Definition)伪操作

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

用于定义全局变量的GBLA、GBLL和GBLS。用于定义局部变量的LCLA、LCLL和LCLS。用于对变量赋值的SETA、SETL、SETS。为通用寄存器列表定义名称的RLIST。 1.全局变量定义伪操作GBLA、GBLL和GBLS

(1)语法格式

GBLA、GBLL和GBLS伪操作用于定义一个ARM程序中的全局变量,并将其初始化。其中:

GBLA伪操作用于定义一个全局的数字变量,并初始化为0;GBLL伪操作用于定义一个全局的逻辑变量,并初始化为F(假);GBLS伪操作用于定义一个全局的字符串变量,并初始化为空。

由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。

语法格式如下。

其中,:取值为GBLA、GBLL、GBLS三者之一。

:所定义的全局变量名,在其作用范围内必须唯一。全局变量的作用范围为包含该变量的源程序。

(2)使用说明

如果用这些伪操作重新声明已经声明过的变量,则变量的值将被初始化成后一次声明语句中的值。

(3)示例

① 使用伪操作声明全局变量。

GBLA Test1 ;定义一个全局的数字变量,变量名为Test1 Test1 SETA 0xaa ;将该变量赋值为0xaa GBLL Test2 ;定义一个全局的逻辑变量,变量名为Test2 Test2 SETL {TRUE} ;将该变量赋值为真 GBLS Test3 ;定义一个全局的字符串变量,变量名为Test3 Test3 SETS “Testing”;将该变量赋值为“Testing”

② 声明变量objectsize并设置其值为0xff,为“SPACE”操作做准备。

GBLA objectsize Objectsize SETA oxff SPACE objectsize

2.局部变量定义伪操作LCLA、LCLL和LCLS

(1)语法格式

LCLA、LCLL和LCLS伪指令用于定义一个ARM程序中的局部变量,并将其初始化。其中:

LCLA伪操作用于定义一个局部的数字变量,并初始化为0;LCLL伪操作用于定义一个局部的逻辑变量,并初始化为F(假);LCLS伪操作用于定义一个局部的字符串变量,并初始化为空。

以上三条伪操作用于声明局部变量,在其作用范围内变量名必须唯一。

语法格式如下。

其中,:取值为LCLA、LCLL、LCLS三者之一。

:所定义的局部变量名,在其作用范围内必须唯一。局部变量作用范围为包含该局部变量的宏。

(2)说明

如果用这些伪操作重新声明已经声明过的变量,则变量的值将被初始化成后一次声明语句中的值。

(3)示例

使用伪操作声明局部变量。

LCLA Test4 ;声明一个局部的数字变量,变量名为Test4 Test3 SETA 0xaa ;将该变量赋值为0xaa LCLL Test5 ;声明一个局部的逻辑变量,变量名为Test5 Test4 SETL {TRUE} ;将该变量赋值为真 LCLS Test6 ;定义一个局部的字符串变量,变量名为Test6 Test6 SETS “Testing” ;将该变量赋值为“Testing”

3.变量赋值伪操作SETA、SETL和SETS

(1)语法格式

SETA、SETL、SETS伪指令用于给一个已经定义的全局变量或局部变量赋值。其中:

SETA伪操作用于给一个数学变量赋值;SETL伪操作用于给一个逻辑变量赋值;SETS伪操作用于给一个字符串变量赋值。

语法格式如下。

Variable expr

其中,Variable:变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。

:取值为SETA,SETL,SETS三者之一。

Expr:数学、逻辑或字符串表达式,也就是将要赋予变量的值。

(2)使用说明

在向变量赋值前必须先声明变量。

(3)示例

① 为预先定义的变量赋值。

LCLA Test3 ;声明一个局部的数字变量,变量名为Test3 Test3 SETA 0xaa ;将该变量赋值为0xaa LCLL Test4 ;声明一个局部的逻辑变量,变量名为Test4 Test4 SETL {TRUE} ;将该变量赋值为真 LCLS Test6 ;定义一个局部的字符串变量,变量名为Test6 Test6 SETS “Testing” ;将该变量赋值为“Testing”

4.通用寄存器列表定义伪操作RLIST

(1)语法格式

RLIST伪操作可用于对一个通用寄存器列表定义名称,使用该伪操作定义的名称可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。

语法格式如下。

Name RLIST {list-of-registers}

其中,Name:寄存器列表的名称。

list-of-registers:通用寄存器列表。列表中的寄存器用“,”隔开,如果是编号连续的通用寄存器可以用“-”指定寄存器范围。具体用法参见程序示例。

(2)使用说明

在使用ARM汇编编译器编译源文件时,可以使用“-checkreg”选项来指定汇编器进行寄存器检查。如果汇编器检测到寄存器列表中的寄存器编号非升序排列,将给出编译警告。

(3)示例

① 将寄存器列表名称定义为RegList,可在ARM指令LDM/STM中通过该名称访问寄存器列表。

RegList RLIST {R0-R5,R8,R10} ;

② 使用“-”在寄存器列表中,指定寄存器范围。

Context RLIST {r0-r6,r8,r10-r12,r15} ;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3