指令和宏语言_第1页
指令和宏语言_第2页
指令和宏语言_第3页
指令和宏语言_第4页
指令和宏语言_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第七章第七章 伪伪/ /宏指令和目标文件链接宏指令和目标文件链接 .C C源文件源文件 .ASM 汇编文件汇编文件 .CMD 命令文件命令文件 .H 头文件头文件 .PRJ 工程文件工程文件 .LST 列表文件列表文件 .MAP 映射文件映射文件 .OBJ目标文件目标文件 .OUT 可执行文件可执行文件 7 .4 目标文件链接目标文件链接DSP系统中常用的文件后缀系统中常用的文件后缀 COFF目标文件总是包括目标文件总是包括3个默认的段个默认的段 : 文本段:文本段:用用.text定义,通常包括可执行代码。定义,通常包括可执行代码。 数据段:数据段:用用.data定义,通常包括已初始化的数据

2、。定义,通常包括已初始化的数据。 预留段:预留段:用用.bss定义,通常保留用于未初始化变量的空间。定义,通常保留用于未初始化变量的空间。 用用.usect,.sect或或.asect伪指令可创建命名段。这些命名段伪指令可创建命名段。这些命名段可以像可以像.text,.data一样被使用。一样被使用。 COFF有两种基本类型的段:有两种基本类型的段: 已初始化的段已初始化的段 包含数据或代码。用包含数据或代码。用.text和和.data伪指令定义的段和伪指令定义的段和 用用.sect或或.asect伪指令创建的命名段均为已初始化的段。伪指令创建的命名段均为已初始化的段。 未初始化的段未初始化的

3、段 在内存映射中为未初始化数据保留空间。在内存映射中为未初始化数据保留空间。.bss段和用段和用 .usect伪指令创建的命名段是未初始化的段,在目标文伪指令创建的命名段是未初始化的段,在目标文 件中这些段没有实际内容。件中这些段没有实际内容。段段 7.4 目标文件链接目标文件链接目标文件的最小单位被称为段,它是在存储器中占有目标文件的最小单位被称为段,它是在存储器中占有连续空间的代码块或数据块。连续空间的代码块或数据块。 汇编器在汇编过程中建立这些段,链接器把段重定位到目标存储器中汇编器在汇编过程中建立这些段,链接器把段重定位到目标存储器中 所有的段都是独立的、可定位的所有的段都是独立的、可

4、定位的 相同的段将按先后次序定位在连续的区域内相同的段将按先后次序定位在连续的区域内 未初始化段被定位到未初始化段被定位到RAM内;初始化段可单独定位在内;初始化段可单独定位在RAM或或ROM内,内, 并且在链接时还可引用其他段内定义的符号并且在链接时还可引用其他段内定义的符号 汇编器为每个段设置了一个独立的程序计数器,这些计数器称为汇编器为每个段设置了一个独立的程序计数器,这些计数器称为段程段程序计数器序计数器(SPC,Section Program Counters)。)。 可以用段程序计数器排列伪指令可以用段程序计数器排列伪指令.align或或.even,强迫,强迫SPC指向预定的位指向

5、预定的位置。置。段段 段程序计数器段程序计数器 7.4 目标文件链接目标文件链接 链接器通过链接链接器通过链接COFF目标文件建立可目标文件建立可 执行文件,执行文件, 目标文件中的段是链接时的重要依据。目标文件中的段是链接时的重要依据。 链接器可把段定位到用户系链接器可把段定位到用户系 统已配置的存储器中。统已配置的存储器中。 链接器命令文件(链接器命令文件(.cmd)则给出链接器在链接时的有关信息)则给出链接器在链接时的有关信息 DSP芯片的存储器配置随应用芯片的存储器配置随应用 的不同而不同的不同而不同.用链接器伪指令用链接器伪指令 MEMORY(存储器伪指令)可以确定目标系统的各种内存

6、配置。(存储器伪指令)可以确定目标系统的各种内存配置。 当当MEMORY决定了存储器模式后,可以用链接器伪指令决定了存储器模式后,可以用链接器伪指令SECTIONS (段伪指令)确定链接器组合输入段的方法和输出段在存储器中的位置。(段伪指令)确定链接器组合输入段的方法和输出段在存储器中的位置。 如果不使用这两条伪指令,链接器则用默认存储器的定位方式来组合段,如果不使用这两条伪指令,链接器则用默认存储器的定位方式来组合段, 并把它们定位到存储器中。并把它们定位到存储器中。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 链接器命令文件链接器命令文件 .cm

