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

2020-02-18来源: eefocus关键字:ARM  GNU  汇编  伪操作

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 


     


    .section .bss 


     


    .section .text .global _start 


    _start:


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 b<0 


MOV a,a,ASR #-b 


.exitm 


.endif 


MOV a,a,LSL #b 


.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  

.space/.skip {,

  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用于声明一个数据缓冲池的开始,它可以分配很大的空间


关键字:ARM  GNU  汇编  伪操作 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488622.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:ARM学习笔记13——LED驱动程序设计
下一篇:ARM学习笔记11——GNU ARM汇编程序设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ARM七种异常源和异常处理流程(四大步三小步)
                                                    ARM异常处理(处理器对特定的异常事件进行的处理)的进入过程(硬件自动完成):四大步(两备份两修改)三小步:(1)拷贝 CPSR (当前程序状态寄存器current program status register)到 SPSR_<mode>(保存当前
发表于 2020-03-08
ARM七种异常源和异常处理流程(四大步三小步)
arm开发板的一些常用命令
这写记录是我经常忘记的东西:做个笔记在这里1、reboot 是重启的意思。2、source 是使那些修改的文件立即生效,避免了重启之后才能生效的问题,例如我们修改了/etc/profiile,修改之后不能立即生效。这时我们输入 source /etc/profile 就可以生效了这些以后还会继续更新。3、chmod -R 777 /home/edu/practice 设置practice文件夹里面的所有的文件权限为7774、压缩单个文件:gzip -v etc.c   生成的压缩名为:etc.c.gz5、压缩多个文件:gzip -v  *     //压缩当前目录下的所有文
发表于 2020-03-08
ARM处理器的未定义指令异常处理过程分析
在前面的两篇文章中已经介绍了ARM处理器的工作模式和ARM异常中断处理流程。这篇文章我们通过代码来详细介绍ARM处理器未定义指令的异常中断处理;当发生未定义指令异常中断时,CPU进入未定义指令模式。可以通过读取CPSR寄存器的值来判定是否真的进入了未定义指令模式。开发板:tiny4412;工具链版本:gcc version 4.5.1 (ctng-1.8.1-FA)主要设置以下几个文件:start.S文件,详细内容如下:.text.global _start_start: b reset /* vector 0x46000000 reset*/ ldr pc, _undefined_instruction
发表于 2020-03-08
【ARM裸板】启动文件与栈的简略分析
unsigned int *)0x56000054; *pGPFCON = 0x100; *pGPFDAT = 0; return 0;}3.问题函数的调用规则ATPCS:ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)参考文章 Arm汇编学习笔记(六)——函数调用栈空间以及fp寄存器3.1 为什么要设置栈?因为C函数所需保存局部变量保存LR等寄存器(返回地址)调用者如何传递参数给被调用者被调用者如何传返回这给调用者怎么从栈中恢复那些寄存器调用者和被调用者通过r0-r3寄存器传递参数和返回值在函数中,r4-r11可能被使用,所以:在入口保存他们,在出口恢复他们高标号寄存器存放在高地
发表于 2020-03-08
【ARM裸板】启动文件与栈的简略分析
【ARM裸板】S3C2440 时钟设置与分析
由时钟树分析,时钟源通过选择器接入给MPLL(Main PLL)与UPLL(USB PLL)经过MPLL得到FCLK提供给CPU[ARM920T]FCLK分别通过HDIVN与PDIVN分频得到HCLK与PCLKHCLK接入给AHB总线,再给各种高速设备(Nand Flash、内存控制器、中断控制器…)PCLK接入给APB总线,再给各种低速设别(I2C、PWM、GPIO、UART…)1.时钟源最大值2.时钟源2.1 两种时钟源1.晶振2.外部引脚时钟输入2.2 选择时钟源通过改变OM[3:2]引脚来选择时钟源JZ2440 OM[3:2]接入GND,则主时钟源与USB时钟源都选择外部晶振3.上电时钟分析复位等待, 等待电源稳定
发表于 2020-03-08
【ARM裸板】S3C2440 时钟设置与分析
【ARM裸板】内存控制器、SDRAM基础与代码重定位
1.CPU如何控制外设?CPU控制相应外设的寄存器,有外设控制器发出特定的波形2.CPU如何选择寄存器?CPU通过内存控制器选择发出地址addr根据地址选择不同的模块CPU内存控制器读写数据3.外设共用地址、数据总线,如何互不干扰?通过片选CS引脚,选择不同的外设4.谁控制片选引脚发出地址addr根据地址发出片选信号CPU内存控制器使能相应的外设由芯片手册得知:当CPU发出地址是0x00000000时 nGCS0为低电平选择(有效)5.CPU如何读写数据的方向?通过外设芯片的读写引脚控制6.CPU不同位宽设备如何连接并读取数据【内存控制器】6.1 连接方式8bit ROM (从A0开始对应连接)16bit ROM (A0不接,从A1
发表于 2020-03-06
【ARM裸板】内存控制器、SDRAM基础与代码重定位
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved