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
.section .bss .section .text .global _start _start: 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伪操作定义的字符串需要自动添加结尾字符'