1. 符号定义伪操作
| 操作符 | 语法格式(例) | 功能 |
声明变量 | GBLA | GBLA var_a | 声明一个全局算术变量并初始化为零 |
GBLL | GBLL var_l | 声明一个全局逻辑变量并初始化为逻辑假,即{FALSE} |
GBLS | GBLS var_s | 声明一个全局字符串变量并初始化为空字符串,即“ ” |
LCLA | LCLA var_a | 声明一个局部算术变量并初始化为零 |
LCLL | LCLL var_l | 声明一个局部逻辑变量并初始化为逻辑假,即{FALSE} |
LCLS | LCLS var_s | 声明一个局部字符串变量并初始化为空字符串,即“ ” |
变量赋值 | SETA | var_a SETA 0xFF | 为一个算术变量赋值 |
SETL | var_l SETL {TRUE} | 为一个逻辑变量赋值,{TRUE} 或者{FALSE} |
SETS | var_s SETS “Hello ARM!” | 为一个字符串变量赋值 |
定义别名 | RLIST | reg_list RLIST {R0-R3, R5} | 为一个通用寄存器列表定义名称 |
CN | name CN 6 | 为一个协处理器的寄存器(编号)定义名称 |
CP | name CP 2 | 为一个协处理器(编号)定义名称 |
DN | name DN 16 | 为一个VFP双精度寄存器(编号)定义名称 |
SN | name SN 8 | 为一个VFP单精度寄存器(编号)定义名称 |
FN | name FN 6 | 为一个浮点FPA寄存器(编号)定义名称 |
RN | name RN Rx | 为一个寄存器定义别名 |
2. 数据定义伪操作
| 操作符 | 语法格式(例) | 功能 |
声明 | LTORG | LTORG | 声明一个数据(文字)缓冲池(literal pool) |
定义 | MAP | MAP 0x10, R9 | 定义一个结构化的内存表的首地址(此例 = 0x10 + R9) |
FIELD | {label} FIELD 4 | 定义结构化的内存表中的一个数据域(此例 = 4字节) |
分配 | SPACE | {label} SPACE 5000 | 分配一块指定长度(此例 = 5000字节)的内存单元,并用0初始化 |
DCB | string DCB “string”, 0 | 分配一段连续的字节存储单元,并用伪操作中指定的表达式初始化 |
DCW | {data} DCW 4,5,6 | 分配一段连续的半字存储单元(半字对齐) |
DCWU | {data} DCWU 4,5,6 | 分配一段连续的半字存储单元 |
DCD | {data} DCD 4,5,6 | 分配一段连续的字存储单元(字对齐) |
DCDU | {data} DCDU 4,5,6 | 分配一段连续的字存储单元 |
DCDO | {data} DCDO label | 分配一段连续的字存储单元,每个单元初始化为相对SB(R9)的偏移量 |
DCFD | {data} DCD 2E11, -5E7 | 分配一段连续的双字存储单元(字对齐) |
DCFDU | {data} DCDU 4,5,6 | 分配一段连续的双字存储单元 |
DCQ | {data} DCQ -255, 2_101 | 分配一段连续的双字内存单元,并用64位整数初始化(字对齐) |
DCQU | {data} DCQU -255, 2_101 | 分配一段连续的双字内存单元,并用64位整数初始化 |
DCI | {data} DCI 0xE16F0F10 | 分配用于存放代码的内存单元 |
3. 杂项伪操作
操作符 | 语法格式(例) | 功能 |
AREA | AREA name, attr | 定义一个代码段或者数据段 |
ALIGN | ALIGN number | 该指令位置之后number个字节对齐,缺省为4字节(字)对齐 |
CODEx | CODE32/CODE16 | 告诉汇编器后面指令为ARM/Thumb指令,但并不改变处理器工作状态 |
END | END | 通知编译器已经到了源程序的结尾 |
ENTRY | ENTRY | 汇编程序的入口 |
EQU | name EQU 2 | 定义一个常量,类似C语言中的 #define,注意与符号定义伪操作中的“变量”区分 |
EXPORT | EXPORT label | 在程序中声明一个全局标号(指向某个指令地址),其他文件中可以引用 |
GLOBAL | GLOBAL label | 同 EXPORT |
EXPORTAS | EXPORTAS b, a | 在目标文件中,将源文件中导入的符号b替换为a表示,值不变 |
IMPORT | IMPORT __main | 提供未在当前汇编中定义的名称,不管该名称是否在当前汇编中引用 |
EXTERN | EXTERN … | 类似 IMPORT,但仅导入当前汇编中引用的名称 |
GET | GET test.s | 当前源文件中包含另一个源文件,并编译,类似C语言中的 #include<> |
INCLUDE | INCLUDE test.s | 同 GET |
INCBIN | INCBIN test.dat | 当前源文件中包含另一个其他类型的文件,但不编译 |
KEEP | KEEP label | 告诉编译器,将局部符号包含在目标文件的符号表中,在调试器中可见 |
NOFP | NOFP | 禁止源程序中包含浮点运算指令 |
REQUIRE | REQUIRE label | 指定段之间的相互依赖关系(require) |
REQUIRE8 | REQUIRE8 {bool} | 指示当前文件要求堆栈8字节对齐,通知到链接器,并由链接器检查 |
PREQUIRE8 | PREQUIRE8 {bool} | 指示当前文件为堆栈8字节对齐 |
ROUT | {name} ROUT | 限制局部标号的作用范围:两个ROUT之间,或ROUT开始之后的整个AREA |
4. 汇编控制伪操作
选择
IF UART0 = ON
BL URAT0_init
ELSE
BL URAT1_init
ENDIF
循环
GBLA count ; 定义一个变量count
count SETA 1
WHILE count <= 4 ; 进入循环的条件
count SETA count+1
... ; 此处代码将会重复4次
WEND