ARM GNU 汇编伪指令简介 <br />1 ARM GNU 汇编伪指令简介<br /> (1)abort<br /> .abort 停止汇编<br /> (2)align<br /> .align absexpr1,absexpr2<br /> 以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16或<br /> 32. 第二个表达式值表示填充的值<br /> (3)if...else...endif<br /> .if<br /> .else<br /> .endif: 支持条件预编译<br /> (4)include<br /> .include 'file': 包含指定的头文件, 可以把一个汇编常量定义放在头文件中<br /> (5)comm<br /> .comm symbol, length:<br /> 在bss段申请一段命名空间,该段空间的名称叫symbol, 长度为length. Ld连接器在连接<br /> 会为它留出空间<br /> (6)data<br /> .data subsection: 说明接下来的定义归属于subsection数据段<br /> (7)equ<br /> .equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该<br /> 指令并不分配空间<br /> (8)global<br /> .global symbol: 定义一个全局符号, 通常是为ld使用<br /> (9)ascii<br /> .ascii 'string': 定义一个字符串并为之分配空间<br /> (10)byte<br /> .byte expressions: 定义一个字节, 并为之分配空间<br /> (11)short<br /> .short expressions: 定义一个短整型, 并为之分配空间<br /> (12)int<br /> .int expressions: 定义一个整型,并为之分配空间<br /> (13)long<br /> .long expressions: 定义一个长整型, 并为之分配空间<br /> (14)word<br /> .word expressions: 定义一个字,并为之分配空间, 4 bytes<br /> (15)macro/endm<br /> .macro: 定义一段宏代码, .macro表示代码的开始, .endm表示代码的结束, .exitm<br /> 跳出宏, 示例如下:<br /> .macro SHIFTLEFT a, b<br /> .if b < 0<br /> mov a, a, ASR #- b<br /> .exitm<br /> .endif<br /> mov a, a, LSL # b<br /> .endm<br /> (16)req<br /> name .req register name: 为寄存器定义一个别名<br /> (17)code<br /> .code [16|32]: 指定指令代码产生的长度, 16表示Thumb指令, 32表示ARM指令<br /> (18)ltorg<br /> .ltorg: 表示当前往下的定义在归于当前段,并为之分配空间<br /><br />2 ARM GNU专有符号<br /> (1)@ 表示注释从当前位置到行尾的字符.<br /> (2)# 注释掉一整行.<br /> (3); 新行分隔符.<br /><br />3 操作码<br /> (1)NOP: nop 空操作, 相当于MOV r0, r0<br /> (2)LDR: ldr , = 相当于PC寄存器或其它寄存器的长转移<br /> (3)ADR: adr 相于PC寄存器或其它寄存器的小范围转移<br /> (4)ADRL: adrl 相于PC寄存器或其寄存器的中范围转移<br /><br /> |
|