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

arm汇编编程(示例)

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

=号代替

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段共享同一段存储单元

一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个

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

网站地图

Top