微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM汇编程序设计之:ARM汇编器所支持的伪操作

ARM汇编程序设计之:ARM汇编器所支持的伪操作

时间:09-30 来源:互联网 点击:

,显示了局部变量的作用范围。

MACRO ;声明一个宏

$labelmessage$a ;宏原型

LCLSerr ;声明局部字符串变量

$label

INFO0,err:CC::STR:$a

MEND ;宏结束,局部变量不再起作用

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

(1)语法格式

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

SETA伪操作用于给一个数学变量赋值;

SETL伪操作用于给一个逻辑变量赋值;

SETS伪操作用于给一个字符串变量赋值;

语法格式如下。

Variablesetx>expr

①Variable

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

②setx>

取值为SETA、SETL、SETS之一。

③expr

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

(2)使用说明

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

也可以在汇编指令中预定义变量,如:

Armasm--pdobjectsizeSETAoxff--oobjectfilesourcefile

(3)示例

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

LCLATest3 ;声明一个局部的数字变量,变量名为Test3

Test3SETA0xaa ;将该变量赋值为0xaa

LCLLTest4 ;声明一个局部的逻辑变量,变量名为Test4

Test4SETL{TRUE} ;将该变量赋值为真

LCLSTest6 ;定义一个局部的字符串变量,变量名为Test6

Test6SETSTesting ;将该变量赋值为“Testing”

②使用变量赋值伪操作,定义一些程序相关内容。

GBLAversionNumber

VersionNumber SETA21

GBLLDebug

Debug SETL{TRUE}

GBLS versionString

VersionString SETSversion1.0

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

(1)语法格式

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

语法格式如下。

NameRLIST{list-of-registers}

①Name

寄存器列表的名称。

注意

该名称不能和已经定义寄存器或协处理器名称相同。

②list-of-registers

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

(2)使用说明

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

(3)示例

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

RegListRLIST{R0-R5,R8,R10};

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

ContextRLIST{r0-r6,r8,r10-r12,r15} ;

5.协处理器寄存器名称定义伪操作CN

(1)语法格式

CN伪操作为协处理器寄存器定义名称。

语法格式如下。

NameCNexpr

①Name

定义的协处理器寄存器的名称。

注意

该名称不能和已经定义寄存器或协处理器名称相同。

②expr

协处理器寄存器编号。

(2)使用说明

协处理器寄存器编号的数值范围为0~15。避免使用不同的名称定义同一物理寄存器。

注意

协处理器寄存器的名称不能被定义为c0~c15,这些名称已经被汇编器预定义。

(3)示例

将协处理器寄存器6命名为Power。

PowerCN6

6.协处理器名称定义伪操作CP

(1)语法格式

CP伪操作为指定的协处理器定义名称。

语法格式如下。

NameCPexpr

①Name

定义的协处理器名称。

注意

该名称不能和已经定义寄存器或其他协处理器名称相同。

②expr

协处理器编号。

(2)使用说明

协处理器编号范围为0~15。

使用CP伪操作为协处理器定义一个方便记忆的名称,可以使程序员更高效地编写代码。

注意

协处理器寄存器的称不能被定义为p0~p15,这些名称已经被汇编器预定义。

(3)示例

将协处理器6命名为Dmu。

DmuCP6

7.VFP寄存器名称定义伪操作DN/SN

(1)语法格式

DN伪操作为双精度(double-precision)VFP寄存器定义名称。D0~D15是汇编器预先定义的,用户不能使用。

SN伪操作为单精度(single-precision)VFP寄存器定义名称。S0~S31是汇编器预先定义的,用户不能使用。

语法格式如下。

NameDNexpr

NameSNexpr

①Name

指定的VFP寄存器的名称。

注意

该名称不能和已经定义寄存器或其他协处理器名称相同。

②expr

指定VFP寄存器编号。对于双精度寄存器编号范围为0~15;对于单精度寄存器编号范围为0~31。

(2)示例

①将VFP双精度寄存器6定义为energy。

energyDN6

②将VFP单精度寄存器16定义为mass。

massSN16

8.浮点寄存器名称定义伪操作FN

(1)语法格式

FN为一个FPA浮点寄存器定义名称。F0~F7是汇编器预先定义的,用户不能使用。

注意

FPA的使用在ARM公司新发布的编译器RVCT中已不再支持。

语法格

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top