• ARM学习笔记12——GNU ARM汇编伪操作


    1、.section

      1.1、语法格式

        

    .section section_name[,"flags"[,%type[,flag_specific_arguments]]] 

      1.2、作用

        定义一个段,每一个段以段名为开始,以下一个段名或者文件结尾为结束。

        ELF格式允许的段标志: a:可分配

                   w:可写段

                     x:执行段

      1.3、举例

        

    .section .mysection   @自定义数据段,段名为“.mysection”

    2、预定义段 .text、.data、.bss

      2.1、语法格式

        

    .text{subsection} 
    
    .data{subsection}    @初始化数据段 
    
    .bss{subsection} 

      2.2、作用

        .text、.data和.bss将汇编系统预定义的段名编译到相应的代码段、数据段和bss段。

        注意:源程序中.bss段应该在.text之前。

      2.3、说明

        bss段通常是指用来存放程序中未初始化的全局变量的一块内存区域 数据段通常是指用来存放程序中已初始化的全局变量的一块内存区域

      2.4、举例

        .section .data 
    
        <initialize data here> 
    
        .section .bss 
    
        <uninitialized data here> 
    
        .section .text .global _start 
    
        _start: <instruction code goes here>

    3、.code16、code32、.thumb、.arm

      3.1、语法格式

        

    .code16、code32 
    
    .thumb 
    
    .arm 

      3.2、作用

        用来选择ARM或者Thumb指令集,.thumb伪操作等同于.code16,表明使用Thumb指令类似的.arm等同于.code32

    4、.end

      4.1、语法格式

        .end

      4.2、作用

        表明源文件的结束,如果该标号之后还有代码,不会被编译到执行文件中

    5、.include

      5.1、语法格式

        

    .include "filename" 

      5.2、作用

        可以将指定的文件在使用位置处展开,一般是头文件

    6、.incbin

      6.1、语法格式

        

    .incbin "file"[,skip[,count]] 

      6.2、作用

        可以将原封不动的一个二进制文件编译到当前文件中。其中,skip表明是从文件开始跳过skip个字节开始读取文件,count是读取的字数

    7、.if、.else/.endif

      7.1、语法格式

        

    .if 条件表达式  
    
        代码段1 
    
    .else
    
        代码段2 
    
    .endif

    8、.ifdef,.else和endif

      8.1、语法格式

       

    .ifdef 条件表达式  
    
          代码段1 
    
    .else  
    
          代码段2 
    
    .endif

    9、.macro、.exitm和.endm

      9.1、语法格式

        

    .macro 宏名 参数名列表       @伪操作.macro定义一个宏  
          宏体 
    .endm                @.endm表示宏结束 

      9.2、说明

        如果宏使用参数,那么在宏体中使用该参数时添加前缀“”。宏定义时的参数还可以使用默认值,可以使用.exitm伪指令来退出宏

      9.3、举例

        

    .macro SHIFTLEFT a,b 
    
    .if <0 
    
    MOV a,a,ASR #- 
    
    .exitm 
    
    .endif 
    
    MOV a,a,LSL # 
    
    .endm

    10、.byte

      10.1、语法格式

        

    .byte 表达式{,表达式}... 

      10.2、作用

        定义单字节

      10.3、举例

        

    .byte 1,2,'s',0x34

    11、.short、.hword

      11。1、语法格式

     

    .short/.hword 表达式{,表达式}... 

      11.2、作用

        定义双字节数据

      11.3、举例

        .short 0x1234

    12、.long、.word、.int

      12.1、语法格式

        

    .long/.word/.int 表达式{,表达式}... 

      12.2、作用

        .long、.word和.int定义4字节数据

    13、.quad

      13.1、语法格式

    quad 表达式{,表达式}... 

      13.2、作用

        .quad定义8字节数据

    14、.string/.asciz/.ascii

      14.1、语法格式

        

    .string/.asciz/.ascii 表达式{,表达式}... 

      14.2、作用

        .string/.asciz/.ascii定义多个字符串。

        注意:ascii伪操作定义的字符串需要自动添加结尾字符''

      14.3、举例

       

     .string "abcd","hello"

    15、.zero、.space、.skip

      15.1、语法格式

       

    .zero <number_of_bytes> 
    .space/.skip <number_of_bytes> {,<fill_byte>}

      15.2、作用

        分配number_of_bytes字节的数据空间,.zero伪操作用0填充内存,.space/.skip用值为fill_byte填充内存,若未指定该值,缺省填充0

    16、.rept、.endr

      16.1、语法格式

        

    .rept 重复次数  
      数据定义 
    .endr       @结束重复定义 

      16.2、作用

        .rept及.endr用于重复定义伪操作

      16.3、举例

        

    .rept 3 
    .byte 0x23
    .endr

    17、.equ、.set

      17.1、语法格式

        

    .equ(.set)常量名,表达式 

      17.2、作用

        .equ和.set用于为程序中标号定义名称

      17.3、举例

        

    .equ abc 3     @让abc=3

    18、.global/.globl

      18.1、语法格式

        

    .global/.globl symbol 

      18.2、作用

        .global和.globl用来定义一个全局的符号

    19、.extern

      19.1、语法格式

        

    .extern label 

      19.2、作用

        .extern用于声明一个外部标号

    20、.ltorg、.pool

      20.1、语法格式

        

    .ltorg/.pool 

      20.2、作用

        .ltorg和.pool用于声明一个数据缓冲池的开始,它可以分配很大的空间

  • 相关阅读:
    51nod 1565模糊搜索(FFT)
    51nod 1851俄罗斯方块(trick)
    可持久化线段树(主席树)模板
    BZOJ2191:Splite
    BZOJ4197:[NOI2015]寿司晚宴
    BZOJ3198:[SDOI2013]SPRING
    BZOJ1500:[NOI2005]维修数列
    BZOJ3527:[ZJOI]力
    BZOJ3160:万径人踪灭
    CODE[VS]1372:DNA
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3534109.html
Copyright © 2020-2023  润新知