概述
目录
- 文件类型
- 输出输入
- 宏定义
- 常量段
- 变量段
- 代码段
- 文件结束
- 注意
本文基于Keil5,对STM32F103RCT6芯片可使用的最基本的汇编工程进行介绍(不包括启动文件)。
以STM32F1基本汇编工程为例,其中最重要的两个文件,即App文件夹中的main.s文件及ARM文件夹中的startup_stm32f10x_hd.s启动文件,下面对main.s文件中的代码进行介绍。
main.s文件中的代码可以分为“文件类型”、“输出”、“输入”、“宏定义”、“常量段”、“变量段”和“代码段”和“文件结束”8个部分,下面逐一介绍这8个部分的代码。
文件类型
在“文件类型”区,包含了如下所示的代码(注意代码前面的空格),其中PRESERVE8伪操作用于指定当前文件保存数据至堆栈时按八字节对齐(基于Thumb指令集的文件对数据的对齐程度要求较高),THUMB伪操作用于指示编译器该文件使用Thumb指令集。
PRESERVE8
THUMB
输出输入
在“输出”区和“输入”区,分别通过EXPORT和IMPORT伪操作对标号进行声明或引入,其中EXPORT用于声明一个全局的标号,即使得本文件中的标号可在其他的文件中引用。IMPORT用于指示编译器该标号在其它文件定义,通过IMPORT才能在本文件引用其它文件中的标号。具体的使用可参考汇编语言笔记-ARM汇编器伪操作。
宏定义
在“宏定义”区,可以MACRO定义宏。MACRO的使用也可以参考汇编语言笔记-ARM汇编器伪操作。
有一说一,感觉汇编语言的宏没啥用,直接通过PROC定义函数,也可以使用参数什么的
常量段
在“常量段”区,包含了如下所示的代码(并没有定义常量,常量的定义应该放在代码下面),其中AREA伪操作用于定义一个段,该段从此开始,到下一个AREA结束。ConstData作为段名表示这个是常量段,但实际上没什么意义,叫什么都行(当然,极少量的段名有特殊的作用,比如启动文件里面的RESET据说可以将该区域置于存储器最前),DATA和READONLY是段的属性,前者表示该区域为数据,后者表示该区域仅可读(常量)。
AREA ConstData, DATA, READONLY
变量段
“变量段”区如下,类似常量段,READWRITE属性表示该区域可读可写(变量)。
AREA StaticData, DATA, READWRITE
代码段
“代码段”区如下,类似常量段,用于放置各种函数。
AREA text, CODE, READONLY
上面三段都使用了AREA伪操作,同样可以参考汇编语言笔记-ARM汇编器伪操作。
文件结束
在“文件结束”区,包含如下所示的代码,其中ALIGN 4用于使当前位置按4字节对齐,即使该文件存储在设备中时按4字节对齐,便于CPU快速访问。END用于指示编译器该文件已结束。
ALIGN 4
END
注意
上述虽然只是介绍main.s文件,但实际上对所有的汇编文件都可以使用该模板,只需要复制后修改相应区域(至少改掉代码区的函数名)。当然,一个汇编文件不需要和上述一模一样,毕竟有些汇编文件不需要常量段什么的。
注意ARM汇编和8086汇编的区别
最后
以上就是过时月饼为你收集整理的汇编语言笔记-汇编文件(.s文件)介绍文件类型输出输入宏定义常量段变量段代码段文件结束注意的全部内容,希望文章能够帮你解决汇编语言笔记-汇编文件(.s文件)介绍文件类型输出输入宏定义常量段变量段代码段文件结束注意所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复