启动文件
启动文件往往为startup_设备型号.s,为汇编程序
Stack_Size EQU 0x0000400
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
其中Stack_Size EQU 0x0000400类似于#define不占用程序数据空间,这里定义了Stack_size这个符号为0x0000400,AREA功能为声明一个新段的相关属性,也不占用数据空间。SPACE分配内存空间,属于对内存进行布置,并非ARM执行指令。
| 指令名称 | 作用 |
|---|---|
| EQU | 给数字常量取一个符号名,相当于C语言中的 define |
| AREA | 汇编一个新的代码段或者数据段 |
| SPACE | 分配内存空间 |
| RESERVE8 | 当前文件堆栈需按照8字节对齐 |
| EXPORT | 声明一个标号具有全局属性,可被外部的文件使用 |
| DCD | 以字为单位分配内存,要求4字节对齐,并要求初始化这些内存 |
| PROC | 定义子程序,与ENDP成对使用,表示子程序结束 |
| WEAK | 弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的标号,如果外部文件没有定义也不出错。要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便 |
| IMPORT | 声明标号来自外部文件,跟C语言中的 EXTERN关键字类似 |
| B | 跳转到一个标号 |
| ALIGN | 编译器对指令或者数据的存放地址进行对齐,一般需要跟一个立即数,缺省表示4字节对齐。要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便。 |
| END | 到达文件的末尾,文件结束 |
| IF ELSE ENDIF | 汇编条件分支语句,跟C语言的 if else类似 |