学习gcc汇编编程,主要是学习gcc中定义的各种伪操作,下面是常见伪操作的说明:
一、 段定义伪操作:
1. 标示段的开始
伪操作:.text,.data,.bss
说明:这三个伪操作分别表示代码段,数据段,未初始化数据段的开始。
2. 定义段指定段的属性。
伪操作:.section
格式为:.section name attr
例如:.section .data,"a"
3. 设置对齐方式
伪操作.align或.balign (.balignl,balignw)
语法格式:
.align [align] [, data]
.balign [align][, data]
说明:align 是一个数值,表示对齐方式,如2,4,8,16等。
data用来指定进行填充的数据。
4. 设置代码位置
伪操作:.org
语法格式:.org length [,data]
说明:.org用来从当前位置开始保留一段空间,并填充设定的值。
length是字节数,表示保留的空间长度。
data用来指定进行填充的数据。
二、 指令集定义伪操作
1. arm指令集伪操作
伪操作:.arm和.thumb
说明:.arm表示随后的代码是32位arm指令集,.thumb表示随后的代码是16位thumb指令集。
2. x86指令集伪操作
伪操作:.code 16和.code 32
说明:. code 16表示随后的代码是16位x86指令集,.code 3表示随后的代码是32位x86指令集。它们用于x86平台上。
三、 符号定义
1. 符号定义
伪操作:.equ 或 .set
语法格式:
.equ symbol, value
.set symbol, value
说明:symbol 是定义的符号名称,可以是已经定义过的符号。
value表示数值或标号。
2. 符号定义
伪操作:.equiv
语法格式:.equiv symbol, expr
其中:symbol 是定义的符号名称,但不能是已经定义过的符号,这是它和.equ的区别。
value表示数值或标号。
3. 声明全局符号
伪操作:.global或.globl
语法格式:.global symbol
说明:symbol 为要声明的全局符号名称。这样的符号能够在外部模块中引用。
4. 引入外部符号
伪操作:.extern
语法格式:.extern symbol
说明:symbol 为外部模块中定义的符号。
四、 数据定义
1. 声明非0结尾的字符串
伪操作:.ascii
语法格式: .ascii str
2. 声明0结尾的字符串
伪操作:.asciz或.string
语法格式:
.asciz str
.string str
例如:hello_str : .string "hello"
3. 字节定义
伪操作:.byte
语法格式:.byte value[, value]…
说明:vaule 为数值或标号。
4. 半字定义
伪操作:.hword或.short
语法格式:
. hword value[, value]…
. short value[, value]…
说明:vaule 为数值或标号。
5. 字定义
伪操作:.word或.int或.long
语法格式:
. word value[, value]…
. int value[, value]…
. long value[, value]…
说明:vaule 为数值或标号。
6. 双字定义
伪操作:. quad
语法格式:.quad value[, value]…
说明:vaule 为数值或标号。
7. 四字定义
伪操作:.octa
语法格式:.octa value[, value]…
说明:vaule 为数值或标号。
8. 单精度浮点数定义
伪操作:.float或.single
语法格式:
.float value[, value]…
.single value[, value]…
说明:vaule 为数值或标号。
9. 双精度浮点数定义
伪操作:.double
语法格式:.double value[, value]…
说明:vaule 为数值或标号。
五、 大块数据定义
1. 定义大块数据并反复填充
伪操作:.fill
语法格式:.fill repeat [, size][, data]
说明:repeat为填充的次数;size为每次填充的字节数;data为填充的数据。
2. 定义大块数据并用0填充
伪操作:.zero
语法格式:.zero length
说明:length 为数据区长度。
3. 定义大块数据并用指定值填充
伪操作:.space或.skip
语法格式:
.space length[, data]
.skip length [, data ]
说明:length 为数据区长度,data为填充的数据。
4. 声明数据缓冲池
伪操作:.ltorg
语法格式:.ltorg
说明:.ltorg主要用于arm中,它将汇编代码中使用-+
此次V 的常量收集起来,形成常量池。
六、 预定义控制伪操作
1. 条件编译
伪操作:.if,.else,.endif或.ifdef,ifnotdef,ifndef
语法格式:
.if expression
......
.else
......
.endif
说明:gcc中也常用#ifdef系列来代替
2. 宏定义
伪操作:.macro,.endm
语法格式:
.macro macroname [param [,param}…]
......
.endm
说明:定义的宏可以在代码段中调用。
3. 包含文件
伪操作:.include
语法格式:.include "file "
说明:将另一个汇编文件包含到当前文件中。
阅读(1770) | 评论(0) | 转发(0) |