




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章DSP编程基础,主要内容,TMS320C54x软件开发过程汇编语言程序的编写COFF的一般概念汇编语言程序的编辑、汇编和链接汇编语言程序设计举例,一、软件开发流程图,二、汇编语言程序的编写,在文本编辑器(Editor)中编写满足C54x汇编器(Assembler)格式要求的汇编源程序。用汇编器汇编该源文件,如果源文件中调用了宏,汇编器还会到宏库中搜索该宏。汇编之后生成格式为公共目标文件格式(COFF,CommonObjectFileFormat)的目标文件(.obj),称为COFF目标文件。用链接器(Linker)链接目标文件,如果包含可运行支持库和目标文件库,链接器还会到所保护的库中搜索所需要的成员。,汇编语言程序的编写(续),链接之后生成可执行的COFF执行文件(.out)。COFF执行文件下载到C54xDSP中执行,同时也可借助调试工具(DebuggingTool)对程序进行跟踪调试或优化,也可利用交叉参考列表器(Cross-referenceLister)和绝对列表器(AbsoluteLister)生成一些包含调试信息的表。,1、汇编语言源程序句法,汇编语言源程序的每一行都可以由四部分组成,句法如下:标号:助记符操作数;注释,2、例子:,*lab1.asmy=a1*x1+a2*x2+a3*x3+a4*x4*.titlelab1.asm.mmregsSTACK.usectSTACK,10h;分配堆栈空间.bssa,4;给变量分配空间.bssx,4.bssy,1.defstart.datatable:.word1,2,3,4;数据流.word8,6,4,2,.text;以下为程序码流start:STM#0,SWWSR;addsnowaitstatesSTM#STACK+10h,SP;设置堆栈指针STM#a,AR1;AR1指向aRPT#7;重复8次MVPDtable,*AR1+;从程序存储器到数据CALLSUM;调用SUM子程序end:BendSUM:STM#a,AR3;子程序进行重复加法STM#x,AR4;RPTZA,#3MAC*AR3+,*AR4+,ASTLA,yRET.end,3、句法解释,标号:供本程序的其他部分或其他程序调用。标号是任选项,标号后面可以加也可以不加冒号“:”。标号必须从第一列写起,但第一个字母不能以数字开头。引用标号时,标号的大小写必须一致。助记符:助记符指令、汇编指令、宏指令和宏调用。作为助记符指令,一般用大写;汇编命令和宏命令,以句号“.”开始,且为小写。操作数:指令中的操作数或汇编命令中定义的内容。操作数之间必须用逗号“,”分开。注释:注释从“;”开始,可以放在单独的一行或数行。注释是任选项。(如果注释是从第一列开始,也可以用“*”号。),4、常用的汇编命令伪指令,常用的汇编命令伪指令(续),常用的汇编命令伪指令(续),5、COFF数据型式,三、COFF的一般概念,TMS320C54x的汇编器和链接器都会生成公共目标文件格式(COFF,CommonObjectFileFormat)的目标文件。在本章中,将汇编器生成的文件称为COFF的目标文件,将链接器生成的文件称为COFF执行文件。目前,COFF目标文件格式已被广泛使用,因为它支持模块化(段)编程,能够提供有效灵活的管理代码段和目标系统(TargetSystem)存储空间的方法。,1、COFF文件中的段,段(section),就是在存储器图中占据相邻空间的代码或数据块。每个目标文件都分成若干个段,一个目标文件中的每一个段都是分开的和各不相同的。COFF目标文件都包含以下三种形式的段:.text段(此段通常包含可执行代码).data段(此段通常包含初始化数据).bss段(此段通常为未初始化变量保留存储空间),已初始化段:已初始化段中包含有数据或程序代码。.text段和.data段都是已初始化段。用.sect命令建立的段也是已初始化段。未初始化段:(.bss和.usect)仅仅是用于在存储空间中保留空间,并没有代码或数据,所以未初始化段只有段头,而没有原始数据、重定位信息和行号等。另外,如果程序中没有使用缺省的段(.text,.data和.bss),那么它们在COFF文件中也没有原始数据、重定位信息和行号等,因为它们的原始数据长度为零。汇编器在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。,2、段的分类,3、段的顺序,汇编器在将汇编源程序汇编成COFF目标文件时,将按“.text、.data、用户自定义初始化段、.bss、用户自定义的未初始化段”的顺序将各段放入生成的COFF文件中。因为未初始化段(.bss和.usect)仅仅是用于在存储空间中保留空间,并没有代码或数据,所以未初始化段只有段头,而没有原始数据、重定位信息和行号等。另外,如果程序中没有使用缺省的段(.text,.data和.bss),那么它们在COFF文件中也没有原始数据、重定位信息和行号等,因为它们的原始数据长度为零。如果源程序不止一个,汇编器在汇编时,会将每个程序的段按如下方式放置:.text1,.text2,.text3,.data1,.data2,.data3,.bss1,.bss2,.bss3等。,C54X汇编工具的使用,C54X的源程序可以使用汇编或C语言编写。使用汇编语言是可以使用助记符指令集(MnemonicInstructionSet)或代数指令集(AlgebraicInstructionSet),但两种不能混用。,汇编语言的编辑、汇编和链接,目标文件中段与存储器之间的关系,上例中的目标代码图,输入段组合成可执行的目标文件,默认的存储器分配过程:,.text,.text1,.text2,.data,.data1,.data2,.bss,.bss1,.bss2,table,table_1,table_2,u_vars1,u_vars1,u_vars2,FFT,FFT,没有使用,没有配置,没有配置,没有使用,输入段组合成可执行的目标文件,文件之间的链接,两种指令的汇编语言比较,low_pass_mac:push(st1);pshmst1push(st0);pshmst0push(ar0);pshmar0push(bk);pshmbkar2=data(#t_ar2);mvdm#t_ar2,ar2ar3=data(#t_ar3);mvdm#t_ar3,ar3ar0=#1;stm#1,ar0bk=#N;stm#N,bk*ar3+%=a;stla,*ar3+%repeat(#(N-1),a=0;rptza,#(N-1)a+=*ar2+0%*ar3+0%;mac*ar2+0%,*ar3+0%,a,ASM500命令格式如下:asm500inputfileobjectfilelistingfile-optionsinputfile:汇编源文件名,缺省后缀为.asmobjectfile:编译输出的OBJ文件名,缺省后缀为.objlistingfile:产生的列表文件名,缺省后缀为.lstoptions:编译器使用的各种选择。常用选项有:-c:若使用该选项,编译器忽略字母的大小写。例如abc与ABC是一样的。系统缺省为区分大小写。,-i:设置搜索路径。通知编译器在指定的搜索路径中去查找.copy,.include中的文件。用法举例:-ic:c54x。-l:(小写的L)在编译时产生列表文件,缺省后缀为.lst-mg:汇编源程序使用代数指令集或在源代码中使用.Algebraic-s:将所有的符号都放入符号表。若不使用该选项,编译器仅将全局变量放入符号表。-v:指定版本。特别是需要使用BOOTLOADER时,应加-v548开关。,先看两个汇编源程序:,file1.asm.globaltestloop:calltestbcloop,ageq.endfile2.asmfile3.asm.globaltest.globaltesttest:test:mar*ar3+mar(*ar3+)add#1,aa=a+#1retreturn.end.end,汇编工具ASM500的使用举例,asm500file1.asmasm500file2-lasm500file3-mg-l,TMS320C54xCOFFAssemblerVersion1.20SunJul3012:11:252000Copyright(c)1997TexasInstrumentsIncorporatedfile2.asmPAGE11.globaltest23000000test:40000006D93mar*ar3+5000001F000add#1,a00000200016000003FC00ret78.endNoErrors,NoWarnings,TMS320C54xCOFFAssemblerVersion1.20SunJul3012:21:262000Copyright(c)1997TexasInstrumentsIncorporatedfile3.asmPAGE11.globaltest23000000test:40000006D93mar(*ar3+)5000001F000a=a+#100000200016000003FC00return78.endNoErrors,NoWarnings,C54X汇编语言书写规范,语法:label:指令操作数;注释#前缀表示立即数或直接地址后缀B或b表示二进制常数例如:LD#1000B,A后缀Q或q表示八进制常数例如:LD#10Q,A十进制常数例如:LD#1000,A,C54X汇编语言书写规范,后缀H或h表示十六进制常数例如:LD#1000H,A使用.set定义一个符号的值例如addr.set1000hstm#addr,ar0标号的使用例如blooploop:ssbxintm使用.global定义全局标号,C54X汇编语言书写规范,使用符号$表示当前PC值例如B$可以使用结构例如deltat_len.endstruct.array.tagitem.bssarray,i_len,C54X汇编语言书写规范,可以定义宏例如mypush.macropshmahpshmalpshmbhpshmblendm,二.C54X连接工具的使用,使用LNK500命令可以将一个或多个OBJ文件连接为一个.OUT文件。在连接时,可以通过段定位控制命令将不同的代码、数据写入不同的内存单元。注意:LNK500生成的OUT文件不是纯二进制代码文件,而是包含代码、符号表、代码定位信息的复合文件。,LNK500的使用格式:lnk500-optionsfilename1.filenamen使用举例:lnk500file1.objfile2.obj-ofile.outLNK500命令常用的选项有:-eglobal_symbol:定义程序的进入点。global_symbol必须在源程序中使用.global命令说明。-c:使用C编译器的ROM初始化模式。,-cr:使用C编译器的RAM初始化模式。-idir:指定库文件的路径。-lfilename:指定连接时使用的库文件名。-mfilename:生成MAP文件。-ofilename:指定生成的OUT文件名。系统缺省为a.out。将文件file1.asm和file2.asm连接成OUT文件:lnk500file1file2-mfile.map-ofile.out,通过查看MAP文件可以获得变量、子程序等符号的具体地址。注意:MAP文件只列出全局变量的地址。(用.global说明的符号),三.汇编链接工具对段的处理,为了灵活使用C54X的内存,可以将不同的代码段放入不同的内存中。在汇编源程序中可以使用下列指令:.bss该指令表示在.bss段中保留空间。用法:.bsssymbol,size.usect该指令表示在指定的段中保留空间。用法:symbol.usect“sectionname”,size,.text将代码或数据放入.text段中.data将数据放入.data段中.sect将代码或数据放入指定的段中。用法:symbol.sect“sectionname”,size在链接时使用相应的控制命令以确定具体的内存地址。下面给出其中一种方法:其中,.bss,.text,.data三个段是标准定义,而.vect,.buffer是自定义的。(t.cmd),MEMORYPAGE0:PROG:origin=1800h,length=800hPAGE4:PROG:origin=0200h,length=100hPAGE1:DATA:origin=0c00h,length=100hPAGE2:DATA:origin=0d00h,length=200hPAGE3:DATA:origin=0f00h,length=100hSECTIONS.textPROGPAGE0.vectPROGPAGE4.bssDATAPAGE1.dataDATAPAGE2.bufferDATAPAGE3,链接命令文件.cmd,lab1.obj-olab1.out-mlab1.map-estartMEMORYPAGE0:EPROM:org=0E000h,len=100hPAGE1:SPRAM:org=0060h,len=0020hDARAM:org=0080h,len=100hSECTIONS.text:EPROMPAGE0.vect:EPROMPAGE0.bss:SPRAMPAGE1STACK:DARAMPAGE1,lab.map,TMS320C54xCOFFLinkerVersion1.10FriMay2809:48:592002OUTPUTFILENAME:ENTRYPOINTSYMBOL:startaddress:0000e000MEMORYCONFIGURATIONnameoriginlengthattributesfillPAGE0:EPROM0000e000000000100RWlXPAGE1:SPRAM0000006000000O020RWlXDARAM00000080000000100RWlX,SECTIONALLOCATIONMAPoutputattributes/sectionpageoriginlengthinputsections.text00000e000000000160000e00000000016lab.obj(.text).data10000e0160000000800000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖北交投集团部分中层管理岗位竞聘上岗20人考前自测高频考点模拟试题及参考答案详解
- 2025广东深圳市市场监督管理局遴选第五批专业化职业化食品安全检查员(食品经营)模拟试卷附答案详解(模拟题)
- 2025国家电投所属国核电力院招聘1人笔试题库历年考点版附带答案详解
- 寺庙合作开发协议范本与寺庙项目合作协议范本8篇
- 2025北京通州投资发展有限公司公开招聘8人笔试题库历年考点版附带答案详解
- 2025中国东方航空食品投资有限公司校园招聘笔试题库历年考点版附带答案详解
- 福建省安全培训检查课件
- 禁毒安全知识培训班课件
- 2025法律规定合同范本制度
- 安置房协议赠与合同7篇
- 2025年甘肃省天水市供热有限公司招聘12人笔试历年参考题库附带答案详解
- 2025年一卷政治高考真题及答案
- 安静与智慧主题班会课件
- 云南民族大学附属高级中学2026届高三上学期联考(一)生物试卷(含答案)
- 2025至2030年中国包月视频点播行业市场竞争格局分析及投资方向研究报告
- 皮带机安全知识培训
- 零星维修工程施工组织设计方案方案
- 2025年汽车驾驶员(技师)考试试题及答案(含答案)
- 2025大连国际机场招聘25人笔试历年参考题库附带答案详解
- 2025年浙江铁塔招聘笔试备考题库(带答案详解)
- 2025年上海市(秋季)高考语文真题详解
评论
0/150
提交评论