微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > arm汇编编程(示例)

arm汇编编程(示例)

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

码段外面

2)定义变量

常量:数字常量,有三种表示方式:十进制数、十六进制数、字符串常量、布尔常量(如testnoSETS{FALSE})

变量:数字变量、逻辑变量、字符串变量

(1)*GBLA、GBLL、GBLS定义全局变量

格式:GBLA(GBLL、GBLS)全局变量名

GBLA伪指令用于定义一个全局的数字变量,并初始化为0;

GBLL伪指令用于定义一个全局的逻辑变量,并初始化为F(假);

GBLS伪指令用于定义一个全局的字符串变量,并初始化为空;

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

示例:全局变量的定义与赋值

GBLAcount;定义全局变量

countSETA2;给全局变量赋值为2,必须顶格

AREAExample,CODE,READONLY

CODE32

ENTRY

Start

MOVR0,#count;将count内的值写入R0内

ADDR0,R0,#2

BStart

END

注:在赋值过程中,全局变量名必须顶格写,全局变量常在代码段外定义和赋值

示例:变量与内存地址

GBLAglobv

globvSETA23

AREAExample,CODE,READONLY;声明代码段Example

ENTRY;程序入口

Start

LDRR0,=globv;golbv是全局变量,将内存地址读入到R0内

LDRR1,[R0];将内存数据值读入到R1内

ADDR1,R1,#2

STRR1,[R0];将修改后数据再赋给变量

MOVR0,#0

OVER

END

注:#取变量值=取变量地址[R0]读取R0内地址所指向的数据值

(2)*LCLA、LCLL、LCLS定义局部变量

格式:LCLA(LCLL或LCLS)局部变量名

LCLA伪指令用于定义一个局部的数字变量,并初始化为0;

LCLL伪指令用于定义一个局部的逻辑变量,并初始化为F(假);

LCLS伪指令用于定义一个局部的字符串变量,并初始化为空;

以上三条伪指令必须写在宏定义内,用于声明局部变量,宏结束,局部变量不再起作用

示例:

LCLAnum;声明一个局部的数字变量,变量名为num

numSETA0xaa;将该变量赋值为0xaa

LCLLisOk;声明一个局部的逻辑变量,变量名为isOk

isOkSETL;将该变量赋值为真

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

str1SETS"Testing";将该变量赋值为"Testing"

示例:局部变量的定义与赋值

MACRO

MOV_START;宏名

LCLAx;定义局部变量

LCLAy

xSETA12;必须顶格写

ySETA24

MOVR0,#2

MOVR1,#3

ADDR0,R0,R1

MEND

AREAExample,CODE,READONLY;声明代码段Example

ENTRY;程序入口

Start

MOV_START

MOVR0,#0

OVER

END

注:在赋值过程中,局部变量名必须顶格写,局部变量必须在宏定义内使用

(3)*SETA、SETL和SETS用于给一个已经定义的全局变量或局部变量赋值。

SETA伪指令用于给一个数学变量赋值;

SETL伪指令用于给一个逻辑变量赋值;

SETS伪指令用于给一个字符串变量赋值;

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

(4)变量代换$

$在数字变量前,将变值转换为十六进制字符串

$在逻辑变量前,将变量转换为真或假

$在字符串变量前,替换后面变量的字符串

如:

LCLSY1;定义局部字符串变量Y1和Y2

LCLSY2

Y1SETS"WORLD!"

Y2SETS"LELLO,$Y1";将字符串Y2的值替换$Y1,形成新的字符串

3)、定义一个寄存器(RN)

格式:名称RN表达式

RN伪指令用于给一个寄存器定义一个别名。

示例:

TempRNR0;将R0定义一个别名Temp

4)定义寄存器列表(RLIST)

格式:名称RLIST{寄存器列表}

用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在ARM指令LDM/STM中使用。

在LDM/STM指令中,寄存器列表中的寄存器访问次序总是先访问编号较低的寄存器,再访问编号较高的寄存器,而不管寄存器列表中各寄存器的排列顺序。

示例:RegListRLIST{R0-R5,R8,R10};将寄存器列表名称定义为RegList,用于多寄存器寻址(后面详解)

5)定义协处理器寄存器(CN)

格式:名称CN协处理器的寄存器编号

示例:PowerCN6;将协处理器的寄存器6名称定义为Power

6)定义协处理器(CP)

格式:名称CP协处理器名

示例:DmuCP6;将协处理器6名称定义为Dmu

7)定义浮点或精度寄存器(DN,SN,FN)

格式:名称DN双精度寄存器编号;DN为双精度VFP寄存器定义名称

格式:名称SN单精度寄存器编号;SN为单精度VFP寄存器定义名称

格式:名称FN浮点寄存器编号;FN为浮点寄存器定义名称

示例:

heightDN6;将VFP双精度寄存器6名称定义为height

widthSN16;将VFP单精度寄存器16名称定义为width

heightFN6;将浮点寄存器6名称定义为height

//^^^^^^^^^^^^^^^^^^^^^^^^^^下午^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

3.数据定义伪操作(申请内存)

数据定义伪指令用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。

1)按类型分配内存

格式:标号伪指令表达式

标号

表达式:初始化的值,表达式可以为程序标号或字符、数字表达式

伪指令:如下

(1)DCB用于分配一片连续的字节存储单元(字符数组),可用

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

网站地图

Top