第4章 GNU汇编伪指令集.pptx

第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)

1亿VIP精品文档

相关文档