7、d 链接器命令文件允许用户把链接信息放置在文件中。命令链接器命令文件允许用户把链接信息放置在文件中。命令文件是文件是ASCII文件,可以包含下列各项中的某一项:文件,可以包含下列各项中的某一项: 输入文件名。输入文件名。该输入文件可以是目标文件、归档库或其他命令文件。该输入文件可以是目标文件、归档库或其他命令文件。 链接器选项。链接器选项。在命令文件中可以用命令行上的链接器选项。在命令文件中可以用命令行上的链接器选项。 MEMORY和和SECTIONS链接器伪指令。链接器伪指令。 注释。注释。用户可以使用用户可以使用/*和和*/定界符把注释加到命令文件中。定界符把注释加到命令文件中。 赋值语句

8、。赋值语句。该语句定义并赋值给全局符号。该语句定义并赋值给全局符号。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令链接时给符号赋值链接时给符号赋值 赋值语句的语法:赋值语句的语法:链接器中赋值语句的语法类似于链接器中赋值语句的语法类似于C语言中赋值语句语法。语言中赋值语句语法。 符号符号 = 表达式表达式 ;把表达式的值赋予符号;把表达式的值赋予符号 符号符号 += 表达式表达式 ;把表达式的值加到符号上;把表达式的值加到符号上 符号符号 -= 表达式表达式 ;从符号减去表达式的值;从符号减去表达式的值 符号符号 *= 表达式表达式;符号乘以表达式;符

9、号乘以表达式 符号符号 /= 表达式表达式;符号除以表达式;符号除以表达式 把把SPC赋予符号赋予符号“.”:“.”表示定位期间表示定位期间SPC的当前值。的当前值。“.”符号仅可用符号仅可用在在 SECTIONS伪指令内的赋值语句中,用来表示段的当前运行地址。伪指令内的赋值语句中,用来表示段的当前运行地址。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 赋值表达式:链接器表达式必须遵循以下规则:赋值表达式:链接器表达式必须遵循以下规则: 表达式可包含全局符号、常数,以及部分所列的表达式可包含全局符号、常数,以及部分所列的C语言运算符。语言运算符。 所

10、有数被当做长整数(所有数被当做长整数(32位)处理。位)处理。 链接器用和汇编器相同的方式识别常数链接器用和汇编器相同的方式识别常数。 表达式中的符号只具有符号的地址值,不进行类型检查。表达式中的符号只具有符号的地址值,不进行类型检查。 链接器表达式可以是绝对的或可重定位的。链接器表达式可以是绝对的或可重定位的。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 MEMORY伪指令伪指令 确定在目标系统中具有物理位置且可被程序使用的存储器范围。确定在目标系统中具有物理位置且可被程序使用的存储器范围。MEMORY伪指令的一般语句形式为:伪指令的一般语句形式为

11、:MEMORY PAGE 0: 存储器名存储器名1(属性)(属性):ORIGIN=常数常数, LENGTH=常数常数 PAGE n: 存储器名存储器名n(属性)(属性): ORIGIN=常数常数,LENGTH=常数常数 7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令PAGE: 定义一个存储器空间,用户可以定义多达定义一个存储器空间,用户可以定义多达255页。页。 PAGE0定义程序存储器,定义程序存储器,PAGE1定义数据存储器,定义数据存储器, PAGE2定义定义I/O空间空间。如果用户没有使用如果用户没有使用PAGE选项,那么链接器把段定位到选项,

12、那么链接器把段定位到PAGE0。每个每个PAGE代表一个完全独立的地址空间。代表一个完全独立的地址空间。在在PAGE0上已配置的存储器可以和在上已配置的存储器可以和在PAGE1上已配置的存储器重叠。上已配置的存储器重叠。存储器名:存储器名: 命名存储器范围。由命名存储器范围。由18个字符组成。个字符组成。名字对于链接器没有特殊的意义,仅指明存储器的区域。名字对于链接器没有特殊的意义,仅指明存储器的区域。在不同页上存储器范围可以有相同的名字,在不同页上存储器范围可以有相同的名字,在同一页,所有的存储器范围不能有相同的名字,且不能重叠在同一页,所有的存储器范围不能有相同的名字,且不能重叠。7.4

