ARM GNU 汇编伪指令简介

ARM GNU 汇编伪指令简介

 

一.什么是汇编伪指令

  1. 汇编指令语句
        每一条指令语句在源程序汇编时都要产生可供计算机执行的指令代码(即目标代码),所以这种语句又叫可执行语句。每一条指令语句表示计算机具有的一个基本能力,如数据传送,两数相加或相减,移位等,而这种能力是在目标程序(指令代码的有序集合)运行时完成的,是依赖于汁算机内的中央处理器(CPU)、存储器、I/O接口等硬件设备来实现的。
  2. 汇编伪指令语句
          伪指令语句是用于指示汇编程序如何汇编源程序,所以这种语句又叫命令语句。例如源程序中的伪指令语句告诉汇编程序:该源程序如何分段,有哪些逻辑段在程序段中哪些是当前段,它们分别由哪个段寄存器指向;定义了哪些数据,存储单元是如何分配的等等。伪指令语句除定义的具体数据要生成目标代码外,其他均没有对应的目标代码。伪指令语句的这些命令功能是由汇编程序在汇编源程序时,通过执行一段程序来完成的,而不是在运行目标程序时实现的。
  3. 汇编伪指令的作用

二 .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: 表示当前往下的定义在归于当前段,并为之分配空间

 

 注:PC寄存器长转移

 

三.ARM GNU专有符号
  (1)@ 表示注释从当前位置到行尾的字符.
  (2)# 注释掉一整行.
  (3); 新行分隔符.

 

四. 操作码
  (1)NOP: nop 空操作, 相当于MOV r0, r0
  (2)LDR: ldr , = 相当于PC寄存器或其它寄存器的长转移
  (3)ADR: adr

你可能感兴趣的:(ARM,汇编语言)