arm汇编编程(示例)
=号代替
StrDCB"Thisisatest!";分配一片连续的字节存储单元并初始化。
(2)DCW(或DCWU)用于分配一片连续的半字存储单元(16位短整型数组),DCW半字对齐,DCWU不严格半字对齐。
DataTestDCW1,2,3
(3)DCD(或DCDU)用于分配一片连续的字存储单元(32位,整型数组),DCD可用&代替,DCD字对齐的
DataTestDCD4,5,6
(4)DCFD(或DCFDU)为双精度的浮点数分配一片连续的字存储单元,每个双精度的浮点数占据两个字单元。
FDataTestDCFD2E115,-5E7
(5)DCFS(或DCFSU)为单精度的浮点数分配一片连续的字存储单元,每个单精度的浮点数占据一个字单元。
FDataTestDCFS2E5,-5E-7
(6)DCQ(或DCQU)用于分配一片以8个字节为单位的连续存储区域(每8字节为一个数据的数组)
DataTestDCQ100;分配一片连续的存储单元并初始化为指定的值100。
2)申请连续内存
(1)申请一个连续内存(SPACE)
用于分配一片连续的存储区域并初始化为0,可用%代替
格式:标号SPACE表达式
表达式为要分配的字节数
例:DataSpaceSPACE100;分配连续100字节的存储单元并初始化为0。
(2)声明一个数据缓冲池的开始(LTORG)
通常,把数据缓冲池放在代码段的最后面,下一个代码段之前,或END之前
示例:
AREAExample,CODE,READONLY;声明代码段Example
ENTRY;程序入口
Start
BLfuncl
funcl
LDRR0,=0x12345678
ADDR1,R1,R0
MOVPC,LR
LTORG;定义缓冲池0x12345678LTORG根据LDR确定内存地址
dataSPACE4200;从当前位置开始分配4200字节内存
END
(3)定义一个结构化的内存表首地址(MAP)
格式:MAP表达式{,基址寄存器}
用于定义一个结构化的内存表的首地址。可用^代替。
表达式可以为程序中的标号或数学表达式,基址寄存器为可选项.
当基址寄存器选项不存在时,表达式的值即为内存表的首地址,
当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。
例:
DatastrucSPACE280;分配280个字节单元
MAPDatastruc;内存表的首地址为Datastruc内存块
(4)定义一个结构化内存表的数据域(FILED)
用于定义一个结构化内存表中的数据域。可用#代替
格式:标号FILED表达式
FIELD伪指令常与MAP伪指令配合使用来定义结构化的内存表。表达式的值为当前数据域所占的字节数。
标号为数据域(字段、成员变量)名
MAP伪指令定义内存表的首地址,
FIELD伪指令定义内存表中的各个数据域,并可以为每个数据域指定一个标号供其他的指令引用。(3)内存首地址(MAP)
MAP伪指令通常与FIELD伪指令配合使用来定义结构化的内存表。
示例:
DatastrucSPACE280;分配280个字节单元
MAPDatastruc;内存表的首地址为Datastruc内存块
constaFIELD4;字段consta长度4字节,相对地址0
constabFIELD4;字段constab长度4字节,相对地址4
xFIELD8;字段x长度8字节,相对地址8
yFIELD8;字段y长度8字节,相对地址16
stringFIELD256;字段string长度256字节,相对地址24
LDRR6,[R9,consta];引用内存表中的数据域
注意:MAP伪操作和FIELD伪操作仅仅是定义数据结构,他们并不实际分配内存单元,而SPACE用于分配内存
4.汇编控制伪操作
用于控制汇编程序的执行流程,常用的汇编控制伪指令包括以下几条:
(1)IF逻辑表达式...ELSE...ENDIF条件控制
(2)WHILE逻辑表达式...WEND循环控制
例:条件编译
AREAExample,CODE,READONLY
CODE32
Data_in*100;定义标号Data_in的值为100在ENTRY入口之前
GBLAcount;定义全局变量
countSETA20
ENTRY
Start
IFcount MOVR0,#3 ELSE MOVR1,#24 ENDIF MOVR1,#12 ADDR0,R0,R1 END 例:循环编译 GBLACounter;声明一个全局的数学变量,变量名为Counter CounterSETA3;由变量Counter控制循环次数 …… WHILECounter<10 指令序列 IFcontinue MEXIT;退出宏 ENDIF WEND 5.其他常用的伪指令 1)、AREA 格式:AREA段名属性1,属性2,…… AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用"|"括起来,如|1_test|。 属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号? —CODE属性:用于定义代码段,默认为READONLY。 —DATA属性:用于定义数据段,默认为READWRITE。 —READONLY属性:指定本段为只读,代码段默认为READONLY。 —READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE。 —ALIGN属性:使用方式为ALIGN表达式。在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的 —COMMON属性:定义一个通用的段,不包含任何的用户代码和数据。各源文件中同名的COMMON段共享同一段存储单元 一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个
arm汇编编 相关文章:
- ARM汇编编程基础之四-ARM汇编伪操作(11-27)
- ARM汇编编程基础之三-基本寻址方式与基本指令(11-27)
- ARM汇编编程基础之一-寄存器(11-27)
- ARM汇编编程基础之五-ADS开发环境的使用(11-27)
- ARM汇编编程基础之二-流水线对PC值的影响(11-27)
- ARM汇编编程基础之六-其它寻址模式与其它指令(11-27)