一、介绍
伪指令是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有对应机器码,只用于汇编过程中为汇编程序提供汇编信息,帮助编译器编译。当汇编结束时,伪指令的使命也就结束了。伪操作可以实现如下功能:
- 符号定义;
- 数据定义和对齐;
- 汇编控制;
- 汇编宏;
- 段描述;
二、ARM常用的伪指令
数据定义伪指令
- .align :用来对齐或者填充数据等。
- .byte:把 8 位数当成数据插入汇编代码中。
- .hword 和.short:把 16 位数当成数据插入汇编代码中。
- .long 和.int:这两个伪指令的作用相同,都把 32 位数当成数据插入汇编代码中。
- .word:把 32 位数当成数据插入汇编代码中。
- .quad:把 64 位数当成数据插入汇编代码中。
- .float:把浮点数当成数据插入汇编代码中。
- .ascii 和.string:把 string 当作数据插入汇编代码中,对于 ascii 伪操作定义的字符串,需要自行添加结尾字符'\0'。
- .asciz:类似于 ascii,在 string 后面自动插入一个结尾字符'\0'。
- .rept 和.endr:重复执行伪操作。
- .equ:给符号赋值。
与函数相关的伪指令
.global:定义一个全局的符号,可以是函数的符号,也可以是全局变量的符号。
.include:引用头文件。
.if, .else, .endif:控制语句。
.ifdef symbol:判断 symbol 是否定义。
.ifndef symbol:判断 symbol 是否没有定义。
.ifc string1,string2:判断字符串 string1 和 string2 是否相等。
.ifeq expression:判断 expression 的值是否为 0。
.ifeqs string1,string2:等同于.ifc。
.ifge expression:判断 expression 的值是否大于或等于 0。
.ifle expression:判断 expression 的值是否小于或等于 0。
.ifne expression:判断 expression 的值是否不为 0。
与段相关的伪指令
.section name, "flags
与宏相关的伪指令
.macro macname macargs ...
参考: