第4章软件开发 .ppt

上传人(卖家):hyngb9260 文档编号:6160316 上传时间:2023-06-04 格式:PPT 页数:113 大小:551.50KB
下载 相关 举报
第4章软件开发 .ppt_第1页
第1页 / 共113页
第4章软件开发 .ppt_第2页
第2页 / 共113页
第4章软件开发 .ppt_第3页
第3页 / 共113页
第4章软件开发 .ppt_第4页
第4页 / 共113页
第4章软件开发 .ppt_第5页
第5页 / 共113页
点击查看更多>>
资源描述

1、第4章 TMS320C54x的软件开发第4章 TMS320C54x的软件开发4.1 TMS320C54x软件开发过程 4.2 汇编语言程序的编写方法4.3 汇编伪指令和宏指令4.4 公共目标文件格式COFF4.5 汇编源程序的编辑、汇编和链接过程4.6 汇编语言程序设计第4章 TMS320C54x的软件开发4.1 TMS320C54x软件开发过程软件开发过程 C编译器编译器(C compiler)汇编源程序汇编源程序 汇编器汇编器(assembler)COFF目标文件目标文件 源文件中包括汇编语言指令、汇编伪指令以及宏指令。源文件中包括汇编语言指令、汇编伪指令以及宏指令。链接器链接器(link

2、er)可执行的可执行的COFF目标模块目标模块 调整对符号的引用,并解决外部引用的问题。它也可以调整对符号的引用,并解决外部引用的问题。它也可以接收来自文档管理器中的目标文件,以及链接以前运行时所接收来自文档管理器中的目标文件,以及链接以前运行时所生成的输出模块。生成的输出模块。调试工具调试工具 C54x 通过软件仿真程序或硬件在线仿真器的调试,最后将程通过软件仿真程序或硬件在线仿真器的调试,最后将程序加载到用户的应用系统。序加载到用户的应用系统。第4章 TMS320C54x的软件开发.asm.c C54x 归档器 宏 库 归档器 目标文件库 Hex 格式转换 EPROM 编程器 C 编译器

