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用于声明一个数据缓冲池的开始,它可以分配很大的空间
相关推荐
GNU ARM汇编伪指令包括ARM常规指令
GNU ARM 汇编程序设计快速入门 提供了GNU ARM汇编程序设计所使用的伪指令,可以同ADS汇编程序设计对比使用
GNU-ARM汇编入门,根据GNU汇编指南所写的摘要
GNU汇编语法基础,根据GNU汇编指南所写的摘要。
GNU环境ARM汇编详细说明,包含平常用到的汇编知识。
GNU_ARM汇编入门
GNU官方的ARM汇编指令手册,是GNU对ARM指令的扩展,如果你对linux内核或是uboot的汇编代码的一些语法不是很理解,有必要看一下。
arm汇编手册中文版
ARM 汇编指令和表达式快速参考 A summary of useful commands and expressions for the ARM architecture using the GNU assembler
详细介绍了ARM标准汇编以及GNU下的汇编,对于编程人员来说这是非常不错的入门资料,特别适合于Linux开发人员
ARM GNU 汇编伪指令简介,编译器和开发工具,用GNU工具开发基于ARM的嵌入式系统.docx
GNU标准的ARM汇编,给做ARMLinux开发的兄弟们
ARMGNU汇编伪指令简介,编译器和开发工具,用GNU工具开发基于ARM的嵌入式系统[借鉴].pdf
Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行
自己整理的关于gnu arm入门资料,包括下面的文件: An Introduction to the GNU Assembler.pdf ARM GNU Assembly Programming Basic.doc ...GNU ARM汇编快速入门 .doc Using as.pdf 从ARMASM汇编到GNU ARM ASM汇编.doc
GNU ARM 汇编简明参考手册-个人翻译
//为代码行中间的注释符号,comment 为具体的注释语句,其它注释符号参见第 6 节“特殊字符”下面定义一个"add"函数的例子:.section .tex
前段时间看arm的汇编,发现很多有一个小点,但是借来的书上的语法却没有,问同学也不知道,于是在网上查了一番才发现我书上看到的是arm的标准汇编,而有小点的gnu的汇编,于是将收集到的资料整理后放到这里来。
本资源为GNU汇编器for ARM,详细介绍了进行ARM开发时的详细用法