ARM GNU风格伪指令
一些特殊符号:
@ 用来做注释
: 以.结尾的是标号
. 在GNU汇编中表示当前指令的地址
# #后面的表示这是个立即数
常用GNU伪指令:
.global _start @ 给_start外部链接属性
.section .text @ 指定当前段为代码段
.ascii .byte .short .long .word
.quad .float .string @ 定义数据
.align 4 @ 以2^4字节对齐
.balignl 16 0xabcdefgh @ 16字节对齐填充
.equ @ 类似于C中宏定义
偶尔会用到的GNU伪指令:
.end @ 标识文件结束
.include @ 头文件包含
.arm / .code32 @ 声明以下为arm指令
.thumb / .code16 @ 声明以下为thubm指令
重要的伪指令:
ldr @ 大范围的地址加载指令
adr @ 小范围的地址加载指令
adrl @ 中等范围的地址加载指令
nop @ 空操作
ldr指令: ldr r0, #0xff
ldr伪指令:ldr r0, =0xfff @ 涉及到合法/非法立即数,涉及到ARM文字池
adr和ldr的差别:ldr加载的地址在链接时确定,而adr加载的地址在运行时确定;所以我们可以通过adr和ldr加载的地址比较来判断当前程序是否在链接时指定的地址运行。