分类: LINUX
2013-08-09 20:45:43
(1)abort
.abort 停止汇编
(2)align
.align absexpr1,absexpr2
以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16或32. 第二个表达式值表示填充的值
(3)if...else...endif
.if
.else
.endif: 支持条件预编译
(4)include
.include "file": 包含指定的头文件, 可以把一个汇编常量定义放在头文件中
(5)comm
.comm symbol, length:
在bss段申请一段命名空间,该段空间的名称叫symbol, 长度为length. Ld连接器在连接
会为它留出空间
(6)text
.text subsection:切换当前节,即将下面的程序汇编到.text节的编号为subsection的子节中。如未提供subsection,其缺省值为0。
(7)data
.data subsection: 切换当前节,即将下面的数据汇编到.data节的编号为subsection的子节中。如未提供subsection,其缺省值为0。
(8)previous
.previous:将当前节换回到前一个节与子节,即将下面的指令或数据汇编到当前节之前使用的节与子节中。
(9)equ
.equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该指令并不分配空间
(10)global
.global symbol: 定义一个全局符号, 通常是为ld使用
(11)section
.section name [,"flags",@type,flag_specific_arguments]:切换当前节,即将下面的代码或数据汇编到name节中。其中flag可以是a(节是可分配的),w(节是可写的),
x(节是可执行的);type可以是@progbits(节中包含数据),@nobits(节中不含数据,只是占位空间),@note(节中包含注释信息,不是程序).
(12)subsection
.subsection num:切换当前字节,即将下面的代码或数据放在由num指定的子节中,节保持不变.
(13)ascii
.ascii "string"...: 定义一个到多个字符串并为之分配空间,字符串后不自动加0结尾。
(14)asciz
.asciz "string"...:定义一个到多个字符串并为之分配空间,字符串后自动加0结尾。
(15)string
.string "str":将字符串拷贝到目标文件中,串以0结尾。
(16)byte
.byte expressions: 定义一个字节, 并为之分配空间
(17)word
.word expressions: 定义一个字,并为之分配空间, 4 bytes
(18)short
.short expressions: 定义一个短整型, 并为之分配空间
(19)int
.int expressions: 定义一个整型,并为之分配空间
(20)long
.long expressions: 定义一个长整型, 并为之分配空间
(21)quad
.quad bignums:定义一个1~8字节的长整数。
(22)fill
.fill repeat,size,value:将value值拷贝repeat次,其中每个value中占用size字节.
(23)space 和 skip
.space size,fill和.skip size,fill:在目标文件的当前位置处留出size字节的空间,并在其中填入值fill,如未指定fill,则填入0。
(24)rept 和 endr
.rept count和.endr:将.rept和.endr之间的行重复count次。
(25)set
.set symbol,expression:将符号symbol的值设为expression。
(26)type
.type name,@type:将符号name的type属性设为type。其中type可以是function或object。
(27)size
.size name,expression:将符号name所占空间设为expression。
(28)macro/endm
.macro: 定义一段宏代码, .macro表示代码的开始, .endm表示代码的结束, .exitm
跳出宏, 示例如下:
.macro SHIFTLEFT a, b
.if \b < 0
mov \a, \a, ASR #-\b
.exitm
.endif
mov \a, \a, LSL #\b
.endm
(29)req
name .req register name: 为寄存器定义一个别名
(30)code
.code [16|32]: 指定指令代码产生的长度, 16表示Thumb指令, 32表示ARM指令
(31)ltorg
.ltorg: 表示当前往下的定义在归于当前段,并为之分配空间
(32)org
.org new-lc,fill:从new-lc标识的新位置开始存放下边的代码或数据,之前空出来的空间用fill填充.
2 ARM GNU专有符号
(1)@ 表示注释从当前位置到行尾的字符.
(2)# 注释掉一整行.
(3); 新行分隔符.
3 操作码
(1)NOP: nop 空操作, 相当于MOV r0, r0
(2)LDR: ldr
(3)ADR: adr