当前位置:   article > 正文

汇编语言笔记-汇编文件(.s文件)介绍

.s文件


       本文基于Keil5,对STM32F103RCT6芯片可使用的最基本的汇编工程进行介绍(不包括启动文件)。

       以STM32F1基本汇编工程为例,其中最重要的两个文件,即App文件夹中的main.s文件及ARM文件夹中的startup_stm32f10x_hd.s启动文件,下面对main.s文件中的代码进行介绍。

       main.s文件中的代码可以分为“文件类型”、“输出”、“输入”、“宏定义”、“常量段”、“变量段”和“代码段”和“文件结束”8个部分,下面逐一介绍这8个部分的代码。

文件类型

       在“文件类型”区,包含了如下所示的代码(注意代码前面的空格),其中PRESERVE8伪操作用于指定当前文件保存数据至堆栈时按八字节对齐(基于Thumb指令集的文件对数据的对齐程度要求较高),THUMB伪操作用于指示编译器该文件使用Thumb指令集。

  PRESERVE8              
  THUMB
  • 1
  • 2

输出输入

       在“输出”区和“输入”区,分别通过EXPORT和IMPORT伪操作对标号进行声明或引入,其中EXPORT用于声明一个全局的标号,即使得本文件中的标号可在其他的文件中引用。IMPORT用于指示编译器该标号在其它文件定义,通过IMPORT才能在本文件引用其它文件中的标号。具体的使用可参考汇编语言笔记-ARM汇编器伪操作

宏定义

       在“宏定义”区,可以MACRO定义宏。MACRO的使用也可以参考汇编语言笔记-ARM汇编器伪操作

有一说一,感觉汇编语言的宏没啥用,直接通过PROC定义函数,也可以使用参数什么的

常量段

       在“常量段”区,包含了如下所示的代码(并没有定义常量,常量的定义应该放在代码下面),其中AREA伪操作用于定义一个段,该段从此开始,到下一个AREA结束。ConstData作为段名表示这个是常量段,但实际上没什么意义,叫什么都行(当然,极少量的段名有特殊的作用,比如启动文件里面的RESET据说可以将该区域置于存储器最前),DATA和READONLY是段的属性,前者表示该区域为数据,后者表示该区域仅可读(常量)。

 AREA ConstData, DATA, READONLY  
  • 1

变量段

“变量段”区如下,类似常量段,READWRITE属性表示该区域可读可写(变量)。

AREA StaticData, DATA, READWRITE
  • 1

代码段

“代码段”区如下,类似常量段,用于放置各种函数。

  AREA text, CODE, READONLY
  • 1

上面三段都使用了AREA伪操作,同样可以参考汇编语言笔记-ARM汇编器伪操作

文件结束

在“文件结束”区,包含如下所示的代码,其中ALIGN 4用于使当前位置按4字节对齐,即使该文件存储在设备中时按4字节对齐,便于CPU快速访问。END用于指示编译器该文件已结束。

  ALIGN 4 
  END
  • 1
  • 2

注意

上述虽然只是介绍main.s文件,但实际上对所有的汇编文件都可以使用该模板,只需要复制后修改相应区域(至少改掉代码区的函数名)。当然,一个汇编文件不需要和上述一模一样,毕竟有些汇编文件不需要常量段什么的。

注意ARM汇编和8086汇编的区别

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/413556
推荐阅读
相关标签
  

闽ICP备14008679号