全部博文(36)
分类: 嵌入式
2012-08-15 16:36:16
9符合定义伪指令
符号定义伪指令用于定义ARM汇编程序中的变量,对变量赋值以及定义寄存器的别名等操作。
GBLA,GBLL,GBLS
GBLA伪指令用于定义一个全局的数字变量,并初始化为0;
GBLL伪指令用于定义一个全局的逻辑变量,并初始化为F;
GBLS伪指令用于定义一个全局的字符串变量,并初始化为空;
GBLA Test1;定义一个全局的数字变量,变量名为Test1
Test1 SETA 0xaa;将该变量赋值为0xaa
GBLL Test2;定义一个全局的逻辑变量,变量名为Test2
Test2 SETL {TRUE};将该变量赋值为真
GBLS Test3;定义一个全局的字符串变量,变量名为Test3
Test3 SETS “Testing”;将该变量赋值为“Testing”
LCLA,LCLL,LCLS
LCLA伪指令用于定义一个局部的数字变量,并初始化为0;
LCLL伪指令用于定义一个局部的逻辑变量,并初始化为F;
LCLS伪指令用于定义一个局部的字符串变量,并初始化为空
SETA,SETL,SETS
SETA 伪指令用于给一个数学变量赋值
SETL伪指令用于给一个逻辑变量赋值
SETS伪指令用于给一个字符串变量赋值
RLIST
此伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器访问次序为根据寄存器中编号由低到高,而与列表中的寄存器排列次序无关。
RegLIST RLIST {R0-R5,R8,R10};将寄存器列表名称定义为RegLIST,可在ARM指令LDM/.STM中通过该名称访问寄存器列表。
10数据定义伪指令
数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化
常见的数据定义伪指令有如下几种
--DCB
用于分配一片连续的字节存储单元并用指定的数据初始化
--DCW
用于分配一片连续的半字存储单元并用指定的数据初始化
--DCD
用于分配一片连续的字存储单元并用指定的数据初始化
--DCFD
用于为双精度的浮点数分配一片连续的字存储单元并用指定的数据初始化
--DCFS
用于为单精度的浮点数分配一片连续的字存储单元并用指定的数据初始化
--DCQ
用于分配一片以8字节为单位的连续的存储单元并用指定的数据初始化
--SPACE
用于分配一片连续的存储单元
--MAP
用于定义一个结构化的内存表首地址
--FIELD
用于定义一个结构化的内存表的数据域
11汇编控制
IF,ELSE,ENDIF
语法格式:(与c相似)
IF 逻辑表达式
指令序列1
ELSE
指令序列2
ENDIF
WHILE,WEND
语法格式
WHILE 逻辑表达式
指令序列
WEND
MACRO,MEND
此伪指令可以将一段代码定义为一个整体,称为宏指令,然后就可以在程序中通过宏指令多次调用该段代码。
MEXIT
MEXIT用于从宏定义中跳转出来
其他常用的伪指令
AREA
AREA 段名 属性1,属性2,。。。。
AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用“|”括起来
属性:---CODE ---DATA ---READONLY ---READWRITE --ALIGN ---COMMON
代码段 数据段 只读 读写 对齐方式 通用的段
ALIGN
ALIGN {表达式{,偏移量}}
ALIGN 伪指令可通过添加填充字节的方式,使当前位置满足一定得对齐方式。其中,表达式的值用于指定对齐方式,可能的取值为2 的幂,若使用该字段,则当前位置的对齐方式为:2的表达式次幂+偏移量
CODE16
伪指令通知编译器,其后的指令序列为16位的Thumb指令
CODE32
伪指令通知编译器,其后的指令序列为32位的ARM指令
ENTRY
此伪指令用于指定汇编语言的入口点。在一个完整的汇编程序中至少有一个ENTRY,但在一个源文件里最多只能有一个ENTRY.
END
END伪指令用于通知编译器已经到了源程序的结尾
EQU
此伪指令用于为程序中的常量、标号等定义一个等效的字符名称,类似于c语言中的#define
EXPORT
伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。
IMPORT
此伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中,标号在程序中区分大小写。
EXTERN
此伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用,
如果当前源文件并未引用该标号的话,则它不会被加入到当前源文件的符号表中。
GET
GET 伪指令用于将一个源文件包含到当前的源文件中,并将被包含的源文件在当前位置进行汇编处理
INCBIN
用于将一个目标文件或数据文件包含到当前的源文件中,被包含的文件不做任何变动的存放在当前文件总,编译器从其后开始继续处理
RN
用于给一个寄存器定义一个别名。
ROUT
用于给一个局部变量定义作用范围。
终于把ARM ASM学习完了,内容比较多,记住的话 ,大部分靠英语简称,然后就是多用和多记了,俺将会继续更新GNU ARM ASM,这个是在linux开发里面用的非常多的,而ARM ASM主要就是在windows里面开发用的多的。加油学习!!