原创 【转】ARM GNU 汇编伪指令简介

2009-9-18 15:59 2545 4 4 分类: MCU/ 嵌入式

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 <register> , =<expression> 相当于PC寄存器或其它寄存器的长转移
  (3)ADR: adr <register> <label> 相于PC寄存器或其它寄存器的小范围转移
  (4)ADRL: adrl <register> <label> 相于PC寄存器或其寄存器的中范围转移

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条