ARM体系结构与编程-2
2020-04-03 来源:eefocus
ARM汇编语言程序设计:ARM汇编语言源程序中的语句由指令、伪操作和宏指令组成。ARM指令已经在上一节介绍过了。
ARM伪操作和宏指令分类:
<1>符号定义伪操作
GBLA:声明一个全局的算术变量,并将其初始化为0。 语法:GBLA variable
GBLL:声明一个全局的逻辑变量,并将其初始化为FALSE 语法:GBLL variable
GBLS:声明一个全局的串变量,并将其初始化为空串“” 语法:GBLS variable
LCLA:声明一个局部的算术变量,并将其初始化为0 语法:LCLA variable
LCLL:声明一个局部的逻辑变量,并将其初始化为FALSE 语法:LCLL variable
LCLS:声明一个局部的串变量,并将其初始化为空串“” 语法:LCLS variable
SETA:给一个算术变量赋值 语法:SETA variable expr
SETL:给一个逻辑变量赋值 语法:SETL variable expr
SETS:给一个串变量赋值 语法:SETS variable expr
RLIST:为一个通用寄存器列表定义名称 语法:name RLIST {list-of-registers}
CN:为一个协处理器的寄存器定义名称 语法:name CN expr
CP:为一个协处理器定义名称 语法:name CP expr
<2>数据定义伪操作
LTORG:用于声明一个数据缓冲池的开始 语法:LTORG
MAP:用于定义一个结构化的内存表的首地址 语法:MAP expr{, base-register}
FIELD:用于定义一个结构化的内存表中的数据域,#是FIELD的同义词 语法:{label} FIELD expr
SPACE:用于分配一块内存单元,并用0初始化,%是SPACE的同义词 语法:{label} SPACE expr
DCB:用于分配一段字节内存单元,并用expr初始化,=是DCB的同义词 语法:{label} DCB expr
DCD:用于分配一段字内存单元,并用expr初始化,&是DCD的同义词 语法:{label} DCD expr
<3>汇编控制伪操作
IF,ELSE及ENDIF:[是IF伪操作的同义词,|是ELSE伪操作的同义词,]是ENDIF伪操作的同义词。
WHILE及WEND:
MACRO及MEND:语法:
MACRO
{$label} macroname {$parameter1{,parameter2}...}
;code
...
;code
MEND
MEXIT:用于从宏中跳转出去
<4>框架描述伪操作
CODE16:告诉汇编器后面的指令序列为16位的Thumb指令 语法:CODE16
CODE32:告诉汇编器后面的指令序列为32位的ARM指令 语法:CODE32
EQU:为数字常量和程序中的标号定义一个字符名称,*是EQU的同义词。 语法:name EQU expr{, type}
AREA:用于定义一个代码段或者数据段。一个大的程序可以包含多个代码段和数据段。一个汇编程序至少包含一个段。 语法:AREA sectionname{,attr1}{,attr2}...
ENTRY:指定程序的入口点。一个程序中至少要有一个ENTRY,一个源文件中最多只能有一个ENTRY 语法:ENTRY
END:告诉汇编器已经到了源程序的结尾。每个汇编程序都包含END,以告知本源程序的结束。
ALIGN:通过添加补丁字节,使得当前位置满足一定的对齐方式。 语法:ALIGN {expr,{, offset}}
EXPORT:声明一个符号可以被其他文件引用,相当于声明了一个全局变量。 语法:EXPORT symbol{[WEAK]}
IMPORT:告诉汇编器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可以引用该符号。不论本源文件是否引用,该符号都将被加入到本源文件的符号表中。 语法:IMPORT symbol{[WEAK]}
EXTERN:告诉汇编器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可以引用该符号。如果本源文件实际上没有引用该符号,它将不会被加入到本源文件的符号表中。 语法:EXTERN symbol{[WEAK]}
GET及INCLUDE;将一个源文件包含到当前源文件中,并将被包含的文件在当前位置进行汇编处理。 语法:GET filename
<5>信息报告伪操作
ASSERT:用于保证源程序被汇编时满足相关条件,如果条件不满足,ASSERT伪操作报告错误类型并终止汇编。 语法:ASSERT logical-expression
<6>杂项伪操作
ARM汇编语言伪指令:这些伪指令不是真正的ARM或Thumb指令,这些伪指令在汇编时被替换成对应的ARM或Thumb指令。
ADR伪指令:小范围的地址读取指令,该指令将基于PC的地址或者基于寄存器的地址读取到寄存器中。该指令在汇编时被替换成一条指令。
语法:ADR{cond} register, expr
ADRL伪指令:中等范围的地址读取指令,该指令将基于PC的地址或者基于寄存器的地址读取到寄存器中。该指令在汇编时被替换成两条指令。
语法:ADRL{cond} register, expr
LDR伪指令:大范围的地址读取指令,该指令将一个32位常数或地址值读取到寄存器中。
语法:LDR{cond} register, =expr
NOP:空操作指令
ARM汇编语言语句格式:如下:
{symbol} {instruction|directive|pseudo-instruction} {;commnet}
symbol:符号
instrution:指令,在ARM汇编语言中,指令不能从一行的行头开始,在一行语句中,指令的前面必须有空格或者符号
directive:伪操作
pseudo-instruction:伪指令
comment:语句注释。在ARM汇编语言中,注释以;开头。
ARM汇编语言程序格式:ARM汇编语言以段(section)为单位组织源文件,段又分为代码段、数据段。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。
上一篇:ARM异常返回修正值
下一篇:ARM体系结构与编程-3