汇编语言程序开发工具_第1页
汇编语言程序开发工具_第2页
汇编语言程序开发工具_第3页
汇编语言程序开发工具_第4页
汇编语言程序开发工具_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

2020年5月18日,DSP原理及应用,1,第4章汇编语言程序开发工具,4.1TMS320C54x软件开发过程,C54x的应用软件开发主要完成以下工作:(1)选择编程语言编写源程序C54x提供2种编程语言,即汇编语言和C/C+语言。对于完成一般功能的代码,这两种语言都可使用,但对于一些运算量很大的关键代码,最好采用汇编语言来完成,以提高程序的运算效率。(2)选择开发工具和环境C54x提供了两种开发环境。即非集成开发环境和集成开发环境CCS。,2020年5月18日,DSP原理及应用,2,第4章汇编语言程序开发工具,4.1TMS320C54x软件开发过程,1.C54x应用软件开发流程,C54x应用软件的开发可在TI公司提供的开发环境中进行,用户可以用C/C+语言或汇编语言编写源文件,经C编译器、汇编器生成COFF格式的目标文件,再用链接器进行链接,生成在C54x上可执行的目标代码,然后利用调试工具对可执行的目标代码进行仿真和调试。当调试完成后,通过Hex代码转换工具,将调试后的可执行目标代码转换成EPROM编程器能接受的代码,并将该代码固化到EPROM中或加载到用户的应用系统中,以便DSP目标系统脱离计算机单独运行。,2020年5月18日,DSP原理及应用,3,第4章汇编语言程序开发工具,1.C54x应用软件开发流程,开发过程的目的是产生一个可以由C54x目标系统执行的模块。,2020年5月18日,DSP原理及应用,4,第4章汇编语言程序开发工具,4.2汇编语言程序的编辑、汇编和链接过程,示意图,2020年5月18日,DSP原理及应用,5,第4章汇编语言程序开发工具,4.2汇编语言程序的编辑、汇编和链接过程,1.编辑,利用各种文本编辑器,如WORD、EDITPLUS和UltraEdit等,可编写汇编语言源程序。,2.汇编,当汇编语言源程序编写好以后,可利用C54x的汇编器ASM500,对一个或多个源程序分别进行汇编,并生成列表文件(.lst)和目标文件(.obj)。,2020年5月18日,DSP原理及应用,6,第4章汇编语言程序开发工具,4.2汇编语言程序的编辑、汇编和链接过程,3.链接,所谓链接,就是利用C54x的链接器LNK500,根据链接器命令文件(.cmd)对已汇编过的一个或多个目标文件(.obj)进行链接,生成输出文件(.out)和存储器映像文件(.map)。,常用的汇编器命令:,lnk500%1.cmd,lnk500:调用链接器命令,%1.cmd:链接命令文件名,该文件须指明目标文件、输入文件、输出文件、链接选项和存储器配置要求等。,2020年5月18日,DSP原理及应用,7,第4章汇编语言程序开发工具,4.3COFF的一般概念,汇编器和链接器生成的目标文件,是一个可以由C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。,在编写汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。这些代码段和数据段简称为段。汇编器和链接器提供一些伪指令来建立和管理各种各样的段。,2020年5月18日,DSP原理及应用,8,第4章汇编语言程序开发工具,4.3.1COFF文件的基本单元,1.段(sections),是COFF文件中最重要的概念。每个目标文件都分成若干段。,段是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。,COFF目标文件都包含以下3种形式的段:.text段(文本段),通常包含可执行代码;.data段(数据段),通常包含初始化数据;.bss段(保留空间段),通常为未初始化变量保留存储空间。,2020年5月18日,DSP原理及应用,9,第4章汇编语言程序开发工具,4.3.1COFF文件的基本单元,2.段的基本类型,COFF目标文件中的段有两种基本类型。,初始化段未初始化段,(1)初始化段,初始化段中包含有数据或程序代码。主要有:.text段已初始化段;.data段已初始化段;.sect段已初始化段,由汇编器伪指令建立的自定义段。,2020年5月18日,DSP原理及应用,10,第4章汇编语言程序开发工具,4.3.1COFF文件的基本单元,2.段的基本类型,COFF目标文件中的段有两种基本类型。,(2)未初始化段,在存储空间中,为未初始化数据保留存储空间。它包括:.bss段未初始化段;.usect段未初始化段,由汇编命令建立的命名段(自定义段)。,2020年5月18日,DSP原理及应用,11,第4章汇编语言程序开发工具,4.3.1COFF文件的基本单元,3.段与目标存储器的对应关系,汇编器的任务:在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。链接器的任务:就是分配存储单元,将目标文件中的段重新定位到目标系统的存储器中,这一过程称为定位或分配。,2020年5月18日,DSP原理及应用,12,第4章汇编语言程序开发工具,3.段与目标存储器的对应关系,目标文件中的段与目标存储器之间的关系,.bss,.data,.text,RAM,E2PROM,ROM,2020年5月18日,DSP原理及应用,13,第4章汇编语言程序开发工具,4.3.2汇编器对段的处理,汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。汇编器有5条伪指令可识别汇编语言程序的各个部分:,.bss.usect.text.data.sect,定义未初始化段定义未初始化段定义已初始化段定义已初始化段定义已初始化段,2020年5月18日,DSP原理及应用,14,第4章汇编语言程序开发工具,4.3.2汇编器对段的处理,未初始化段就是在C54x存储器中保留空间,通常它们被定位在RAM区。在目标文件中,这些段中没有确切的内容。由这些段定义的空间仅作为临时存储空间,在程序运行时,可以利用这些存储空间存放变量。未初始化段分为默认的和命名的两种,分别由汇编器伪指令.bss和.usect产生。,1.未初始化段,2020年5月18日,DSP原理及应用,15,第4章汇编语言程序开发工具,(1).bss伪指令,1.未初始化段,用于在bss段中保留若干个空间。格式:.bss符号,字数,符号对应于保留的存储空间第一个字的变量名称。可以让其他段引用,也可以用.global命令定义为全局符号。,字数表示在bss段或标有名字的段中保留若干个存储单元。,每调用一次.bss伪指令,汇编器在相应的段保留更多的空间。,2020年5月18日,DSP原理及应用,16,第4章汇编语言程序开发工具,1.未初始化段,(2).usect伪指令,用于为指定的命名段保留若干个空间。格式:符号.usect“段名”,字数,段名程序员为未初始化的命名段定义的名字。,每调用一次.usect伪指令,汇编器在指定的命名段保留更多的空间。,2020年5月18日,DSP原理及应用,17,第4章汇编语言程序开发工具,4.3.2汇编器对段的处理,已初始化段中包含有可执行代码或初始化数据。这些段中的内容都在目标文件中,当加载程序时再放到C54x的存储器中。每个已初始化段都是可以重新定位的,并且可以引用其他段中所定义的符号。链接器在链接时会自动地处理段间的相互引用。已初始化段由.text、.data和.sect三个伪指令建立。,2.已初始化段,2020年5月18日,DSP原理及应用,18,第4章汇编语言程序开发工具,已初始化命令的句法:,2.已初始化段,.text段起点.data段起点.sect“段名”,段起点,段起点是任选项。若选用,它为段程序计数器SPC定义一个起始值。若默认,则SPC从0开始。,2020年5月18日,DSP原理及应用,19,第4章汇编语言程序开发工具,4.3.2汇编器对段的处理,命名段由用户指定,与默认的.text,.data和.bss段的使用相同,但它们被分开汇编。假如一部分可执行代码(例如初始化程序)不希望和.text段分配在一起,可将它们汇编进一个命名段,这样就可定位在与.text不同的地方。也可将初始化的数据汇编到与.data段不同的地方,或者将未初始化的变量保留在与.bss段不同的位置。可用.usect和.sect两个伪指令产生命名段。,3.命名段(自定义段),2020年5月18日,DSP原理及应用,20,第4章汇编语言程序开发工具,.usect伪指令产生类似.bss的段,为变量在RAM中保留存储空间。.sect伪指令产生类似.text和.data的段,可以包含代码或数据。.sect伪指令产生可重新定位地址的命名段。,3.命名段,产生命名段伪指令格式:,符号.usect“段名”,字数.sect“段名”,可以产生多达32767个不同的命名段。段名可长达200个字符。,2020年5月18日,DSP原理及应用,21,第4章汇编语言程序开发工具,4.3.2汇编器对段的处理,汇编器为每个段都安排了一个单独的程序计数器称之为段程序计数器SPC。SPC表示在程序代码或数据段内当前的地址。开始时汇编器将每个SPC置0。当汇编器将程序代码或数据加到段内时,增加相应的SPC值。若再继续对某个段汇编,则相应的SPC就在先前的数值上继续增加。链接器在链接时要对每个段进行重新定位。,5.段程序计数器SPC,第4章汇编语言程序开发工具,4.3.3汇编伪指令,定义段的伪指令,2020年5月18日,DSP原理及应用,23,第4章汇编语言程序开发工具,【例4.3.3】段命令应用举例。,汇编语言源程序:,.datacoeff.word044h,055h,066h.bssbuffer,8prt.word0456h.textadd:LD0Dh,Aaloop:SUB#1,ABCaloop,ANEQ.dataivals.word0CCh,0DDh,0EEh,;初始化数据段;3组数据放入.data段;在.bss段保留8个单元;0456h放入.data段;初始化文本段;1字指令;2字指令;2字指令,共计5个字,;初始化数据段;3组数据放入.data段,2020年5月18日,DSP原理及应用,24,第4章汇编语言程序开发工具,汇编语言源程序:,var2.usect“newvars”,2inbuf.usect“newvars”,8.textmpy:LD0Ah,Bmloop:MPY#0Ah,BBCmloop,BNOV.sect“vectors”.word044h,088h,;建立newvars命名段,保留2个单元;在newvars段保留8个单元;初始化文本段;1字指令;2字指令;2字指令,共计5个字,;建立vectors命名段;2组数据放入vectors命名段,2020年5月18日,DSP原理及应用,25,第4章汇编语言程序开发工具,经汇编后,得列表文件(部分):,2*3*汇编一个初始化表到.data段*4*50000.data600000044coeff.word044h,055h,066h00010055000200667*8*在.bss段中为变量保留空间*9*100000.bssbuffer,811*12*仍然在.data段中*13*1400030456prt.word0456h,2020年5月18日,DSP原理及应用,26,第4章汇编语言程序开发工具,15*16*汇编代码到.text段*17*180000.text190000100dadd:LD0Dh,A200001f010aloop:SUB#1,A00020001210003f842BCaloop,AGEQ0004000122*23*汇编另一个初始化表到.data段*24*250004.data26000400ccivals.word0CCh,0DDh,0EEh000500dd000600ee27*28*为更多的变量定义另一个段*29*300000var2.usect“newvars”,2310001inbuf.usect“newvars”,8,2020年5月18日,DSP原理及应用,27,第4章汇编语言程序开发工具,32*33*汇编更多代码到.text段*34*350005.text360005110ampy:LD0Ah,B370006f166mloopMPY#0Ah,B0007000a380008f868BCmloop,BNOV0009000639*40*为中断向量.vectors定义一个自定义段*41*420000.sect“vectors”4300000044.word044h,088h00010088,源程序的行号,段程序计数器,目标代码,汇编语言源程序,2020年5月18日,DSP原理及应用,28,第4章汇编语言程序开发工具,汇编语言源程序经过汇编后,共建立了5个段:.text段文本段,段内有10个字可执行的程序代码。.data段已初始化的数据段,段内有7个字的数据。vectors段用.sect命令生成的命名段,段内有2个字的初始化数据。.bss段未初始化的数据段,在存储器中为变量保留8个存储单元。newvars段用.usect命令建立的命名段,为变量保留10个存储单元。,2020年5月18日,DSP原理及应用,29,第4章汇编语言程序开发工具,经汇编后,得列表文件(部分):,2*3*汇编一个初始化表到.data段*4*50000.data600000044coeff.word044h,055h,066h00010055000200667*8*在.bss段中为变量保留空间*9*100000.bssbuffer,811*12*仍然在.data段中*13*1400030456prt.word0456h,50000.data,600000044coeff.word044h,055h,066h,100000.bssbuffer,8,1400030456prt.word0456h,.data,6,0044,6,0055,6,0066,10,.bss,没有数据保留8个字,14,0456,2020年5月18日,DSP原理及应用,30,第4章汇编语言程序开发工具,15*16*汇编代码到.text段*17*180000.text190000100dadd:LD0Dh,A200001f010aloop:SUB#1,A00020001210003f842BCaloop,AGEQ0004000122*23*汇编另一个初始化表到.data段*24*250004.data26000400ccivals.word0CCh,0DDh,0EEh000500dd000600ee27*28*为更多的变量定义另一个段*29*300000var2.usect“newvars”,2310001inbuf.usect“newvars”,8,.text,180000.text,190000100dadd:LD0Dh,A,19,100d,200001f010aloop:SUB#1,A,20,f010,20,0001,210003f842BCaloop,AGEQ,21,f842,21,0001,250004.data,26000400ccivals.word0CCh,0DDh,0EEh,.data,26,00cc,26,00dd,26,00ee,300000var2.usect“newvars”,2,newvars,30,保留2个字,310001inbuf.usect“newvars”,8,31,保留8个字,2020年5月18日,DSP原理及应用,31,第4章汇编语言程序开发工具,32*33*汇编更多代码到.text段*34*350005.text360005110ampy:LD0Ah,B370006f166mloopMPY#0Ah,B0007000a380008f868BCmloop,BNOV0009000639*40*为中断向量.vectors定义一个自定义段*41*420000.sect“vectors”4300000044.word044h,088h00010088,350005.text,.text,360005110ampy:LD0Ah,B,36,110a,370006f166mloopMPY#0Ah,B,37,f168,37,000a,380008f868BCmloop,BNOV,38,f868,38,0006,420000.sect“vectors”,vectors,4300000044.word044h,088h,43,0044,43,0088,2020年5月18日,DSP原理及应用,32,第4章汇编语言程序开发工具,4.3.3链接器对段的处理,链接器是开发C54x器件必不可少的开发工具之一,它对段处理时有2个主要任务:将一个或多个COFF目标文件中的各种段作为链接器的输入段,经链接后在一个执行的COFF输出模块中建立各个输出段;在程序装入时对其重新定位,为各个输出段选定存储器地址。,2020年5月18日,DSP原理及应用,33,第4章汇编语言程序开发工具,4.3.3链接器对段的处理,链接器有2条伪指令支持上述任务:,MEMORY伪指令用来定义目标系统的存储器配置空间,包括对存储器各部分命名,以及规定它们的起始地址和长度。SECTIONS伪指令用来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位置,也可用于指定子段。若未使用伪指令,则链接器将使用目标处理器默认的方法将段放入存储空间。,2020年5月18日,DSP原理及应用,34,第4章汇编语言程序开发工具,默认的存储器分配:将所有.text段组合在一起,形成一个.text段,并分配到程序存储器中;将多个目标文件中的.data段组合在一起,分配到紧接着.text段的程序存储空间中;将.bss段组合,配置到数据存储器中;组合命名段。初始化的命名段按顺序分配到紧随.data段的程序存储器,而未初始化命名段将被配置到紧随.bss段的数据存储器中。,1.默认的存储器分配,2020年5月18日,DSP原理及应用,35,第4章汇编语言程序开发工具,默认的存储器分配过程:,.text,.text1,.text2,.data,.data1,.data2,.bss,.bss1,.bss2,table,table_1,table_2,u_vars1,u_vars1,u_vars2,FFT,FFT,没有使用,没有配置,没有配置,没有使用,2020年5月18日,DSP原理及应用,36,第4章汇编语言程序开发工具,4.3.3链接器对段的处理,2.段放入存储器空间,若不希望链接器将所有的.text段结合在一起形成单个的.text段,就不能采用默认的方式。由于DSP硬件系统中可能配置多种类型的存储器,若要把某一段分配到特定类型的存储器中,或将命名段配置特定的地址,则需采用MEMORY和SECTIONS伪指令来配置。若不采用默认的方式,通常需要建立一个链接命令文件,在命令文件中用MEMORY和SECTIONS伪指令定义存储器和配置段地址。,2020年5月18日,DSP原理及应用,37,第4章汇编语言程序开发工具,4.4链接器的使用,链接器的主要任务是根据链接命令文件(.cmd),将一个或多个COFF目标文件链接起来,生成存储器映像文件(.map)和可执行的输出文件(.out)。,在链接过程中,链接器将各个目标文件合并,并完成以下工作:,将各个段配置到目标系统的存储器。对各个符号和段进行重新定位,并给它们指定一个最终的地址。解决输入文件之间未定义的外部引用。,2020年5月18日,DSP原理及应用,38,第4章汇编语言程序开发工具,4.4.1链接器命令文件的编写与使用,链接命令文件用来为链接器提供链接信息,可将链接操作所需的信息放在一个文件中,这在多次使用同样的链接信息时,可以方便地调用。在链接命令文件中,可使用MEMORY和SECTIONS伪指令,为实际应用指定存储器结构和地址的映射。MEMORY用来指定目标存储器结构。SECTIONS用来控制段的构成与地址分配。,2020年5月18日,DSP原理及应用,39,第4章汇编语言程序开发工具,【例4.5.1】链接器命令文件举例。,a.objb.obj/*输入文件名*/-oprog.out/*指定输出文件的选项*/-mprog.map/*指定map文件的选项*/MEMORY/*MEMORY伪指令*/PAGE0:ROM:origin=1000h,length=0100hPAGE1:RAM:origin=0100h,length=0100hSECTIONS/*SECTIONS伪指令*/.text:ROM.data:ROM.bss:RAM,2020年5月18日,DSP原理及应用,40,第4章汇编语言程序开发工具,4.4.2MEMORY指令,MEMORY指令用来规定目标存储器的结构。在实际的应用中,目标系统所配置的存储器是各不相同的,通过MEMORY指令,可以进行各种各样的存储器配置。,MEMORY指令的句法:,MEMORYPAGE0:name1(attr):origin=constant,length=constant;PAGEn:namen(attr):origin=constant,length=constant;,指令字,存储区间说明语句,书写方式:已大写MEMORY指令字开始;由大括号括起来的存储器区间说明。,存储区间:,存储页面,区间名称,区间属性,起始地址,区间长度,2020年5月18日,DSP原理及应用,41,第4章汇编语言程序开发工具,4.4.4MEMORY指令,存储区间说明语句:,PAGE:指定存储器空间页面,最多为255页,取决于目标存储器的配置(64k字/页)每一个PAGE代表一个完全独立的地址空间。通常,PAGE0用于程序存储器;PAGE1用于数据存储器。若没有规定PAGE,则链接器默认为PAGE0。,2020年5月18日,DSP原理及应用,42,第4章汇编语言程序开发工具,【例4.5.2】用MEMORY伪指令编写连接命令文件。要求:程序存储器:4K字ROM,起始地址为C00h,取名为ROM。数据存储器:32字RAM,起始地址为60h,取名为SCR。512字RAM,起始地址为80h,取名为CHIP。,file1.objfiel2.obj-oProg.outMEMORYPAGE0:ROM:origin=C00h,length=1000hPAGE1:SCR:origin=60h,length=20hCHIP:origin=80h,length=200h,两个输入文件,链接命令选项,指令字,页面名称,区间名称,起始地址,区间长度,2020年5月18日,DSP原理及应用,43,第4章汇编语言程序开发工具,【例4.5.2】用MEMORY伪指令编写连接命令文件。,file1.objfiel2.obj-oProg.outMEMORYPAGE0:ROM:org=C00h,len=1000hPAGE1:SCR:org=60h,len=20hCHIP:org=80h,len=200h,PAGE0:ROM:org=C00h,len=1000h,00C00h,1000h,01C00h,ROM,PAGE1:SCR:org=60h,len=20h,00060h,0007Fh,20h,SCR,CHIP:org=80h,len=200h,00080h,200h,0027Fh,CHIP,2020年5月18日,DSP原理及应用,44,第4章汇编语言程序开发工具,SECTIONS指令的句法:,SECTIONSname:property,property,property,name:property,property,property,name:property,property,property,指令字,输出段说明语句,段名:定义输出段的名称。,属性:定义该段的内容和存储器的分配。,段名,1.SECTIONS指令语法,属性,属性,属性,2020年5月18日,DSP原理及应用,45,第4章汇编语言程序开发工具,1.SECTIONS指令语法,装入存储器分配,例如:.text:load=0 x1000.text:loadROM.bss:load(RW).text:align=0 x80.text:PAGE0.bss:load=block(0 x80),将.text段定位到一个特定的地址。将.text段定位到命名为ROM的存储区。将.bss段定位到属性为R、W的存储区。将.text段定位到从地址0 x80开始。将.text段定位到PAGE0。将.bss段定位到一个n字存储器块的任何一个位置(n为2的幂次)。,2020年5月18日,DSP原理及应用,46,第4章汇编语言程序开发工具,1.SECTIONS指令语法,运行存储器分配用于定义段运行时的存储器地址。,语法格式:run=allocation或runallocation,2020年5月18日,DSP原理及应用,47,第4章汇编语言程序开发工具,1.SECTIONS指令语法,链接器为段在目标存储器中分配两个地址:加载的地址由装入存储器分配完成执行程序的地址由运行存储器分配完成通常,这两个地址是相同的。,若要想把程序的加载区分开,先将程序加载到ROM,然后在RAM中运行,则用SECTIONS命令让链接器对这个段定位两次即可。例如:.fir:load=ROM,run=RAM,2020年5月18日,DSP原理及应用,48,第4章汇编语言程序开发工具,4.4.3SECTIONS指令,2.SECTIONS指令的使用,【例4.5.3】SECTIONS指令的使用。file1.objfile2.obj-oProg.outSECTIONS.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80ht1.obj(.int1)t2.obj(.int2)endvec=.;.data:align=16,两个输入文件,链接命令选项,指令字,输出段说明语句,2020年5月18日,DSP原理及应用,49,第4章汇编语言程序开发工具,2.SECTIONS指令的使用,【例4.5.3】SECTIONS指令的使用。file1.objfile2.obj-oProg.outSECTIONS.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80ht1.obj(.int1)t2.obj(.int2)endvec=.;.data:align=16,输出段,加载地址,运行地址,.text,ROM,RAM800h,.con,ROM,.bss,RAM,.vec,ROMFF80,.data,RAM16位边界,2020年5月18日,DSP原理及应用,50,第4章汇编语言程序开发工具,2.SECTIONS指令的使用,【例4.5.3】SECTIONS指令的使用。file1.objfile2.obj-oProg.outSECTIONS.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80ht1.obj(.int1)t2.obj(.int2)endvec=.;.data:align=16,.text,.con,.bss,.vec,.data,FF80h,运行时,800h,.text,.text,.text,2020年5月18日,DSP原理及应用,51,第4章汇编语言程序开发工具,3.MEMORY和SECTIONS命令的默认使用,如果没有利用MEMORY和SECTIONS命令,链接器就按默认算法来定位输出段。将所有的.text输入段链接成一个.text输出段,并配置到PAGE0上的存储器;将所有的.data输入段组合成.data输出段,定位到PAGE0上的存储器;,2020年5月18日,DSP原理及应用,52,第4章汇编语言程序开发工具,3.MEMORY和SECTIONS命令的默认使用,所有的.bss输入段则组合成一个.bss输出段,并由链接器定位到配置为PAGE1上的存储器。如果输入文件中包含有已初始化的命名段,则链接器将它们定位到程序存储器,紧随.data段之后。如果输入文件中包括有未初始化的命名段,则链接器将它们定位到数据存储器,并紧随.bss段之后。,2020年5月18日,DSP原理及应用,53,第4章汇编语言程序开发工具,3.MEMORY和SECTIONS命令的默认使用,MEMORYPAGE0:PROG:origin=0 x0080,length=0 xFF00PAGE1:DATA:origin=0 x0080,length=0 xFF80SECTIONS.text:PAGE=0.data:PAGE=0.cinit:PAGE=0.bss:PAGE=1,2020年5月18日,DSP原理及应用,54,第4章汇编语言程序开发工具,4.4.4多个文件的链接实例,下面以example.asm源程序为例,将复位向量列为一个单独的文件,对两个目标文件进行链接。,(1)编写复位向量文件vectors.asm,文件清单:.title“vectors.asm”.refstart.sect“.vectors”Bstart.end,2020年5月18日,DSP原理及应用,55,第4章汇编语言程序开发工具,4.5.6多个文件的链接实例,(2)编写源程序,文件清单:.title“example.asm”.mmregs;定义存储器映像寄存器stack.usect“STACK”,10h;为堆栈指定空间.bssa,4;为变量分配9个字的空间.bssx,4.bssy,1.defstart.data;默认是在程序存储器table:.word1,2,3,4;变量初始化.word8,6,4,2.text,2020年5月18日,DSP原理及应用,56,第4章汇编语言程序开发工具,(2)编写源程序,文件清单:start:STM#0,SWWSR;插入0个等待状态STM#STACK+10h,SP;设置堆栈指针STM#a,AR1;AR1指向aRPT#7;移动8个数据MVPDtable,*AR1+;从程序存储器到数据存储器CALLSUM;调用SUM子程序end:BendSUM:STM#a,AR3;子程序执行STM#x,AR4RPTZA,#3;重复执行4次MAC*AR3+,*AR4+,ASTLA,yRET.end,2020年5月18日,DSP原理及应用,57,第4章汇编语言程序开发工具,(3)对源文件汇编,(4)编写链接命令文件,编写的命令文件用来链接两个目标文件(输入文件),生成一个映像文件example.map和一个可执行的输出文件example.out。标号start是程序的入口。,假设目标存储器的配置如下:程序存储器EPROME000hFFFFh(片外)数据存储器SPRAM0060h007Fh(片内)DARAM0080h017Fh(片内),由汇编器分别对两个源文件进行汇编,生成目标文件example.obj和vectors.obj。,2020年5月18日,DSP原理及应用,58,第4章汇编语言程序开发工具,(4)编写链接命令文件,命令文件清单:vectors.objexample.obj-oexample.out-mexample.map-estartMEMORYPAGE0:EPROM:org=0E000h,len=100hVECS:org=0FF80h,len=04hPAGE1:SPRAM:org=0060h,len=20hDARAM:org=0080h,len=100h,2020年5月18日,DSP原理及应用,59,第4章汇编语言程序开发工具,(4)编写链接命令文件,命令文件清单:SECTIONS.text:EPROMPAGE0.da

温馨提示

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

评论

0/150

提交评论