ARM汇编程序由指令(ARM指令和伪指令)、伪操作和宏指令组成。
ARM伪操作:
GET,通常用于包含定义常量的源文件,如用EQU定义的外设地址,类似于C语言中用include好含头文件。(汇编语言中被包含的文件常以.inc结尾)GET 2440addr.inc
AREA、ENTRY和END
AREA操作常用于定义一个段。通常一个ARM源程序至少需要一个代码段。
ENTRY用于指定程序的入口点。
END用于告诉汇编编译器源文件已经结束。
EXPORT和IMPORT
EXPORT 伪操作用于声明外部标号,即当前标号是本源文件中定义的,在其他文件中可能会被引用。
IMPORT 伪操作用于告诉编译器当前的符号不是本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。
EQU 用于定义常量。提醒,在每条ARM指令前必须有空格,但是用EQU定义常量时,必须顶格写,否则编译器会报错。
LTORG 用于声明一个文字池,所谓文字池就是一个数据缓冲区。
ALIGN 伪操作通过调整地址指针使当前位置满足一定的对齐方式。在ARM代码中要求地址符号是字对齐的。
MACRO和MEND 伪操作用于宏定义。
MACRO表示宏定义的开始,MEND表示宏定义的结束。用MACRO和MEND定义的一段代码,称为宏体。这样,在程序中就可以通过宏指令多次调用该代码段。
MACRO
{$label}MACRO Name {$parameter}{$parameter}……
;这里添加自己的代码
MEND
MAP和FIELD
MAP用于定义内存表的首地址,其中MAP也可以用^表示。FIELD用于定义一个内存表中的数据域,其中FIELD可以用#表示。MAP和FIELD组合类似于C语言中定义一个数组,MAP指向数组的首地址,FIELD用于分配数组中的各个元素。
#define pISR_SWI (*(unsigned*)(_ISR_STARTADDRESS+0x8))
强制转换后,可以对pISR_SWI进行赋值,调用。
_ISR_STARTADDRESS EQU 0x33FFFF00
^ _ISR_STARTADDRESS
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
ARM伪指令:ADRL;LDR;DCD SPACE