13、目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令属性:属性:可选项,当被使用时,必须用括号括起来。属性把输出段的定位限制在某可选项,当被使用时,必须用括号括起来。属性把输出段的定位限制在某 些存储器范围内。如果用户不使用任何属性,则输出段即可以定位到任何些存储器范围内。如果用户不使用任何属性,则输出段即可以定位到任何 范围内。有效的属性包括:范围内。有效的属性包括:R存储器可读;存储器可读; W存储器可写;存储器可写; X储器可以包含可执行代码;储器可以包含可执行代码; I存储器可被初始化。存储器可被初始化。ORIGIN:指定存储器的起始地址,也可以写成指定存储

14、器的起始地址,也可以写成org或或o。这个值是以字节规定。这个值是以字节规定 的的16位常数,也可以是十进制、八进制或十六进制。位常数,也可以是十进制、八进制或十六进制。 LENGTH:指定存储器的长度指定存储器的长度,也可以写成也可以写成len或或l。数值的表示与。数值的表示与origin相同相同 当用户使用当用户使用MEMORY伪指令时伪指令时,要确信已指定了所有可要确信已指定了所有可 用于装载代码的存储器范围。用于装载代码的存储器范围。 链接器不把程序放到未配置的存储器中。链接器不把程序放到未配置的存储器中。注意:注意:7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命

15、令文件和链接器伪指令例例6.24 MEMORY指令举例指令举例 / * Sample Command file with MEMORY directive * /file1.obj file2.obj -o prog.out MEMORY PAGE0: ROM: ORIGIN=0C00h ,LENGTH=1000h PAGE1: SCRATCH: ORIGIN =60h, LENGTH =20h RAM: ORIGIN =200h, LENGTH =200h 该例定义了一个存储器系统:具有程序存储器中地址为该例定义了一个存储器系统:具有程序存储器中地址为0C00h,长度为,长度为4K字的字的R

16、OM;数据存储器中地址为;数据存储器中地址为60h,长度为,长度为32字的字的RAM;数据存储器;数据存储器中地址为中地址为200h,长度为长度为512字的字的RAM。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 SECTIONS伪指令伪指令 描述输入段怎样被组合到输出段内;定义在执行程序中的输出段;描述输入段怎样被组合到输出段内;定义在执行程序中的输出段; 规规定输出段在存储器中的位置;允许重新命名输出段。定输出段在存储器中的位置;允许重新命名输出段。SECTIONS伪指令的一般语法形式是:伪指令的一般语法形式是:SECTIONS 段名段名1:特性

17、特性1,特性,特性2, 段名段名2:特性特性1,特性,特性2, 指令中的每一行从段名开始定义输出段,输出段是输出文件内的段。指令中的每一行从段名开始定义输出段,输出段是输出文件内的段。在段名之后是特性列表(以逗号隔开)在段名之后是特性列表(以逗号隔开),定义段的内容以及它是怎样被分配的。定义段的内容以及它是怎样被分配的。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令特性列表的选项(段所具备的特性)有以下几种。特性列表的选项(段所具备的特性)有以下几种。 装载地址:装载地址:规定段将被装载在存储器中的位置。规定段将被装载在存储器中的位置。 语法:语法:l

18、oad = allocation 或或 allocation 或或 allocation allocation是是MEMORY伪指令所定义的范围内地址。伪指令所定义的范围内地址。 运行地址:运行地址:定义段在存储器内运行的位置。定义段在存储器内运行的位置。 语法:语法:run = allocation 或或 run allocation 如果在一个段中如果在一个段中 load 和和 run 的地址相同,的地址相同, run 可以省略。可以省略。 链接器为每个输出段分配两个目标存储器地址:装载地址和运行地址。链接器为每个输出段分配两个目标存储器地址:装载地址和运行地址。通通常这两个地址是相同的常

19、这两个地址是相同的。但有时用户可能把代码装入存储器的一个区域却在另。但有时用户可能把代码装入存储器的一个区域却在另一个区域运行它。例如在引导加载程序,用一个区域运行它。例如在引导加载程序,用load设置它的装载地址,用设置它的装载地址,用run设置设置它的运行地址。它的运行地址。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 调准地址:调准地址:规定段应在规定段应在地址边界地址边界上开始。调准可以使链接器把输出段放在位上开始。调准可以使链接器把输出段放在位 于于n字边界的地址,其中字边界的地址,其中n是是2的幂。的幂。 语法:语法:align=n 或或

