ARM GNU 汇编伪指令简介 1 ARM GNU 汇编伪指令简介 (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)data .data subsection: 说明接下来的定义归属于subsection数据段 (7)equ .equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该 指令并不分配空间 (8)global .global symbol: 定义一个全局符号, 通常是为ld使用 (9)ascii .ascii 'string': 定义一个字符串并为之分配空间 (10)byte .byte expressions: 定义一个字节, 并为之分配空间 (11)short .short expressions: 定义一个短整型, 并为之分配空间 (12)int .int expressions: 定义一个整型,并为之分配空间 (13)long .long expressions: 定义一个长整型, 并为之分配空间 (14)word .word expressions: 定义一个字,并为之分配空间, 4 bytes (15)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 (16)req name .req register name: 为寄存器定义一个别名 (17)code .code [16|32]: 指定指令代码产生的长度, 16表示Thumb指令, 32表示ARM指令 (18)ltorg .ltorg: 表示当前往下的定义在归于当前段,并为之分配空间
2 ARM GNU专有符号 (1)@ 表示注释从当前位置到行尾的字符. (2)# 注释掉一整行. (3); 新行分隔符.
3 操作码 (1)NOP: nop 空操作, 相当于MOV r0, r0 (2)LDR: ldr , = 相当于PC寄存器或其它寄存器的长转移 (3)ADR: adr 相于PC寄存器或其它寄存器的小范围转移 (4)ADRL: adrl 相于PC寄存器或其寄存器的中范围转移
|