3、汇编源文件 汇编器 COFF 目标文件 链接器 可执行 COFF 文件 绝对列表 交叉引用列表 助记符指令 转换为 代数指令 汇编源文件 建立可用库 运行支持库 调试工具 宏源文件 C 源文件 .obj.out 第4章 TMS320C54x的软件开发图中非阴影部分为任选:图中非阴影部分为任选:归档器归档器(archiver)将一组文件将一组文件(源文件或目标文件源文件或目标文件)集中为一个集中为一个文档文件库。文档文件库。助记符指令到代数式指令翻译器助记符指令到代数式指令翻译器(mnemonic to algebraic translator utility)建库工具建库工具(library-

4、build utility)用来建立用户自己用用来建立用户自己用C语言编语言编写的支持运行库函数。写的支持运行库函数。十六进制转换工具十六进制转换工具(hex conversion utility)绝对地址列表器绝对地址列表器(absolute lister)交叉引用列表器交叉引用列表器(cross-reference lister)第4章 TMS320C54x的软件开发4.2 汇编语言程序的编写方法汇编语言程序的编写方法4.2.1 汇编语言源程序举例汇编语言源程序举例包含标号区、指令区、操作数区和注释区包含标号区、指令区、操作数区和注释区4部分(参看部分(参看3.1)指令区可以写助记符指令、

5、汇编伪指令或宏指令。指令区可以写助记符指令、汇编伪指令或宏指令。助记符指令一般用大写助记符指令一般用大写;汇编伪指令和宏指令,以汇编伪指令和宏指令,以“.”号开始,且为小写。号开始,且为小写。【例【例4.1】汇编语言程序编写方法举例汇编语言程序编写方法举例 第4章 TMS320C54x的软件开发 .title “example.asm”;用双引号括起的源程序名用双引号括起的源程序名 .mmregs ;定义存储器映射寄存器的替代符号定义存储器映射寄存器的替代符号 STACK.usect “STACK”,10H ;在数据存储器中留出在数据存储器中留出16个单元作为个单元作为 ;堆栈区,名为堆栈区,

6、名为STACK .bss a,4 ;在数据存储器中空出在数据存储器中空出9个存储单元存放个存储单元存放 .bss x,4 ;变量;变量a1,a2,a3,a4,x1,x2,x3,x4和和y.bss y,1 .def start ;在此模块中定义,可为别的模块引用在此模块中定义,可为别的模块引用 .data ;紧跟其后的是已初始化数据紧跟其后的是已初始化数据 table:.word 1,2,3,4 ;在程序存储器标号为在程序存储器标号为table开始的开始的8个单个单 .word 8,6,4,2 ;元存放初始化数据;元存放初始化数据 BACK第4章 TMS320C54x的软件开发.text ;紧跟

7、其后的是汇编语言程序正文紧跟其后的是汇编语言程序正文 start:STM#0,SWWSR ;adds no wait statesSTM#STACK+10H,SP ;set stack pointer STM#a,AR1 ;AR1 point to aRPT#7 ;move 8 valuesMVPD table,*AR1+;from program memory into ;data memoryCALL SUM ;call SUM subroutineend:B endBACK第4章 TMS320C54x的软件开发SUM:STM#a,AR3 ;The subroutine implement

8、STM#x,AR4 ;multiply accumulateRPTZ A,#3MAC *AR3+,*AR4+,ASTL A,yRET.end ;结束汇编,汇编器将忽略;结束汇编,汇编器将忽略 ;此后的任何源;此后的任何源 语句语句 第4章 TMS320C54x的软件开发 4.2.2 汇编语言常量汇编语言常量C54x汇编器支持汇编器支持7种类型的常量:种类型的常量:1.二进制整数二进制整数:最多由最多由16个二进制数字组成,其后缀为个二进制数字组成,其后缀为B(或或b).2.八进制整数八进制整数:最多由最多由6个八进制数字组成,其后缀为个八进制数字组成,其后缀为Q(或或q)。3.十进制整数十进制

9、整数:由十进制数字串组成由十进制数字串组成 范围从范围从3276832767或或065535 4.十六进制整数十六进制整数:最多由最多由4个十六进制数字组成,包括个十六进制数字组成,包括09和字符和字符AF及及af;必须由十进制值必须由十进制值09开始开始;其后缀为其后缀为H(或或h),也可以由前缀也可以由前缀(0 x)标明。标明。如如:78h、0Fh、37Ach、0 x37AC 第4章 TMS320C54x的软件开发5.浮点数常量浮点数常量:由整数、小数点、小数部分和指数部分组成由整数、小数点、小数部分和指数部分组成 +(-)nnn.nnnE(e)+(-)nnn 整数整数 小数小数 指数指数

10、 有效的浮点数常量有效的浮点数常量:3.0、3.14、-0.314e13、+314.59e-2 注:小数点必须有,例如:注:小数点必须有,例如:3e5无效,无效,3.e5有效。有效。6.字符常量字符常量:由单引号括住的一个或两个字符组成。它在机器内由单引号括住的一个或两个字符组成。它在机器内部由部由8位位ASCII码来表示一个字符。码来表示一个字符。有效的字符常量:有效的字符常量:a(内部表示为内部表示为61h),D(内部表示为内部表示为2744h)7.汇编时常量汇编时常量:用用.set伪指令给一个符号赋值。伪指令给一个符号赋值。例如:例如:shift .set 3 ;将常数值将常数值3赋给符

11、号赋给符号shift LD#shift,A ;再将再将3赋给赋给A累加器累加器 注意:汇编器在内部把常量作为注意:汇编器在内部把常量作为32位量。常量不能进行符号位量。常量不能进行符号扩展。扩展。第4章 TMS320C54x的软件开发4.2.3 汇编源程序中的字符串汇编源程序中的字符串 字符串字符串(character strings)是包括在双引号内的一串字符。是包括在双引号内的一串字符。字符串的最大长度是变化的,由要求字符串的伪指令所规定。字符串的最大长度是变化的,由要求字符串的伪指令所规定。每个字符在内部用每个字符在内部用8位位ASCII码表示。码表示。以下是字符串的以下是字符串的例子例

12、子:“sample program”定义了一个长度为定义了一个长度为14的字符串:的字符串:sample progran;“PLAN“C”定义了一个长度为定义了一个长度为7的字符串:的字符串:PLAN“C”。第4章 TMS320C54x的软件开发4.2.4 汇编源程序中的符号汇编源程序中的符号 符号可用于符号可用于标号标号、常量和替代其他字符。、常量和替代其他字符。符号名最多可为符号名最多可为32位字符数字串位字符数字串(AZ、az、09、_和和$),第一位不能是数字,字符间不能有空格;第一位不能是数字,字符间不能有空格;符号对大小写敏感,如汇编器将符号对大小写敏感,如汇编器将ABC、Abc、

13、abc认作不同认作不同的符号,用的符号,用-c选项可以使汇编器不区分大小写;选项可以使汇编器不区分大小写;符号只有在汇编程序中定义后才有效,除非使用符号只有在汇编程序中定义后才有效,除非使用.global伪指伪指令声明才是一个外部符号。令声明才是一个外部符号。DSP内部的寄存器名和内部的寄存器名和$等都是汇编器已预先定义的全局符等都是汇编器已预先定义的全局符号。号。第4章 TMS320C54x的软件开发4.2.5 汇编源程序中的表达式汇编源程序中的表达式 表达式是由运算符隔开的常量、符号或常量和符号序列。表达式是由运算符隔开的常量、符号或常量和符号序列。表达式值的有效范围从表达式值的有效范围从

14、3276832767。影响表达式运算顺序的因素:()、优先级、同级内。影响表达式运算顺序的因素:()、优先级、同级内。1.表达式运算符及优先级表达式运算符及优先级:表:表4-12.表达式溢出表达式溢出 当算术运算在汇编中被执行时,汇编器将检查溢出状态。当算术运算在汇编中被执行时,汇编器将检查溢出状态。溢出时,给出警告。溢出时,给出警告。但在作乘法时,不检查溢出状态。但在作乘法时,不检查溢出状态。3.表达式的合法性表达式的合法性 由于符号的属性不同由于符号的属性不同(定义不同定义不同)使表达式存在合法性问题。使表达式存在合法性问题。符号的属性分为符号的属性分为3种:外部的、可重定位的和绝对的。种

15、:外部的、可重定位的和绝对的。含有乘、除法的表达式中只能使用绝对符号。含有乘、除法的表达式中只能使用绝对符号。第4章 TMS320C54x的软件开发4.3 汇编伪指令和宏指令汇编伪指令和宏指令4.3.1 汇编伪指令汇编伪指令(又称为汇编命令又称为汇编命令)作用:作用:给程序提供数据并且控制汇编过程。给程序提供数据并且控制汇编过程。表示:表示:指令区以指令区以“.”号开始且为小写的为汇编伪指令。号开始且为小写的为汇编伪指令。指令数目:指令数目:C54x汇编器共有汇编器共有64条条汇编伪指令。汇编伪指令。汇编伪指令用以形成常数和变量,当用它控制汇编伪指令用以形成常数和变量,当用它控制汇编和链接过程

16、时,可以不占存储空间。汇编和链接过程时,可以不占存储空间。第4章 TMS320C54x的软件开发汇编伪指令分成汇编伪指令分成8类类(根据功能根据功能):1.对各种段进行定义的伪指令;对各种段进行定义的伪指令;2.对常数对常数(数据和存储器数据和存储器)进行初始化的伪指令;进行初始化的伪指令;3.调整调整SPC(段寄存器段寄存器)的指令;的指令;4.输出列表文件格式伪指令;输出列表文件格式伪指令;5.引用其他文件的伪指令;引用其他文件的伪指令;6.控制条件汇编的伪指令;控制条件汇编的伪指令;7.在汇编时定义符号的伪指令;在汇编时定义符号的伪指令;8.执行其他功能的伪指令。执行其他功能的伪指令。第

17、4章 TMS320C54x的软件开发1.段定义伪指令(段定义伪指令(5条)条)作用:作用:把汇编语言程序的各个部分划分在适当的段中。把汇编语言程序的各个部分划分在适当的段中。.bss 为为未初始化未初始化的变量保留空间;的变量保留空间;.data 通常包含了通常包含了初始化的数据初始化的数据;.text 该段包含了该段包含了可执行的代码可执行的代码;.sect 定义定义已初始化已初始化的的带命名段带命名段,其后的数据存入该段;,其后的数据存入该段;例如:例如:.sect “.vectors”.usect 在一个在一个未初始化未初始化的的有命名的段中有命名的段中为变量保留空间。为变量保留空间。段

18、是通过段是通过叠加方式叠加方式来建立的。例如在汇编器第一次遇到来建立的。例如在汇编器第一次遇到.data伪指令时,伪指令时,data指令后面的语句都被汇编在指令后面的语句都被汇编在.data段中段中(直到汇编器遇到直到汇编器遇到.text和和.sect伪指令为伪指令为止止)。如果后来又在其他的段中遇到。如果后来又在其他的段中遇到.data指令,其后的语句继续加到指令,其后的语句继续加到.data段中。段中。这样虽然程序中是多个这样虽然程序中是多个.data段分散在各处,但汇编器只创建一个段分散在各处,但汇编器只创建一个.data段,它可段,它可以连续地被分配到内存中。以连续地被分配到内存中。第

19、4章 TMS320C54x的软件开发2.常数初始化伪指令(共有常数初始化伪指令(共有24条)条).int和和.word 把一个或多个把一个或多个16位数存放到当前段的连续字位数存放到当前段的连续字中。中。.int为无符号整型量,为无符号整型量,.word为带符号整型量。为带符号整型量。.byte 把一个或多个把一个或多个8位的值放入当前段的连续字中。该指令类位的值放入当前段的连续字中。该指令类似于似于.word,不同之处在于,不同之处在于.word中的每个值的宽度限制为中的每个值的宽度限制为16位。位。.float和和.xfloat 计算以计算以IEEE格式表示的单精度格式表示的单精度(32位

20、位)浮点数,浮点数,并存放在当前段的连续字中,高位先存。并存放在当前段的连续字中,高位先存。.float能自动按域的能自动按域的边界排列,边界排列,.xfloat不能。不能。.long和和.xlong 把把32位数存放到当前段连续的两个字中,高位字位数存放到当前段连续的两个字中,高位字先存。先存。.long能自动按长字的边界排列,能自动按长字的边界排列,.xlong 却不能。却不能。.string和和.pstring 把把8位的字符从一个或多个字符串中传送到当位的字符从一个或多个字符串中传送到当前段中。前段中。第4章 TMS320C54x的软件开发【例4.2】1000000aa .byte 0

21、AAh,0BBh 000100bb 200020ccc .word 0CCCh 300030eee .xlong 0EEEEFFFh 0004efff 40006eeee .long 0EEEEFFFFh 0007ffff 50008dddd .int 0DDDDh 600093fff .xfloat 1.99999 000a ffac 7000c 3fff .float 1.99999 000d ffac 8000e 0068 .string “help”000f 0065 0010 006c 00110070第4章 TMS320C54x的软件开发3.段程序计数器段程序计数器(SPC)定位指

22、令定位指令.align 使使SPC对准对准1字字(16位位)128字的边界,这保证了紧接着字的边界,这保证了紧接着该指令的代码从一个整字或页的边界开始。如果该指令的代码从一个整字或页的边界开始。如果SPC已经已经定位于选定的边界,它就不会增加了。定位于选定的边界,它就不会增加了。.align伪指令的操作伪指令的操作数必须等于数必须等于20216之间的一个之间的一个2的幂值的幂值(尽管超过尽管超过27的值没有的值没有意义意义)。不同的操作数代表了不同的边界定位要求。不同的操作数代表了不同的边界定位要求。操作数为操作数为1是让是让SPC对准字边界;对准字边界;例如:例如:.align 1 操作数为

23、操作数为2是让是让SPC对准长字对准长字(偶地址偶地址)边界;边界;操作数为操作数为128是让是让SPC对准页边界;对准页边界;不带操作数时,其默认值为不带操作数时,其默认值为128,即对准页边界。,即对准页边界。第4章 TMS320C54x的软件开发4.输出列表格式伪指令输出列表格式伪指令.title 为汇编器提供一个打印在每一页顶部的标题。为汇编器提供一个打印在每一页顶部的标题。.list/.nolist 打开打开/关闭列表文件。使用关闭列表文件。使用.nolist可禁止汇编器可禁止汇编器列出列表文件中选定的源语句,使用列出列表文件中选定的源语句,使用.list则允许列表。则允许列表。.m

24、list/.mnolist 源代码中包含着宏扩展和循环块的列表。源代码中包含着宏扩展和循环块的列表。这两条指令用来打开这两条指令用来打开/关闭列表。使用关闭列表。使用.mlist把所有的宏把所有的宏扩展和循环块打印到列表中,用扩展和循环块打印到列表中,用.mnolist则禁止列入列则禁止列入列表。表。.sslist/.ssnolist 分别允许分别允许/禁止替换符号扩展到列表,在调禁止替换符号扩展到列表,在调试替换符号的扩展时很有用。试替换符号的扩展时很有用。.page 在输出列表中产生新的一页。在输出列表中产生新的一页。.option 控制列表文件中的某些特性。控制列表文件中的某些特性。第4

25、章 TMS320C54x的软件开发5.引用其他文件的伪指令引用其他文件的伪指令.def 确认一个在当前模块中定义的且能被其他模块使用的符确认一个在当前模块中定义的且能被其他模块使用的符号,汇编器把这个符号存入符号表中。号,汇编器把这个符号存入符号表中。.ref 确认一个在当前模块中使用但在其他段中定义的符号。确认一个在当前模块中使用但在其他段中定义的符号。汇编器把这个符号标注成一个未定义的外部符号,且把它汇编器把这个符号标注成一个未定义的外部符号,且把它装入目标符号表中,以便链接器能还原它的定义。装入目标符号表中,以便链接器能还原它的定义。.global 表明一个外部符号,使其他模块在连接时可

26、以使用。表明一个外部符号,使其他模块在连接时可以使用。如果在当前段定义了该符号,那么该符号就可以被其他模如果在当前段定义了该符号,那么该符号就可以被其他模块使用,与块使用,与.def功能相同;如果在当前段没有定义该符号,功能相同;如果在当前段没有定义该符号,则使用了其他模块定义的符号,与则使用了其他模块定义的符号,与.ref功能相同。一个未定功能相同。一个未定义的全局符号只有当它在程序中使用的时候,链接器才对义的全局符号只有当它在程序中使用的时候,链接器才对其进行处理。其进行处理。第4章 TMS320C54x的软件开发.copy/.include 伪指令告诉汇编器开始从其他文件中读源语句。伪指

27、令告诉汇编器开始从其他文件中读源语句。当汇编读完以后,继续从当前文件中读源语句。从当汇编读完以后,继续从当前文件中读源语句。从.copy文文件中读的语句会打印在列表中,而从件中读的语句会打印在列表中,而从.include文件中读的文件中读的语句不会打印在列表中。语句不会打印在列表中。.mlib 向汇编器提供一个包含了宏定义的文档库的名称。当向汇编器提供一个包含了宏定义的文档库的名称。当汇编器见到一个在当前库中没有定义的宏,就在汇编器见到一个在当前库中没有定义的宏,就在.mlib确认确认的宏库中查找。的宏库中查找。第4章 TMS320C54x的软件开发6.控制条件汇编的伪指令控制条件汇编的伪指令

28、.if/.elseif/.else/.endif 这些指令告诉汇编器,根据表达式的这些指令告诉汇编器,根据表达式的值值条件汇编条件汇编一块代码。一块代码。.if 表示一个条件块的开始,如果表示一个条件块的开始,如果条件为真就汇编紧接着的代码;条件为真就汇编紧接着的代码;.elseif是表示如果是表示如果.if的条的条件为假,而件为假,而.elseif的条件为真,就汇编紧接着的代的条件为真,就汇编紧接着的代码;码;.endif结束该条件块。结束该条件块。.loop/.break/.endloop 告诉汇编器按照表达式的值告诉汇编器按照表达式的值循环汇编循环汇编一块代码。一块代码。.loop标注一

29、块循环代码的开始;标注一块循环代码的开始;.break告诉汇告诉汇编器当表达式为假时,继续循环汇编,当表达式为真时,编器当表达式为假时,继续循环汇编,当表达式为真时,立刻转到立刻转到.endloop后的代码去执行;后的代码去执行;.endloop标注一个可标注一个可循环块的末尾。循环块的末尾。第4章 TMS320C54x的软件开发7.在汇编时定义符号的伪指令在汇编时定义符号的伪指令作用:作用:汇编时的定义符号指令是使有意义的符号名与常数值或字符串相等汇编时的定义符号指令是使有意义的符号名与常数值或字符串相等同。同。.asg 规定一个规定一个字符串字符串与一个替代符号相等,并将其存放在替代符号表

30、中。与一个替代符号相等,并将其存放在替代符号表中。当汇编器遇到一个替代符号,就用对应的字符串来代替这个符号。替代当汇编器遇到一个替代符号,就用对应的字符串来代替这个符号。替代符号可以重新定义。符号可以重新定义。例如:例如:.asg AR1,Counter.eval 计算一个计算一个表达式的值表达式的值并把结果传送到与一个替代符号等同的字符串中。并把结果传送到与一个替代符号等同的字符串中。该指令在处理计数器时非常有用。该指令在处理计数器时非常有用。.label 定义一个定义一个专门的符号专门的符号以表示当前段内装入时的地址,而不是运行时的以表示当前段内装入时的地址,而不是运行时的地址。地址。.s

31、et/.equ 把一个把一个常数值常数值等效成一个符号,存放在符号表中,且不能被清除。等效成一个符号,存放在符号表中,且不能被清除。例如:例如:shift .set 3 第4章 TMS320C54x的软件开发8.其他方面的汇编伪指令其他方面的汇编伪指令.end 结束汇编。它是一个程序的最后一个源语句。结束汇编。它是一个程序的最后一个源语句。.mmregs 定义存储器映射寄存器的替代符号。对于所有的存定义存储器映射寄存器的替代符号。对于所有的存储器映射寄存器,使用该指令和执行一个储器映射寄存器,使用该指令和执行一个.set是一样的。是一样的。.algebraic 告诉编译器程序包含了算术汇编源代

32、码。如果没有告诉编译器程序包含了算术汇编源代码。如果没有使用使用-mg编译器选项,该指令必须出现在文件的第一行。编译器选项,该指令必须出现在文件的第一行。.netblock 使局部标号复位。局部标号是使局部标号复位。局部标号是$n或或name?形式的符形式的符号。当它们出现在标号域中时,就对它们进行定义。号。当它们出现在标号域中时,就对它们进行定义。局部局部标号标号是可以用来作为是可以用来作为jump指令操作数的临时标指令操作数的临时标号。号。.netblock在局部标号使用后对其复位,从而限制它的在局部标号使用后对其复位,从而限制它的范围。范围。.version 决定指令所运行的处理器。每一

33、种决定指令所运行的处理器。每一种C54x芯片都有自芯片都有自己的值。己的值。第4章 TMS320C54x的软件开发4.3.2 宏及宏的使用宏及宏的使用作用:作用:程序中的子程序往往要多次使用,此时,可将该子程序程序中的子程序往往要多次使用,此时,可将该子程序定义为一个宏。在程序反复执行该子程序时就调用这个宏,定义为一个宏。在程序反复执行该子程序时就调用这个宏,从而避免多次重复使用该子程序的源语句。从而避免多次重复使用该子程序的源语句。宏语言的功能包括:宏语言的功能包括:定义自己的宏和重新定义已存在的宏;定义自己的宏和重新定义已存在的宏;简化较长的或复杂的汇编代码;简化较长的或复杂的汇编代码;访

34、问归档器创建的宏库;访问归档器创建的宏库;处理一个宏中的字符串;处理一个宏中的字符串;控制宏扩展列表。控制宏扩展列表。如果想多次调用一个宏,而每次使用的是不同的参数,可以如果想多次调用一个宏,而每次使用的是不同的参数,可以在宏里指定参数。在宏里指定参数。宏的使用可分为宏的使用可分为3个过程:定义宏、调用宏和展开宏。个过程:定义宏、调用宏和展开宏。第4章 TMS320C54x的软件开发1.定义宏:定义宏:有两种方法有两种方法(1)宏可以在源文件起始处或者在宏可以在源文件起始处或者在.include/.copy文件中定义。文件中定义。格式格式:宏名宏名 .macro参数参数1,参数参数n 汇编语句

35、或宏指令汇编语句或宏指令 .mexit .endm宏名宏名定义的宏名如果与某条指令或已有的宏定义重名,就将代替它们;定义的宏名如果与某条指令或已有的宏定义重名,就将代替它们;汇编语句汇编语句每次调用宏时执行的汇编语言指令或汇编伪指令;每次调用宏时执行的汇编语言指令或汇编伪指令;宏指令宏指令用来控制展开宏;用来控制展开宏;.mexit功能类似于功能类似于goto.endm语句,该项为可选项;语句,该项为可选项;.endm结束宏定义;结束宏定义;注释注释注释前加一感叹号注释前加一感叹号“!”,表示该注释包括在宏定义中,而又不,表示该注释包括在宏定义中,而又不出现在宏展开中;若注释前加星号或分号,表

36、示让注释出现在宏展开出现在宏展开中;若注释前加星号或分号,表示让注释出现在宏展开中。中。第4章 TMS320C54x的软件开发(2)在宏库中定义宏在宏库中定义宏宏库由归档器创建,是采用归档格式的文件集合。宏库由归档器创建,是采用归档格式的文件集合。归档文件归档文件(宏库宏库)里的每一个文件都包含着一个与文件名相对里的每一个文件都包含着一个与文件名相对应的宏定义应的宏定义;宏名与文件名必须相同宏名与文件名必须相同;宏库中的文件必须是未被汇编过的源文件,其扩展名宏库中的文件必须是未被汇编过的源文件,其扩展名是是.asm。可以使用可以使用.mlib指令访问宏库。其语法为指令访问宏库。其语法为 .ml

37、ib 宏库文件名宏库文件名第4章 TMS320C54x的软件开发2.调用宏调用宏 在源程序中通过把宏名作为操作数来调用宏。在源程序中通过把宏名作为操作数来调用宏。其格式为其格式为 宏名宏名 参数参数1,参数参数n3.展开宏展开宏当源程序调用宏时,编译器会将宏展开。当源程序调用宏时,编译器会将宏展开。在展开期间,编译器把自变量传递给宏参数,用宏定义来在展开期间,编译器把自变量传递给宏参数,用宏定义来代替宏调用语句并对源代码进行编译。代替宏调用语句并对源代码进行编译。在默认状态下,宏展开会在指令列表文件中列出,可以使在默认状态下,宏展开会在指令列表文件中列出,可以使用用.mnolist指令关掉宏指

38、令列表。指令关掉宏指令列表。第4章 TMS320C54x的软件开发【例【例4.3】宏定义、宏调用和宏展开举例宏定义、宏调用和宏展开举例(部分程序部分程序)。DAT0.set 60h ;把一个常数值等效成一个符号;把一个常数值等效成一个符号DAT1.set 61h ;表示地址;表示地址DAT2.set 62hDAT3.set 63h .textADD3.macro P1,P2,P3,ADDRP;宏定义宏定义:三数相加三数相加 ;ADDRP=P1+P2+P3LD P1,AADD P2,AADD P3,ASTL A,ADDRP.endm第4章 TMS320C54x的软件开发ST#0034h,DAT0

39、 ;参数赋值参数赋值ST#0243h,DAT1ST#1230h,DAT2ADD3 DAT0,DAT1,DAT2,DAT3;宏调用宏调用:DAT3=;DAT0+DAT1+DAT2NOP.end第4章 TMS320C54x的软件开发4.4 公共目标文件格式公共目标文件格式COFF COFF(Common Object File Format,COFF):汇:汇编器和链接器所创建的目标文件编器和链接器所创建的目标文件。COFF的核心概念:的核心概念:使用使用代码块(段)代码块(段)和和数据块数据块(段)(段)编程,而不是指令或数据简单的顺序编写。编程,而不是指令或数据简单的顺序编写。采用段形式的优缺

40、点:采用段形式的优缺点:更利于模块化编程,管理代码段和目标系统存储器更灵活更利于模块化编程,管理代码段和目标系统存储器更灵活不必为程序代码或变量指定目标地址,这为程序编写和程序移植提供了不必为程序代码或变量指定目标地址,这为程序编写和程序移植提供了极大的方便;极大的方便;能与系统存储单元充分配合;能与系统存储单元充分配合;编译系统复杂;编译系统复杂;对编程人员要求高(需熟悉系统存储器结构、存储器映射方式)对编程人员要求高(需熟悉系统存储器结构、存储器映射方式)第4章 TMS320C54x的软件开发4.4.1 COFF文件中的段文件中的段 段段(Sections)是是COFF文件中最重要的概念。

41、文件中最重要的概念。段段就是在编写汇编语言源程序时,采用就是在编写汇编语言源程序时,采用的代码块或数据块,它占据存储器的某个连续的代码块或数据块,它占据存储器的某个连续空间。空间。在编写汇编语言源程序时,程序是按段组织的;在编写汇编语言源程序时,程序是按段组织的;每行汇编语句从属一个段,由伪指令标明该段每行汇编语句从属一个段,由伪指令标明该段的属性;的属性;一个目标文件中的每个段都是分开的和各不相一个目标文件中的每个段都是分开的和各不相同的。同的。第4章 TMS320C54x的软件开发1.所有的所有的COFF目标文件都包含以下目标文件都包含以下3种形式的段:种形式的段:.text 段段(此段通

42、常包含可执行代码此段通常包含可执行代码);.data段段(此段通常包含初始化数据此段通常包含初始化数据);.bss段段(此段通常为未初始化变量保留存储空间此段通常为未初始化变量保留存储空间)。2.此外,汇编器和链接器可以建立、命名和链接此外,汇编器和链接器可以建立、命名和链接自定自定义段义段。自定义段是程序员自己定义的段;自定义段是程序员自己定义的段;使用起来与使用起来与.data、.text以及以及.bss段类似;段类似;它的好处是在目标文件中与它的好处是在目标文件中与.data、.text以及以及.bss分分开汇编开汇编,链接时作为一个单独的部分分配到存储,链接时作为一个单独的部分分配到存

43、储器。器。有有2种形式:种形式:.sect 建立的自定义段是已初始化段建立的自定义段是已初始化段 .usect 建立的自定义段是未初始化段。建立的自定义段是未初始化段。第4章 TMS320C54x的软件开发.bss.data.text RAM EEPROM ROM 目标文件 目标存储器 汇编器汇编器根据伪指令用适当的段将各部分程序代码和数据根据伪指令用适当的段将各部分程序代码和数据连在一起,构成目标文件;连在一起,构成目标文件;链接器链接器分配存储单元,即把各个段重新定位到目标存储分配存储单元,即把各个段重新定位到目标存储器中。器中。图图4.2 目标文件中的段与目标存储器之间的关系目标文件中的

44、段与目标存储器之间的关系第4章 TMS320C54x的软件开发4.4.2 汇编器对段的处理汇编器对段的处理 汇编器对段的处理是通过段定义伪指令区分出汇编器对段的处理是通过段定义伪指令区分出各个段,且将各个段,且将段名相同的语句汇编在一起段名相同的语句汇编在一起。汇编器有汇编器有5个段定义伪指令支持该功能,这个段定义伪指令支持该功能,这5个伪指个伪指令是:令是:.bss,.usect,.text,.data,.sect如果汇编语言程序中一个段伪指令都没有用,汇编如果汇编语言程序中一个段伪指令都没有用,汇编器会把程序中的内容都汇编到器会把程序中的内容都汇编到.text段。段。汇编器对不同类型段的处

45、理不同。汇编器对不同类型段的处理不同。第4章 TMS320C54x的软件开发1.未初始化段未初始化段 未初始化段未初始化段(Uninitialized sections)由由.bss和和.usect伪指令建立。伪指令建立。未初始化段就是在目标存储器中的保留空间,以供程序运行未初始化段就是在目标存储器中的保留空间,以供程序运行过程中的变量作为临时存储空间使用。过程中的变量作为临时存储空间使用。在目标文件中,这些段中没有确切的内容,通常它们定位到在目标文件中,这些段中没有确切的内容,通常它们定位到RAM区。区。未初始化段分为默认的和命名的未初始化段分为默认的和命名的2种,其句法如下种,其句法如下

46、.bss 符号,字数符号,字数 符号符号 .usect“段名段名”,字数,字数 每调用每调用.bss伪指令一次,汇编器在相应段保留预留字数的空伪指令一次,汇编器在相应段保留预留字数的空间;间;每调用每调用.usect伪指令一次,汇编器在指定的命名段保留预留伪指令一次,汇编器在指定的命名段保留预留字数的空间。字数的空间。第4章 TMS320C54x的软件开发2.初始化段初始化段 初始化段初始化段(Initialized sections)由由.text、.data和和.sect伪指令建立,包含可执行代码或初始化数据。伪指令建立,包含可执行代码或初始化数据。这些段中的内容都在目标文件夹中,当加载程

47、序这些段中的内容都在目标文件夹中,当加载程序时再放到存储器中。时再放到存储器中。每个初始化段都是可以重新定位的,并且可以引每个初始化段都是可以重新定位的,并且可以引用其他段中所定义的符号。链接器在连接时自动用其他段中所定义的符号。链接器在连接时自动处理段间的相互引用。处理段间的相互引用。3种初始化伪指令的句法如下:种初始化伪指令的句法如下:.text 段起点段起点 .data 段起点段起点 .sect “段名段名”,段起点,段起点第4章 TMS320C54x的软件开发3.自定义段自定义段.usect和和.sect可以创建自定义的段。可以创建自定义的段。自定义段是用户自己创建的,可以同默认自定义

48、段是用户自己创建的,可以同默认的的.test、.data、.bss段一样使用,但它们之间是单段一样使用,但它们之间是单独汇编的。独汇编的。可为那些未初始化的、不在可为那些未初始化的、不在.bss段的变量保留空段的变量保留空间。间。.usect创建同创建同.bss段一样使用的自定义段,它段一样使用的自定义段,它在在RAM中为变量保留空间。中为变量保留空间。也可以汇编已初始化的、不在也可以汇编已初始化的、不在.data段中的数段中的数据,据,.sect创建像默认的创建像默认的.text和和.data一样的段,可包一样的段,可包含代码和数据,而且有可重定位的地址。含代码和数据,而且有可重定位的地址。

49、第4章 TMS320C54x的软件开发4.段程序计数器段程序计数器(SPC)汇编器为每个段都安排一个单独的段程序计数器汇编器为每个段都安排一个单独的段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。表示一个程序代码段或数据段内的当前地址。一开始,汇编器将每个一开始,汇编器将每个SPC置置0。当汇编器将程序。当汇编器将程序代码段或数据加到一个段内时,相应的代码段或数据加到一个段内时,相应的SPC就增加。就增加。如果继续对某个段汇编,则相应的如果继续对某个段汇编,则相应的SPC就在先前的就在先前的数值上继续增加。数值上继续增加。链接器在链接时要对每个段进行重新定位。链接器在链接

50、时要对每个段进行重新定位。第4章 TMS320C54x的软件开发【例【例4.4】段伪指令应用举例。段伪指令应用举例。1 0000 .data ;汇编至;汇编至.data段段2 0000 0011 coeff .word 011h,022h,033h 0001 0022 0002 00333 0000 .bss buffer,10 ;在;在.bss段为段为buffer变量变量 ;保留;保留10个字的空间个字的空间4 0003 0123 ptr .word 0123h ;继续汇编至;继续汇编至.data段段5 0000 .text ;汇编至;汇编至.text 段段6 0000 100f add:L

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第4章软件开发 .ppt)为本站会员(hyngb9260)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|