20、align=(n) 如如 .text align=128, 即将即将.text段定位于页边界。段定位于页边界。 块地址:块地址:规定段必须装在两个地址边界之间规定段必须装在两个地址边界之间,它把段定位在大小为它把段定位在大小为n的块内的块内 任何地方,如果段大于块,那么段将从该边界开任何地方,如果段大于块,那么段将从该边界开 始。和调准一始。和调准一 样,样,n必须是必须是2的幂。的幂。 语法:语法:block=n 或或 block(n) 如如 .bss load=block(0 x80)。 定位定位.bss段使其包含在单个段使其包含在单个128字的页内或者从新页开始。用户可以单独使用字的页内

21、或者从新页开始。用户可以单独使用调准或块,也可以和装入地址、运行地址结合在一起使用,但是调准或块,也可以和装入地址、运行地址结合在一起使用,但是调准和块不能一调准和块不能一起使用。起使用。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 输入段:输入段:定义组成输出段的输入段。定义组成输出段的输入段。 语法:语法: input_sections 输入文件中的段组合起来形成输出段,链接器按照所列出的输入段的次序输入文件中的段组合起来形成输出段,链接器按照所列出的输入段的次序链接并组合它们。输出段的大小是组成它的输入段的大小之和。链接并组合它们。输出段的大小

22、是组成它的输入段的大小之和。 通用类型的段的规格说明中没有输入段。通用类型的段的规格说明中没有输入段。 如如 :SECTIONS .text: .data: .bss : 此时链接器从输入文件取出所有此时链接器从输入文件取出所有.text段并把它们组合到段并把它们组合到.text输出段内。链接器输出段内。链接器按照它在输入文件中遇到的次序链接按照它在输入文件中遇到的次序链接.text输入段,对输入段,对.data和和.bss段的操作与段的操作与.text相相同。同。 用户也可以明确规定组成输出段的输入段用户也可以明确规定组成输出段的输入段,每个输入段用它的文件名和段名来每个输入段用它的文件名和

23、段名来标志。标志。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令例例6.25 SECTIONS .text f1.obj(.text) f2.obj(sec1) f3.obj f3.obj(.text,sec2) 输入段不必相互同名也不必和输出段同名。如果列举输入文件时不带段,输入段不必相互同名也不必和输出段同名。如果列举输入文件时不带段,那么它所有的段将被包含在输出段之内。那么它所有的段将被包含在输出段之内。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 段类型:段类型:定义特殊段类型的标志。定义特殊段类型的

24、标志。 语法:语法:type=COPY 或或 type=DSECT 或或 type=NOLOAD 用户可以把这用户可以把这3种特殊的类型赋予输出段。用种特殊的类型赋予输出段。用COPY和和DSECT创建的段是一创建的段是一个虚段个虚段,它不包括在输出段存储器分配内,也不占据存储器空间,不包括在存储,它不包括在输出段存储器分配内,也不占据存储器空间,不包括在存储器映象列表中。但在虚段中定义的全局符号可以被其他输入段引用,器映象列表中。但在虚段中定义的全局符号可以被其他输入段引用,COPY段可段可以将段的内容、重定位信息及行号信息放在输出模块中,而以将段的内容、重定位信息及行号信息放在输出模块中,

25、而DSECT段则不放置。段则不放置。 NOLOAD创建的段不将段的内容、重定位信息及行号信息放在输出模块中,创建的段不将段的内容、重定位信息及行号信息放在输出模块中,但链接器为其分配空间并包括在存储器映象列表中。但链接器为其分配空间并包括在存储器映象列表中。 7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 填充值:填充值:定义用于填充初始化空位的数值。定义用于填充初始化空位的数值。 语法:语法:file=value 或或name: =value 当初始化输出段内有空位存在时,链接器必须提供原始数据以填充它。链接当初始化输出段内有空位存在时,链接器必须提

26、供原始数据以填充它。链接器用器用16位数值填充空位,该数值在存储器内复制直至它填满空位为止。位数值填充空位,该数值在存储器内复制直至它填满空位为止。7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令例例6.26 SETIONS伪指令的使用伪指令的使用file1.obj file2.obj -o prog.out SECTIONS .text: load=ROM run=0800h .const: load=ROM .bss: load=RAM vectors: load=0FF80h t1.obj (.intvec1) t2.obj(.intvec2) e

