先来看看启动代码中的伪操作和伪指令
EQU
用于定义常量,相当于C中的宏定义
如Stack_Size EQU 0x00000400 ——— #define Stack_Size 0x00000400
ALIGN
字节对齐方式
ALIGN = 3
EXPORT
相当于声明了一个全局变量
EXPORT __Vectors //中断向量的起始地址
EXPORT __Vectors_End //中断向量的结束地址
EXPORT __Vectors_Size //中断向量的空间大小
IMPORT
相当C语言的extern
IMPORT __main ————— extern __main
DCD
{label} DCD expr
分配一段连续的内存单元,并且用expr初始化
__Vectors DCD __initial_sp ;Top of Statck———–__Vectors = __initial_sp
DCD Reset_Handler ;Reset Handler
SPACE
{label} SPACE expr
SPACE用于分配一块大小为expr的连续内存,并且初始化为0
AREA sectionname{,attr} {,attr}….
AREA常用来定义一个段,段名为sectionname,attr位段的属性
CODE 代码段属性,默认属性位READONLY
DATA 数据段,默认属性为READWRITE
READONLY
READWRITE
ALIGN
NOINT 表示数据段初始化为0
栈定义
Stack_Size EQU 0x00000400
AREA STACK,NOINT,READWRITE,ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
段名:STACK
段大小:Stack_Size=0x00000400
段属性:READWRITE
段的对齐方式:ALIGN=3
上面的意思是从Stack_Mem初始化Stack_Size大小的内存,定义栈底为__initial_sp
堆的定义
Heap_Size EQU 0x00000200
AREA HEAP,NOINT,READWRITE,ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
段名:HEAP
段大小:Heap_Size =0x00000200
段属性:READWRITE
段的对齐方式:ALIGN=3