ARM基础 七、ARM伪操作和伪指令

一、ARM汇编器支持的伪操作

       1、定义

                在ARM汇编语言程序中,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪操作标识符,它们所完成的操作称为伪操作

        2、符号定义伪操作

        符号定义伪操作用于定义ARM汇编程序中的变量、对变量赋值及定义寄存器的别名等操作。常见的符号定义伪操作有如下几种:
            (1)用于定义全局变量的GBLA、GBLL和GBLS。
            (2)用于定义局部变量的LCLA、LCLL和LCLS。
            (3)用于对变量赋值的SETA、SETL和SETS。
            (4)为通用寄存器列表定义名称的RLIST。

          3、数据定义(Data Definition)伪操作

  数据定义伪操作一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。常见的数据定义伪操作有如下几种:
             (1)DCB用于分配一片连续的字节存储单元并用指定的数据初始化
             (2)DCW(DCWU)用于分配一片连续的半字存储单元并用指定的数据初始化
             (3)DCD(DCDU)用于分配一片连续的字存储单元并用指定的数据初始化
             (4)DCFD(DCFDU)用于为双精度的浮点数分配一片连续的字存储单元并用指定的数据初始化
             (5)DCFS(DCFSU)用于为单精度的浮点数分配一片连续的字存储单元并用指定的数据初始化
             (6)DCQ(DCQU)用于分配一片以8字节为单位的连续的存储单元并用指定的数据初始化
             (7)SPACE用于分配一片连续的存储单元
             (8)MAP用于定义一个结构化的内存表首地址
             (9)FIELD用于定义一个结构化的内存表的数据域

          4、汇编控制伪操作

           汇编控制伪操作用于控制汇编程序的执行流程,常用的汇编控制伪操作包括以下几条。
             (1)IF、ELSE、ENDIF
             (2)WHILE、WEND
             (3)MACRO、MEND
             (4)MEXIT

           5、杂项伪操作

             (1)AREA用于定义一个代码段或数据段
             (2)ALIGN用于使程序当前位置满足一定的对齐方式
             (3)ENTRY用于指定程序入口点
             (4)END用于指示源程序结束
             (5)EQU用于定义字符名称
             (6)EXPORT(或GLOBAL)用于声明符号可以被其他文件引用
             (7)EXPORTAS用于向目标文件引入符号
             (8)IMPORT用于通知编译器当前符号不在本文件中
             (9)EXTERN用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用
             (10)GET(或INCLUDE)用于将一个文件包含到当前源文件
             (11)INCBIN用于将一个文件包含到当前源文件






二、ARM汇编器支持的伪指令

       ARM汇编器支持ARM伪指令,这些伪指令在汇编阶段被翻译成ARM或者Thumb(或Thumb-2)指令(或指令序列)。
             1、ADR伪指令(只能用一条汇编指令替代)
           2、ADRL伪指令(用两条汇编指令替代:1有用+1无用 / 2有用)         
  

             adr和adrl伪指令的实质:是将基于PC的相对偏移地址值存放到寄存器中

             3、LDR伪指令 (可完全替代ADR和ADRL)

                  ldr伪指令的实质LDR Rd,=constconst如果是有效数,会翻译成MOV ,mvn;如果const不是一个有效数,是把要放进寄存器的立即数存储到一个内存地址中,然后将ldr伪指令翻译成一条ldr指令,然后从该地址中读取这个立即数

                  

             4、NOP伪指令:在汇编时将被替换成ARM中的空操作    



你可能感兴趣的:(ARM_ARM基础)