27、ndvec= . .data : align=16 7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 链接器举例链接器举例 例例6.27是一个名为是一个名为demo.cmd的链接器命令文件,它链接了的链接器命令文件,它链接了3个目标文件:个目标文件:demo.obj,fft.obj和和tables.obj,并创建了一个名为,并创建了一个名为demo.out的可执行程序。假的可执行程序。假设目标存储器具有下列配置。设目标存储器具有下列配置。程序存储器:程序存储器:地址范围地址范围 内容内容 0 xF0000 0 x3FFFBF 片内片内ROM 0 x3FF

28、FC0 0 x3FFFFF 中断向量表中断向量表数据存储器:数据存储器:地址范围地址范围 内容内容 0 x000040 0 x0001FF 堆栈堆栈 0 x000200 0 x0007FF RAM_1 0 x3ED000 0 x3EFFFF RAM_27.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令例例6.27 命令文件命令文件exmp.cmd /* 定义链接器选项定义链接器选项*/ -e SETUP /* 定义程序入口定义程序入口 */-o demo.out /* 命名输出文件命名输出文件 */-m demo.map /* 创建一个输出列表文件创建一个

29、输出列表文件*/ /* 定义输入文件定义输入文件 */demo.obj /* 链接三个目标文件链接三个目标文件 */fft.objtables.obj /*定义存储器配置定义存储器配置 */MEMORYPAGE 0:ROM (R):ORIGIN = 3F0000h, LENGTH =0FFC0h VECTORS (R): ORIGIN = 3FFFC0h,LENGTH = 0040h PAGE 1:STACK (RW):ORIGIN = 000040h, LENGTH = 01C0h RAM_2 (RW) : ORIGIN = 000200h, LENGTH = 0600h RAM_1 (RW

30、) : ORIGIN = 3ED000h, LENGTH = 3000h SECTIONS vectors:VECTORS, PAGE=0 .text: load = ROM, PAGE=0 .data:file=07A1Ch, load=RAM_1,PAGE=1 tables.obj(.data) fft.obj(.data) +=100h ; /*创建一个长度为创建一个长度为100的空间,用的空间,用07A1Ch填充填充*/ var_defs: RAM_2 page=1 /*包含在包含在dmo.obj文件中文件中var_defs段的变量链接到数段的变量链接到数 据块据块RAM_2中中*/

31、.bss: RAM_1, page=1, fill=0FFFFh /* .bss的填充和链接的填充和链接*/ 7.4 目标文件链接目标文件链接链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令链接器命令文件和链接器伪指令 TMS320C228x器件的默认定位器件的默认定位MEMORY PAGE 0:PROG: ORIGIN = 0 x000040H, LENGTH = 0 x3FFFC0H PAGE 1: DATA: ORIGIN = 0 x000000H, LENGTH = 0 x010000H PAGE 1: DATA1:ORIGIN = 0 x01000

32、0H, LENGTH = 0 x3F0000H SECTIONS .text: PAGE = 0 .data:PAGE = 0 .cinit: PAGE = 0 /*仅在仅在C程序中使用程序中使用*/ .bss: PAGE = 1 用户没有使用用户没有使用MEMORY和和SECTIONS的情况下,存储器使用该默认定位的情况下,存储器使用该默认定位7.4 目标文件链接目标文件链接7.4 程序举例程序举例 公用文件公用文件 程序设计时,需在多个模块中使用相同设置和中断处理程序设计时,需在多个模块中使用相同设置和中断处理: 将芯片中映射至将芯片中映射至I/O空间的寄存器地址及标号、预置变量空间的寄存

33、器地址及标号、预置变量和常数的空间等设置语句集中在一个文件中,称为和常数的空间等设置语句集中在一个文件中,称为I/O寄存器寄存器头文件(如头文件(如init.h);); 将转移中断矢量地址的指令集中在一个文件中,称为将转移中断矢量地址的指令集中在一个文件中,称为中中断矢量头文件(如断矢量头文件(如vector.h);); 将定义程序、数据和将定义程序、数据和I/O空间地址块大小和位置的伪指令空间地址块大小和位置的伪指令集中在一个文件中,称为集中在一个文件中,称为命令文件(如命令文件(如F206.cmd)。)。 这这3个文件称为个文件称为公用文件。公用文件。 用用.copy或或.include伪指令将伪指令将I/O寄存器头文件和中断矢量寄存器头文件和中断矢量 头文件复制到该应用程序中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论