1.汇编程序的根本组成
ARM汇编语言程序中,程序是以程序段为单位安排代码的。段是相对独立的指令或许代码序列,具有特定的称号。段的品种有代码段、数据段和通用段,代码段的内容为履行代码,数据段寄存代码运转时需求用到的数据,通用段不包含用户代码和数据,一切通用段共用一个空间。段运用AREA伪操作来界说,而且阐明相关特点,如
代码段界说
数据段界说
等
一个汇编程序至少应该有一个代码段,能够有零或许多个数据段。在格局上,一个汇编程序需求至少有一个ENTRY(关于ENTRY详细内容看伪操作符ENTRY),还需求在汇编源文件完毕处,写上END表明该源文件的完毕。
如一个根本的汇编源程序
Start
当汇编程序较长时,能够分割为多个代码段和多个数据段,多个段在程序编译链接时,终究构成一个可履行的映像文件。一个可履行映像文件一般由以下几部分组成
链接器依据体系默许或许用户设定的规矩,将各段安排在存储器中的相应方位,因而源程序中段之间的相对方位与可履行映像文件中的段的相对方位一般不会相同。
2.汇编句子应该留意的当地
汇编句子格局
[LABEL] OPERATION, [OPERAND], [;COMMENT]
LABEL有必要在一行的最初写。
OPERATION包含指令、伪操作、宏指令或伪指令。每一条操作助记符有必要悉数大写或许悉数小写。在写操作助记符前,有必要有空格。
OPERAND 表明操作的目标,能够使常量、变量、标号、寄存器或许表达式,不同的目标之间有必要用逗号分隔。
比如:
DATA
3.常用符号
汇编语言中,常常运用各种符号表明变量、常量和地址。
变量的界说:运用伪操作GBLA、GBLL、GBLS,分别是界说大局的数值变量、逻辑变量和字符变量;LCLA、LCLL、LCLS界说部分的数值变量、逻辑变量和字符变量。相应的变量运用SETA、SETL、SETS来进行赋值。留意字符串长度不该超越512个字节。
比如:
DATA
常量是在运转过程中不能改动的量。ARM支撑数值常量、逻辑常量和字符串常量。汇编中运用EQU来界说一个数值常量,如
Test EQU 10; 界说标号Test的值为20.
Addr EQU 0x55,CODE32;
关于EQU的详细运用,看伪操作EQU。
数值常量一般为32为的整数,能够使十进制、十六进制,也能够是n进制(n=2~9)如8_247是一个八进制数。
4.常见的伪操作符
符号界说伪操作
GBLA、GBLL、GBLS
LCLA、LCLL、LCLS
SETA、SETL、SETS
RLIST
其间RLIST用来界说通用寄存器列表称号,运用该伪操作界说的称号能够在ARM指令LDM/STM中运用。在LDM/STM中,拜访列表中的寄存器次第为寄存器编号由低到高的次序。如
RegList RLIST {r0-r5,r8,r10}; 将寄存器列表称号界说为RegList
在程序中运用
STMFD SP!, RegList ;存储列表到仓库
LDMIA R5, RegList ; 加载列表
数据界说伪操作
DCB 分配一片接连的字节存储单元并初始化
DCW(DCWU) 分配一片接连的半字存储单元并初始化
DCD(DCDU) 分配一片接连的字存储单元并初始化
DCDO、DCI、DCQ(DCQU)
DCFS(DCFSU) 为单精度浮点数分配一片接连的字存储单元并初始化
DCFD(DCFDU) 为双精度浮点数分配一片接连的字存储单元并初始化
SPACE 分配一片接连的存储单元
FIELD、MAP、LTORG