arm伪指令
符号定义伪指令
定义arm汇编程序中的变量、对变量赋值以及定义寄存器的别名
定义全局变量
gbla(全局数字变量,初始化值为0)
GBLA 全局变量名
示例代码如下:
GBLA Test1;定义全局数字变量test1
Test1 SETA 0x123;将该变量赋值为0x123
gbll(全局逻辑变量,初始化为F)
GBLL 全局变量名
示例代码如下:
GBLL Test2;定义全局逻辑变量test2
Test2 SETL {TRUE};将变量赋值为真
bgls(全局字符串变量,初始化为空)
GBLS 全局变量名
示例代码如下:
GBLS Test3;定义全局字符串变量test3
Test3 SETS "Testing";将变量赋值为testing
定义局部变量
lcla
lcll
lcls
对变量赋值
seta
setl
sets
为通用寄存器列表定义名称 rlist
在LDM/STM指令中,列表中的寄存器访问次序根据寄存器的编号由低到高
与列表中的寄存器的排列次序无关
语法格式:
名称 RLIST {寄存器列表}
示例代码如下:
RegList RLIST (R0-R5,R8,R10);定义RegList寄存器列表
数据定义伪指令
DCB 分配一片连续的字节存储单元,并且用指令中指定的表达式初始化
语法格式:
标号 DCB 表达式
示例代码如下:
str DCB "this is a test!";分配一片连续的字节存储单元并初始化
SPACE 分配一片连续的存储区域并初始化为0,表达式的值为要分配的字节数
语法格式:
标号 SPACE 表达式
示例代码如下:
DataSpace SPACE 100;分配连续100字节的存储单元并初始化为0
MAP 定义一个结构化内存表的首地址
语法格式:
MAP 表达式{,基址寄存器}
示例代码如下:
MAP 0X100,R0;定义结构化内存表首地址为0x100+R0
FILED 定义一个结构化内存表中的数据域
语法格式:
标号 FILED 表达式
示例代码如下:
MAP 0X0100;定义结构化内存表首地址的值为0x100
A FILED 16;定义A的长度为16字节,位置为0x100
B FILED 32;定义B的长度为32字节,位置为0x110
C FILED 256;定义C的长度为256字节,位置为0x130
汇编控制伪指令
IF ELSE ENDIF
语法格式:
IF 逻辑表达式
指令序列1
ELSE
指令序列2
ENDIF
示列代码如下:
GBLL Test;
IF Test=TRUE
指令序列1
ELSE
指令序列2
ENDIF
WHILE WEND
语法格式:
WHILE 逻辑表达式
指令序列
WEND
示例代码如下:
GBLA Counter;声明一个全局数学变量
Counter SETA 3;赋值
WHILE Counter<10
指令序列
WEND
MACRO MEND
MEXIT
宏指令
其它伪指令
AREA 定义一个代码段或数据段
语法格式:
AREA 段名 属性1,属性2
常用属性:
CODE:定义代码段,默认为readonly
DATE:定义数据段,默认为readwirte
READONLY:只读
READWRITE:可读可写
ALIGN:对齐方式 语法格式:ALIGN {表达式{,偏移量}}
示例代码如下:
AREA Init,CODE,READONLY;定义一个名为init的代码段,属性为只读
AREA Init,CODE,READONLY,ALIEN=3;指定后面的指令为8字节对齐
CODE16(CODE32)通知编译器,其后的指令序列为16位的thumb指令
ENTRY 指定汇编程序的入口点
示例代码如下:
AREA Init,CODE,READONLY
ENTRY;指定应用程序的入口点
EQU 为程序中的常量,标号等定义一个等效的字符名称(类似于define)
语法格式:
名称 EQU 表达式{,类型}
示例代码如下:
Test EQU 50;定义标号Test的值为 50
Addr EQU 0x55,CODE32;定义Addr 的值为0x55,且该处为32位的arm指令
EXPORT 在程序中声明一个全局的标号,该标号可在其他的文件中引用
语法格式:
EXPORT 标号
示例代码:
AREA Init,CODE,READONLY
EXPORT Stest;声明一个可全局引用的标号Stest
符号定义伪指令
定义arm汇编程序中的变量、对变量赋值以及定义寄存器的别名
定义全局变量
gbla(全局数字变量,初始化值为0)
GBLA 全局变量名
示例代码如下:
GBLA Test1;定义全局数字变量test1
Test1 SETA 0x123;将该变量赋值为0x123
gbll(全局逻辑变量,初始化为F)
GBLL 全局变量名
示例代码如下:
GBLL Test2;定义全局逻辑变量test2
Test2 SETL {TRUE};将变量赋值为真
bgls(全局字符串变量,初始化为空)
GBLS 全局变量名
示例代码如下:
GBLS Test3;定义全局字符串变量test3
Test3 SETS "Testing";将变量赋值为testing
定义局部变量
lcla
lcll
lcls
对变量赋值
seta
setl
sets
为通用寄存器列表定义名称 rlist
在LDM/STM指令中,列表中的寄存器访问次序根据寄存器的编号由低到高
与列表中的寄存器的排列次序无关
语法格式:
名称 RLIST {寄存器列表}
示例代码如下:
RegList RLIST (R0-R5,R8,R10);定义RegList寄存器列表
数据定义伪指令
DCB 分配一片连续的字节存储单元,并且用指令中指定的表达式初始化
语法格式:
标号 DCB 表达式
示例代码如下:
str DCB "this is a test!";分配一片连续的字节存储单元并初始化
SPACE 分配一片连续的存储区域并初始化为0,表达式的值为要分配的字节数
语法格式:
标号 SPACE 表达式
示例代码如下:
DataSpace SPACE 100;分配连续100字节的存储单元并初始化为0
MAP 定义一个结构化内存表的首地址
语法格式:
MAP 表达式{,基址寄存器}
示例代码如下:
MAP 0X100,R0;定义结构化内存表首地址为0x100+R0
FILED 定义一个结构化内存表中的数据域
语法格式:
标号 FILED 表达式
示例代码如下:
MAP 0X0100;定义结构化内存表首地址的值为0x100
A FILED 16;定义A的长度为16字节,位置为0x100
B FILED 32;定义B的长度为32字节,位置为0x110
C FILED 256;定义C的长度为256字节,位置为0x130
汇编控制伪指令
IF ELSE ENDIF
语法格式:
IF 逻辑表达式
指令序列1
ELSE
指令序列2
ENDIF
示列代码如下:
GBLL Test;
IF Test=TRUE
指令序列1
ELSE
指令序列2
ENDIF
WHILE WEND
语法格式:
WHILE 逻辑表达式
指令序列
WEND
示例代码如下:
GBLA Counter;声明一个全局数学变量
Counter SETA 3;赋值
WHILE Counter<10
指令序列
WEND
MACRO MEND
MEXIT
宏指令
其它伪指令
AREA 定义一个代码段或数据段
语法格式:
AREA 段名 属性1,属性2
常用属性:
CODE:定义代码段,默认为readonly
DATE:定义数据段,默认为readwirte
READONLY:只读
READWRITE:可读可写
ALIGN:对齐方式 语法格式:ALIGN {表达式{,偏移量}}
示例代码如下:
AREA Init,CODE,READONLY;定义一个名为init的代码段,属性为只读
AREA Init,CODE,READONLY,ALIEN=3;指定后面的指令为8字节对齐
CODE16(CODE32)通知编译器,其后的指令序列为16位的thumb指令
ENTRY 指定汇编程序的入口点
示例代码如下:
AREA Init,CODE,READONLY
ENTRY;指定应用程序的入口点
EQU 为程序中的常量,标号等定义一个等效的字符名称(类似于define)
语法格式:
名称 EQU 表达式{,类型}
示例代码如下:
Test EQU 50;定义标号Test的值为 50
Addr EQU 0x55,CODE32;定义Addr 的值为0x55,且该处为32位的arm指令
EXPORT 在程序中声明一个全局的标号,该标号可在其他的文件中引用
语法格式:
EXPORT 标号
示例代码:
AREA Init,CODE,READONLY
EXPORT Stest;声明一个可全局引用的标号Stest