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加载的地址比较来判断当前程序是否在链接时指定的地址运行。

posted @ 2017-05-09 16:25  Chen丶琛  阅读(278)  评论(0编辑  收藏  举报