《DSP精讲课件第4章汇编语言程序开发工具.ppt》由会员分享,可在线阅读,更多相关《DSP精讲课件第4章汇编语言程序开发工具.ppt(31页珍藏版)》请在三一办公上搜索。
1、2023年6月27日,DSP原理及应用,1,第4章 汇编语言程序开发工具,4.1 TMS320C54x软件开发过程 4.2 汇编语言程序的编辑、汇编和链接过程 4.3 COFF的一般概念 4.4 源程序的汇编4.5 链接器的使用,2023年6月27日,DSP原理及应用,2,第4章 汇编语言程序开发工具,4.1 TMS320C54x软件开发过程,C54x的应用软件开发主要完成以下工作:(1)选择编程语言编写源程序 C54x提供2种编程语言,即汇编语言和C/C+语言。对于完成一般功能的代码,这两种语言都可使用,但对于一些运算量很大的关键代码,最好采用汇编语言来完成,以提高程序的运算效率。(2)选择
2、开发工具和环境 C54x提供了两种开发环境。即非集成开发环境和集成开发环境CCS。,2023年6月27日,DSP原理及应用,3,第4章 汇编语言程序开发工具,4.2 汇编语言程序的编辑、汇编和链接过程,示意图,2023年6月27日,DSP原理及应用,4,第4章 汇编语言程序开发工具,4.3 COFF的一般概念,汇编器和链接器生成的目标文件,是一个可以由C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。,在编写汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。这些代码段和数据段简称为段。汇编器和链接器提供一些伪指令来建立和
3、管理各种各样的段。,2023年6月27日,DSP原理及应用,5,第4章 汇编语言程序开发工具,4.3.1 COFF文件的基本单元,1.段(sections),段是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。,COFF目标文件都包含以下3种形式的段:.text 段(文本段),通常包含可执行代码;.data 段(数据段),通常包含初始化数据;.bss 段(保留空间段),通常为未初始化变量保留存储空间。,2023年6月27日,DSP原理及应用,6,第4章 汇编语言程序开发工具,4.3.1 COFF文件的基本单元,2.段的基本类型,COFF目标文件中的段有两种基本
4、类型。,初始化段 未初始化段,(1)初始化段,初始化段中包含有数据或程序代码。主要有:.text段已初始化段;.data段已初始化段;.sect段已初始化段,由汇编器伪指令建立 的自定义段。,2023年6月27日,DSP原理及应用,7,第4章 汇编语言程序开发工具,4.3.1 COFF文件的基本单元,2.段的基本类型,(2)未初始化段,在存储空间中,为未初始化数据保留存储空间。它包括:.bss段未初始化段;.usect段未初始化段,由汇编命令建立的命 名段(自定义段)。,2023年6月27日,DSP原理及应用,8,第4章 汇编语言程序开发工具,3.段与目标存储器的对应关系,目标文件中的段与目标
5、存储器之间的关系,.bss,.data,.text,RAM,E2PROM,ROM,2023年6月27日,DSP原理及应用,9,第4章 汇编语言程序开发工具,(1).bss伪指令,1.未初始化段,用于在bss段中保留若干个空间。格式:.bss 符号,字数,符号对应于保留的存储空间第一个字的变量名称。可以让其他段引用,也可以用.global命令定义为全 局符号。,字数表示在bss段或标有名字的段中保留若干个存储单元。,2023年6月27日,DSP原理及应用,10,第4章 汇编语言程序开发工具,1.未初始化段,(2).usect伪指令,用于为指定的命名段保留若干个空间。格式:符号.usect“段名”
6、,字数,段名程序员为未初始化的命名段定义的名字。,2023年6月27日,DSP原理及应用,11,第4章 汇编语言程序开发工具,已初始化命令的句法:,2.已初始化段,.text 段起点.data 段起点.sect“段名”,段起点,段起点是任选项。若选用,它为段程序计数器SPC定义一个起始值。若默认,则SPC从0开始。,2023年6月27日,DSP原理及应用,12,第4章 汇编语言程序开发工具,4.3.2 汇编器对段的处理,命名段由用户指定,与默认的.text,.data和.bss段的使用相同,但它们被分开汇编。可用.usect和.sect两个伪指令产生命名段。,3.命名段(自定义段),2023年
7、6月27日,DSP原理及应用,13,第4章 汇编语言程序开发工具,.usect伪指令产生类似.bss的段,为变量在RAM中保留存储空间。.sect伪指令产生类似.text和.data的段,可以包含代码或数据。.sect伪指令产生可重新定位地址的命名段。,3.命名段,产生命名段伪指令格式:,符号.usect“段名”,字数.sect“段名”,可以产生多达32767个不同的命名段。段名可长达200个字符。,2023年6月27日,DSP原理及应用,14,第4章 汇编语言程序开发工具,经汇编后,得列表文件(部分):,2*3*汇编一个初始化表到.data段*4*5 0000.data6 0000 0044
8、 coeff.word 044h,055h,066h 0001 0055 0002 00667*8*在.bss段中为变量保留空间*9*10 0000.bss buffer,811*12*仍然在.data 段中*13*14 0003 0456 prt.word 0456h,5 0000.data,6 0000 0044 coeff.word 044h,055h,066h,10 0000.bss buffer,8,14 0003 0456 prt.word 0456h,.data,0044,0055,0066,.bss,没有数据保留8个字,0456,2023年6月27日,DSP原理及应用,15,第
9、4章 汇编语言程序开发工具,15*16*汇编代码到.text段*17*18 0000.text19 0000 100d add:LD 0Dh,A20 0001 f010 aloop:SUB#1,A 0002 0001 21 0003 f842 BC aloop,AGEQ 0004 0001 22*23*汇编另一个初始化表到.data 段*24*25 0004.data 26 0004 00cc ivals.word 0CCh,0DDh,0EEh 0005 00dd 0006 00ee27*28*为更多的变量定义另一个段*29*30 0000 var2.usect“newvars”,2 31 0
10、001 inbuf.usect“newvars”,8,.text,18 0000.text,19 0000 100d add:LD 0Dh,A,100d,20 0001 f010 aloop:SUB#1,A,f010,0001,21 0003 f842 BC aloop,AGEQ,f842,0001,25 0004.data,26 0004 00cc ivals.word 0CCh,0DDh,0EEh,.data,00cc,00dd,00ee,30 0000 var2.usect“newvars”,2,newvars,保留2个字,31 0001 inbuf.usect“newvars”,8,保
11、留8个字,2023年6月27日,DSP原理及应用,16,第4章 汇编语言程序开发工具,32*33*汇编更多代码到.text段*34*35 0005.text 36 0005 110a mpy:LD 0Ah,B 37 0006 f166 mloop MPY#0Ah,B 0007 000a 38 0008 f868 BC mloop,BNOV 0009 0006 39*40*为中断向量.vectors定义一个自定义段*41*42 0000.sect“vectors”43 0000 0044.word 044h,088h 0001 0088,35 0005.text,.text,36 0005 11
12、0a mpy:LD 0Ah,B,110a,37 0006 f166 mloop MPY#0Ah,B,f168,000a,38 0008 f868 BC mloop,BNOV,f868,0006,42 0000.sect“vectors”,vectors,43 0000 0044.word 044h,088h,0044,0088,2023年6月27日,DSP原理及应用,17,第4章 汇编语言程序开发工具,4.3.3 链接器对段的处理,链接器有2条伪指令支持上述任务:,MEMORY伪指令用来定义目标系统的存储器配置空间,包括对存储器各部分命名,以及规定它们的起始地址和长度。SECTIONS伪指令用
13、来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位置,也可用于指定子段。若未使用伪指令,则链接器将使用目标处理器默认的方法将段放入存储空间。,2023年6月27日,DSP原理及应用,18,第4章 汇编语言程序开发工具,默认的存储器分配过程:,.text,.text1,.text2,.data,.data1,.data2,.bss,.bss1,.bss2,table,table_1,table_2,u_vars1,u_vars1,u_vars2,FFT,FFT,没有使用,没有配置,没有配置,没有使用,2023年6月27日,DSP原理及应用,19,第4章 汇编语言程序开发工具,4.4.
14、3 汇编伪指令,1定义段的伪指令,用于定义相应的汇编语言程序的段。,2023年6月27日,DSP原理及应用,20,第4章 汇编语言程序开发工具,【例4.4.2】段伪指令的使用。,1*2*开始汇编到.text段*3*4 000000.text 5 000000 0001.word 1,2 000001 0002 6 000002 0003.word 3,4 000003 0004 7,1定义段的伪指令,;定义文本段;初始化值为1,2;初始化值为3,4,2023年6月27日,DSP原理及应用,21,第4章 汇编语言程序开发工具,【例4.4.2】段伪指令的使用。,8*9*开始汇编到.data段*10
15、*11 000000.data 12 000000 0009.word 9,10 000001 000A 13 000002 000B.word 11,12 000003 000C 14,1定义段的伪指令,;定义数据段;初始化值为9,10;初始化值为11,12,2023年6月27日,DSP原理及应用,22,第4章 汇编语言程序开发工具,【例4.4.2】段伪指令的使用。,15*16*开始汇编到命名的初始化段*17*var_defs*18*19 000000.sect“var_defs”20 000000 0011.word 17,18 000001 0012 21,1定义段的伪指令,;定义命名段
16、;初始化值为17,18,2023年6月27日,DSP原理及应用,23,第4章 汇编语言程序开发工具,【例4.4.2】段伪指令的使用。,22*23*再继续汇编到.data段*24*25 000004.data 26 000004 000D.word 13,14 000005 000E 27 000000.bss sym,1928 000006 000F.word 15,16 000007 001029,1定义段的伪指令,;继续汇编数据段;初始化值为13,14;定义未初始化段,保留19个空间;仍然在.data段中;初始化值为15,16,2023年6月27日,DSP原理及应用,24,第4章 汇编语言
17、程序开发工具,【例4.4.2】段伪指令的使用。,30*31*再继续汇编到.text段*32*33 000004.text 34 000004 0005.word 5,6 000005 0006 35 000000 usym.usect“xy”,2036 000006 0007.word 7,8 000007 0008,1定义段的伪指令,;继续汇编文本段;初始化值为5,6;定义xy段,保留20个空间;仍然在.text段中;初始化值为7,8,2023年6月27日,DSP原理及应用,25,第4章 汇编语言程序开发工具,4.4.3 汇编伪指令,2初始化常数的伪指令,用于为当前的段汇编常数值。,2023
18、年6月27日,DSP原理及应用,26,第4章 汇编语言程序开发工具,2初始化常数的伪指令,2023年6月27日,DSP原理及应用,27,第4章 汇编语言程序开发工具,【例4.4.3】比较.byte,.int,.long,.xlong,.float,.xfloat,.word和.string伪指令。,源程序:.byte 0AAh,0BBh.word 0CCCh.xlong 0EEEEFFFh.long 0EEEEFFFFh.int 0DDDDh.xfloat 1.99999.float 1.99999.string“help”,.byte:将一个或多个8位值放入当前段的连续字中。,.word:将
19、一个或多个16位值放入当前段的连续字中。,.xlong:将32位值放入当前段的2个连续的字中,先存最高有效位。,.long:将32位值放入当前段的2个连续的字中,先存最高有效位。,.int:将一个或多个16位值放入当前段的连续的字中。,.xfloat:初始化单精度(32位)浮点数,并保存在当前段的两个连续的字中。,.float:初始化单精度(32位)浮点数,并保存在当前段的两个连续的字中。,.string:将一个或多个字符串中的8位字符放入当前段中。,2023年6月27日,DSP原理及应用,28,第4章 汇编语言程序开发工具,4.4.4 宏定义和宏调用,C54x汇编器支持宏指令语言。如果程序中
20、有一段程序需要执行多次,就可以把这一段程序定义(宏定义)为一条宏指令,然后在需要重复执行这段程序的地方调用这条宏指令(宏调用)。利用宏指令,可以使源程序变得简短。,宏的使用分以下3个步骤:定义宏 在调用宏时,必须首先定义宏;调用宏 在定义宏之后,可在源程序中调用宏;扩展宏 在源程序调用宏指令时,汇编器将对 宏指令进行扩展。,2023年6月27日,DSP原理及应用,29,第4章 汇编语言程序开发工具,宏定义的格式:,macname.macro parameter 1,parameter n 宏程序语句或宏伪指令.mexit.endm,macname:宏程序名称,必须将名称放在源程序标号域。.ma
21、cro:用来说明该语句为宏定义的第一行伪指令,必须放在助记符操作码区域。parameters:为任选的替代参数,作为宏指令的操作数。宏程序语句:每次宏调用时要执行的指令或汇编命令。宏伪指令:用于控制宏指令展开的命令。.mexit:相当于一条跳到.endm语句。.endm:结束宏定义。,2023年6月27日,DSP原理及应用,30,第4章 汇编语言程序开发工具,【例4.4.7】宏定义、宏调用和宏展开举例,1*2*add3 4*5*ADDRP=P1+P2+P3 6 7 add3.macro P1,P2,P3,ADDRP 8 9 LD P1,A 10 ADD P2,A 11 ADD P3,A 12
22、STL A,ADDRP 13.endm 14,第714行 定义宏:add3 4个参数:P1 P2 P3 ADDRP,2023年6月27日,DSP原理及应用,31,第4章 汇编语言程序开发工具,【例4.4.7】宏定义、宏调用和宏展开举例,15 16.global abc,def,ghi,adr 17 18 000000 add3 abc,def,ghi,adr1 1 000000 1000!LD abc,A1 000001 0000!ADD def,A1 000002 0000!ADD ghi,A1 000003 8000!STL A,adr,第18行 调用宏:add3 所用变量:abc def ghi adr,共4行 扩展宏 将变量传递给参数 abc P1 def P2 ghi P3 adr ADDRP,