赞
踩
以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汇编的区别
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。