1.COFF格式
要谈CMD文件,首先不可避免的要谈下COFF格式,COFF格式是通用目标文件格式(Common Object File
Format)的缩写,它是一种流行的二进制可执行文件格式,在DSP里二进制可执行文件包括库文件(.lib)、目标文件(.obj)和最终可执行文件(.out)。详细的COFF格式文件包括段头、可执行代码、初始化数据、可重定位信息、行号入口、符号表、字符串。对于DSP的C语言编程我们只需要了解定义段和给段分配空间即可。采用COFF格式更利于我们对其进行模块化编程,我们可以自由的把哪些段分配到哪些空间。
2.Section
(1)其次,在编写CMD文件得时候要碰到SectionS命令,SectionS命令的英文理解就有区域的意思,我们利用SectionS来将目标文件的代码放到指定的区域中。SectionS目标文件中最小的单位我们称之为块,一个块就是最终在存储器映像中占据连续空间的一段代码或者数据。COFF文件格式默认有三个块:
.text 存放可执行代码;
.data 存放已初始化数据;
.bss 为未初始化数据留下的保留空间。
(2)汇编器对块的处理和设置
未初始化块的设置:
.bss 变量存放空间;
.usect 用户自定义的未初始化段;
初始化块的设置:
.text 汇编指令代码
.data 常数数据(比如对变量的初始化数据)
.sect 用户自定义的已初始化段
.asect 类似于.sect,多了绝对地址定位功能,一般不用
(3)C语言对块得的设置和处理
未初始化块(data)
.bss 存放全局和静态变量
.ebss 长调用的.bss(超过了64K地址限制)
.stack 存放C语言的栈
.sysmem 存放C语言的堆
.esysmem 长调用的.sysmem(超过了64K地址限制)
初始化块
.text 可执行代码和常数(program)
.switch switch语句产生的常数表格(program/低64K数据空间)
.pinit Tables for global constructors (C++)(program)
.cinit 用来存放对全局和静态变量的初始化常数值(program)
.const 全局和静态的const变量初始化值和字符串常数,(data)
.econst 长.const(可定位到任何地方)(data)