arm汇编编程(示例)
码段外面
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用于分配一片连续的字节存储单元(字符数组),可用
arm汇编编 相关文章:
- ARM汇编编程基础之四-ARM汇编伪操作(11-27)
- ARM汇编编程基础之三-基本寻址方式与基本指令(11-27)
- ARM汇编编程基础之一-寄存器(11-27)
- ARM汇编编程基础之五-ADS开发环境的使用(11-27)
- ARM汇编编程基础之二-流水线对PC值的影响(11-27)
- ARM汇编编程基础之六-其它寻址模式与其它指令(11-27)