第4章 GNU汇编伪指令集
嵌入式系统;第4章 GNU汇编伪指令集;4.1 GNU汇编器的平台无关伪指令 ;/binutils/docs-2.12//Pseudo-Ops.html#Pseudo%20Ops;4.1.1 伪指令概念;伪指令格式;伪指令种类;4.1.2 符号定义伪指令;1.全局标号定义
作用:定义一个全局符号,通常是为连接器ld使用
格式:
.global symbol
.globl symbol
;2.局部标号定义
作用:定义对外部不可见的局部符号,作用域仅在当前文件中
格式:
.local symbol
;3.变量赋值
作用:给一个全局变量或局部变量赋值
格式:
.set symbol, expr
;4.宏替换
作用:给一个全局变量或局部变量赋值
格式:
Symbol .equ expr
;4.1.3 数据定义伪指令;1.字节分配
作用:在存储器中分配一个字节,用指定的数据对其初始化
格式:
label: .byte expr
;2.双字节分配
作用:在存储器中分配2个字节,并初始化
格式:
label: .short expr
;3.四字节分配
作用:在存储器中分配4个字节,并初始化
格式:
label: .word expr
label: .long expr
;4.八字节分配
作用:在存储器中分配8个字节,并初始化
格式:
label: .quad expr
;5.单精度浮点变量
作用:在存储器中分配4个字节,用指定的单精度浮点数初始化
格式:
label: .float expr
;6.连续存储区域
作用:分配一片连续的存储器区域并初始化
格式:
label: .space size, expr
label: .skip size, expr
;7.字符串定义
作用:定义一个字符串
格式:
label: .string str
label: .ascii str
label: .asciz str
;8.重复
作用:重复执行后面的命令
格式:
.rept count
commands
.endr
;4.1.4 汇编控制伪操作;1.选择
作用:根据条件判断,决定是否执行某个指令序列
格式:
.if logical-expression
commands
[ .else
commands]
.endif
.if logical-expression
commands
.elseif logical-expression
commands
[.elseif logical-expression
commands]
.endif
;2.宏
作用:定义宏代码段,.macro: 定义一段宏代码, .macro表示代码的开始, .endm表示代码的结束, .exitm跳出宏
格式:
.macro macroname macArgs
commands
.endm;举例;4.1.5 杂项伪操作;1.align
格式:
.align abs-expr
作用:通过填充字节的方式,使当前位置满足一定的对齐方式
;2.section
格式:
.section sectioname
作用:定义一个段
;3.data
格式:
.data subsectionname
作用:定义数据段
;4.text
格式:
.text subsectioname
作用:定义指令段
;5.include
格式:
.include “filename”
作用:包含头文件
;6.arm
格式:
.arm
作用:定义一下代码使用arm指令集编译,功能等价于.code32
;7.thumb
格式:
.thumb
作用:定义一下代码使用thumb指令集编译,功能等价于.code16
;8.extern
格式:
.extern symbol
作用:声明一个外部符号
;9.weak
格式:
.weak symbol
作用:声明一个弱符号
;10.end
格式:
.end
作用:汇编结束;4.2 GNU汇编器支持的ARM伪指令;4.2.1 ADR伪指令;使用说明:
ADR伪指令被汇编器编译成一条指令。汇编器通常使用ADD指令或SUB指令来实现伪操作的地址装载功能。如果不能用一条指令来实现ADR伪指令的功能,汇编器将报告错误。
示例:
;4.2.2 ADRL伪指令;使用说明:
ADRL伪指令与ADR伪指令相似,用于将基于PC相对偏移的地址或基于寄存器相对偏移的地址值读取到寄存器中。所不同的是,ADRL伪指令比ADR伪指令可以读取更大范围的地址。这是因为在编译阶段,ADRL伪指令被编译器换成两条指令。即使一条指令可以完成该操作,编译器也将产生两条指令,
原创力文档

文档评论(0)