Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164831
  • 博文数量: 36
  • 博客积分: 830
  • 博客等级: 准尉
  • 技术积分: 409
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-10 16:23
文章分类
文章存档

2013年(1)

2012年(35)

分类: 嵌入式

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-R5R8R10};将寄存器列表名称定义为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里面开发用的多的。加油学习!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

阅读(1082) | 评论(0) | 转发(0) |
0

上一篇:ARM汇编[1]

下一篇:c与汇编混合编程

给主人留下些什么吧!~~