伪指令的意义
- 伪指令不是指令,伪指令和指令的根本区别是经过编译后不会生成机器码
- 伪指令的意义在于知道编译过程
- 伪指令是和具体的编译器相关的,我们使用gun工具链,因此学习gun环境下的汇编伪指令
gun汇编中的一些符号
- @ 回来做注释,可以在行首也可以在代码后面一行直接跟,和C语言中/类似
-
做注释,一般放在行首,表示一行都是注释而不是代码
- :以冒号结尾的是标号
- .点号在gun汇编中表示当前指令的地址
-
立即数前面要加#或$,表示这是个立即数
常用gun伪指令
- .global_start @ 给_start外部连接属性
- .section .text @指定当前段为代码段
- .ascii .byte .short .long . word
- .quad .float .string @定义数据
- .align 4 @以16字节对齐
- .balignl 16 0xabcdefgh @ 16字节对齐填充
最重要的几个伪指令
- ldr 大范围的地址加载指令
- adr 小范围的地址加载指令
- adrl 中断访问的地址加载指令
- nop 空操作
- ARM z中有一个ldr指令,还有一个ldr伪指令
- 一般都使用ldr伪指令而不用领ldr指令
adr与ldr
- adr 编译时会被1条sub或add指令替代,而ldr编译时会被一条mov指令替代或者文字池方式处理
- adr总是以pc为基准来表示地址,因此令本身和运行地址有关吗,可以用来检测程序当前的运行地址在哪里
- ldr加载的地址和链接时给定的地址有关,由链接脚本决定
网友评论