GNU ARM汇编 - (2)

来源:互联网 发布:不背单词软件 编辑:程序博客网 时间:2024/06/06 12:43

本连载的2/3/4/5部分,如无特别说明,均出自:北师大课件

1. 数据定义伪操作

   

GNU ARM汇编 - (2) - 路雷米 - 路雷米的博客

    // ltorg =>用于在当前段的当前地址,产生一个data buffer的开始地址,可以分配很大的空间

    .ltorg /*产生一个文字池的伪操作*/

    src:

            /*定义一个字(word=32bit)数据区*/

            .long 1,2,3,4,5,6

    dst:

            .long 0,0,0,0,0,0

 

    =============定义一个字符串============

    .asciz "It is a dog"

    .string "Intel"

    

GNU ARM汇编 - (2) - 路雷米 - 路雷米的博客

 

2. 字符定义伪操作

    用于为下述3种情况,定义一个字符名称:

    数字常量

    基于寄存器的值

    程序中的标号

    ===================.equ/.set=================

    .equ x,45  /*定义变量x,并赋值x=45*/

    .equ y,64

    .equ stack_top, 0x1000

    .set zheng, "Chairman"

 

    ===================.global | .extern symbol ==============

    声明一个Symbo可以被其它文件引用,相当于声明一个全局变量

    .global _start

    _start:

              mov r0,#x

              ... ...

     .extern Image_RO_Limit

     .extern Image_ZI_Limit

     .extern Main /*The entry of main program*/

 

3. 汇编控制伪操作

    用于控制汇编程序的执行流程。

    ============ .section / .text / .data / .bss ================

   格式: .section name [,"flags"[,@type[,@entsize]]]

                .section .text,"x"  ; 定义一个代码段"x" 

                .section .data ; "定义一个数据段"

                .section .bss ; 定义一个未初始化的数据段

 

    单独用 .text / .data / .bss也能定义段

 

    ===========构造链接脚本文件===================

    假设程序仅由代码/初始化数据/未初始化数据组成,代码存放在0x10000开始的区域,数据存放在0x8000000开始位置.

     SECTIONS

     {

        . = 0x10000 ; /* .代表位置计数器,标示当前位置*/

        .text : {*(.text)} ; /*标示所有代码段置于此*/

 

        . = 0x8000000 ; /* .代表位置计数器,标示当前位置*/

        .data : {*(.data)}

        .bss   : {*(.bss)}

     }

GNU ARM汇编 - (2) - 路雷米 - 路雷米的博客
 
   ================= .align ================
   格式:.align {alignment} {,fill} {.max}
              alignment : 对齐方式,默认为4
              fill : 填充内容,默认为0
              max : 填充的最大字节数
 
              通过添加填充字节,使当前位置满足一定的对准方式.
 
 ================= macro / .exitm / .endm ==============
     用于定义一段代码,以便在程序中多次调用.
 
             
GNU ARM汇编 - (2) - 路雷米 - 路雷米的博客
 
   上述宏的图示:
  
GNU ARM汇编 - (2) - 路雷米 - 路雷米的博客
 
 
GNU ARM汇编 - (2) - 路雷米 - 路雷米的博客
 
 
 

 

 评论这张
转发至微博
转发至微博