ARM学习笔记12——GNU ARM汇编伪操作

1、.section

  1.1、语法格式

    

.section section_name[,"flags"[,%type[,flag_specific_arguments]]] 

  1.2、作用

    定义一个段,每一个段以段名为开始,以下一个段名或者文件结尾为结束。

    ELF格式允许的段标志: a:可分配

               w:可写段

                 x:执行段

  1.3、举例

    

.section .mysection   @自定义数据段,段名为“.mysection”

2、预定义段 .text、.data、.bss

  2.1、语法格式

    

.text{subsection} 

.data{subsection}    @初始化数据段 

.bss{subsection} 

  2.2、作用

    .text、.data和.bss将汇编系统预定义的段名编译到相应的代码段、数据段和bss段。

    注意:源程序中.bss段应该在.text之前。

  2.3、说明

    bss段通常是指用来存放程序中未初始化的全局变量的一块内存区域 数据段通常是指用来存放程序中已初始化的全局变量的一块内存区域

  2.4、举例

    .section .data 

    <initialize data here> 

    .section .bss 

    <uninitialized data here> 

    .section .text .global _start 

    _start: <instruction code goes here>

3、.code16、code32、.thumb、.arm

  3.1、语法格式

    

.code16、code32 

.thumb 

.arm 

  3.2、作用

    用来选择ARM或者Thumb指令集,.thumb伪操作等同于.code16,表明使用Thumb指令类似的.arm等同于.code32

4、.end

  4.1、语法格式

    .end

  4.2、作用

    表明源文件的结束,如果该标号之后还有代码,不会被编译到执行文件中

5、.include

  5.1、语法格式

    

.include "filename" 

  5.2、作用

    可以将指定的文件在使用位置处展开,一般是头文件

6、.incbin

  6.1、语法格式

    

.incbin "file"[,skip[,count]] 

  6.2、作用

    可以将原封不动的一个二进制文件编译到当前文件中。其中,skip表明是从文件开始跳过skip个字节开始读取文件,count是读取的字数

7、.if、.else/.endif

  7.1、语法格式

    

.if 条件表达式  

    代码段1 

.else

    代码段2 

.endif

8、.ifdef,.else和endif

  8.1、语法格式

   

.ifdef 条件表达式  

      代码段1 

.else  

      代码段2 

.endif

9、.macro、.exitm和.endm

  9.1、语法格式

    

.macro 宏名 参数名列表       @伪操作.macro定义一个宏  
      宏体 
.endm                @.endm表示宏结束 

  9.2、说明

    如果宏使用参数,那么在宏体中使用该参数时添加前缀“\”。宏定义时的参数还可以使用默认值,可以使用.exitm伪指令来退出宏

  9.3、举例

    

.macro SHIFTLEFT a,b 

.if \b<0 

MOV \a,\a,ASR #-\b 

.exitm 

.endif 

MOV \a,\a,LSL #\b 

.endm

10、.byte

  10.1、语法格式

    

.byte 表达式{,表达式}... 

  10.2、作用

    定义单字节

  10.3、举例

    

.byte 1,2,'s',0x34

11、.short、.hword

  11。1、语法格式

 

.short/.hword 表达式{,表达式}... 

  11.2、作用

    定义双字节数据

  11.3、举例

    .short 0x1234

12、.long、.word、.int

  12.1、语法格式

    

.long/.word/.int 表达式{,表达式}... 

  12.2、作用

    .long、.word和.int定义4字节数据

13、.quad

  13.1、语法格式

quad 表达式{,表达式}... 

  13.2、作用

    .quad定义8字节数据

14、.string/.asciz/.ascii

  14.1、语法格式

    

.string/.asciz/.ascii 表达式{,表达式}... 

  14.2、作用

    .string/.asciz/.ascii定义多个字符串。

    注意:ascii伪操作定义的字符串需要自动添加结尾字符'\0'

  14.3、举例

   

 .string "abcd","hello"

15、.zero、.space、.skip

  15.1、语法格式

   

.zero <number_of_bytes> 
.space/.skip <number_of_bytes> {,<fill_byte>}

  15.2、作用

    分配number_of_bytes字节的数据空间,.zero伪操作用0填充内存,.space/.skip用值为fill_byte填充内存,若未指定该值,缺省填充0

16、.rept、.endr

  16.1、语法格式

    

.rept 重复次数  
  数据定义 
.endr       @结束重复定义 

  16.2、作用

    .rept及.endr用于重复定义伪操作

  16.3、举例

    

.rept 3 
.byte 0x23
.endr

17、.equ、.set

  17.1、语法格式

    

.equ(.set)常量名,表达式 

  17.2、作用

    .equ和.set用于为程序中标号定义名称

  17.3、举例

    

.equ abc 3     @让abc=3

18、.global/.globl

  18.1、语法格式

    

.global/.globl symbol 

  18.2、作用

    .global和.globl用来定义一个全局的符号

19、.extern

  19.1、语法格式

    

.extern label 

  19.2、作用

    .extern用于声明一个外部标号

20、.ltorg、.pool

  20.1、语法格式

    

.ltorg/.pool 

  20.2、作用

    .ltorg和.pool用于声明一个数据缓冲池的开始,它可以分配很大的空间

posted @ 2014-01-26 15:36  LOSER Z  阅读(3337)  评论(0编辑  收藏  举报