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  汇编  伪操作 引用地址:ARM学习笔记12——GNU ARM汇编伪操作

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

推荐阅读最新更新时间:2024-10-31 11:09

基于ARM嵌入式的视频监控系统的设计
目前,嵌入式系统在视频监控中的应用越来越广泛。伴随着网络的强大功能,视频监控更侧重网络监控方案,要求体积小、远程化、成本低、功耗小、操作界面人性化等。本系统基于嵌入式Linux 平台上利用USB 摄像头采集视频图像,通过视频图像压缩及结合网络进行视频图像传输,使远程监控成为可能。 1 系统概述 视频图像监控系统由4 部分组成, 分别为视频图像采集、视频图像处理、视频图像传输、视频图像显示。视频图像采集部分由数字摄像头、USB 通道和嵌入式处理器构成、视频图像处理主要是视频图像压缩,由算法实现、视频图像传输主要利用视频服务器来实现、视频图像显示主要是在远程的主机上实现视频图像的浏览、保存和处理等,Linux 主机上由应用程序实现
[单片机]
基于<font color='red'>ARM</font>嵌入式的视频监控系统的设计
ARM9的大端模式和小端模式
(以ARM9 32位储存结构为例) 小端储存模式 直接上栗子 数据:0x12345678 (共32位) 地址:A+3,A+2,A+1,A(A为本储存区最低有效地址) A+3 = 0x12 A+2 = 0x34 A+1 = 0x56 A = 0x78 总结:高存高(高地址存高位数据); 大端储存模式 反栗子 数据:0x12345678 (共32位) 地址:A+3,A+2,A+1,A(A为本储存区最低有效地址) A+3 = 0x78 A+2 = 0x56 A+1 = 0x34 A = 0x12 总结:低存高(低地址存高字节) 提醒:字数据(四个字节)都是以字节的形式存储的; **ARM9的默认储存模式是小端储存模式。**在
[单片机]
STM32L431之MDK-ARM单步调试错乱
芯片默认使用MSI,频率只有4M,现在需要改成最大时钟80M。一个简单的程序如下: void SystemClock_Init(void){ /* enable HSE */ RCC- CR |= 0x00010000U; while (0 == (RCC- CR & 0x00020000U)); /* configure PLL */ RCC- PLLCFGR = (3 0) | (3 4) | (80 8) | (1 16) | (0 17) | (1 20) | (1 21) | (1 24) | (0 25); /* Fvco = (8M) * (80/4) = 160M,
[单片机]
STM32L431之MDK-<font color='red'>ARM</font>单步调试错乱
评论:英特尔支持Android之举打乱微软阵脚
  英特尔已将Google的Android手机软件栈用于基于Atom微处理器的智能手机设计,这一消息也可能是打破Windows和ARM处理器僵局的一个信号。   也许英特尔这一举动已让微软措手不及,或者是英特尔在回应微软某种未公开的举动?但英特尔和谷歌Android拿什么与微软全面的Windows操作系统和ARM来抗衡?我似乎听到了读者的疑问?   往常人们都认为英特尔和微软彼此之间有默契:英特尔不会支持Android,只要微软公司不扩展对ARM硬件的支持。   这样的默契是否合法呢?在过去,我们已经看到太多起诉市场垄断的诉讼案例,但我现在不能肯定这一点。如果没有白纸黑字写下来、没有正式的协议,这似乎也没有问题。   但是
[手机便携]
基于ARM7 TDMI的SoC语音处理系统的设计
   引 言   随着微电子和计算机技术的高速发展,许多嵌入式应用系统应运而生。其中,各种语音处理系统不断被开发出来,在各行业得到广泛应用,如语音报站器、自动解说装置、采访录音笔等,为人类的生产、生活提供了极大的便利。本文基于东南大学国家专用集成电路的32位嵌入式SoC——SEP3203处理器,采用G.721标准ADPCM算法,实现了语音信号的软件实时编解码,为语音处理应用提供了一种有效的嵌入式解决方案。    1、G.721标准概述   1937年,A.H.Reeves提出脉冲编码调制(PCM),开创了语音数字化通信的历程。CCITT在20世纪80年代初,开始研究低于64 Kb/s的非PCM编码算法,先后制定通过了
[单片机]
基于<font color='red'>ARM</font>7 TDMI的SoC语音处理系统的设计
ARM-Linux一移植必杀技
去年终结了ARM-wince 移植的必杀技,几个简单的要点,现在总结了linux 的关键要点如下,希望大家抛砖。把自己以前移植的wince 和linux 移植的一些简单要点都罗列了,希望大家提出更好的意见,或者指出我笔记的错误。 1.uboot传递给linux内核的nfs启动命令行: setenv bootargs mem=64M console=ttyS0,57600 root=/dev/nfs rw nfsroot=192.168.1.6:/home/linucos/ newmsg/nfsroot nfsaddrs=192.168.1.8:192.168.1.6:192.168.1.1:255.255.255.0
[单片机]
解析C语言与ARM汇编与的相互调用以及与 C++ 相互调用
1.汇编程序访问C语言全局变量 全局变量只能通过地址间接调用,为了访问C++++语言中全局变量,首先要通过extern伪指令引入全局变量,然后将其地址装入寄存器中。 对于unsigned char类型,使用LDRB/STRB访问; 对于unsigned short类型,使用LDRH/STRH访问; 对于unsigned int类型,使用LDR/STR访问; 对于char类型,使用LDRSB/STRSB访问; 对于short类型,使用LDRSH/STRSH访问; 例子: .text .global asmsubrouTIne .extern globvar asmsubrouTIne: LDR R1,=globvar LDR
[单片机]
解析C语言与<font color='red'>ARM</font><font color='red'>汇编</font>与的相互调用以及与 C++ 相互调用
基于ARM-UClinux的无线家庭网关设计
引言   随着网络技术和信息家电的飞速发展,越来越多的家庭要求建立家庭网络。家庭网关是整个家庭网络的核心,它主要实现Internet接入、远程控制,以及连接家庭内部异构子网的功能。基于PC机方案的家庭网关不仅成本较高,而且要求计算机一直处于开机并可进行通信的状态,还不能在计算机上运行干扰通信任务的软件和硬件。所以,为适应普通用户,家庭网关应设计为基于廉价的非PC机设备。但是,若采用8位、16位单片机,由于速度慢且资源有限,实现TCP/IP协议比较困难,所以也不太理想。   因此本文以ARM核的32位嵌入式微处理器作为硬件平台,结合无线通信技术,通过移植嵌入式操作系统?Clinux,并在其上开发相应的驱动程序、应用程序和嵌入式Web
[模拟电子]
基于<font color='red'>ARM</font>-UClinux的无线家庭网关设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved