




已阅读5页,还剩81页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章汇编程序语法,TMS320的汇编程序包含:1.汇编语言指令(assemblylanguageinstructions)、2.汇编指令(伪指令,assemblerdirectives)、3.宏指令(macrodirectives)4.注释(comments)。,1汇编代码和数据到指定的段;2为未定义的变量保存空间;3控制列表文件;4分配存储器;5汇编条件块;6定义全局变量;7指定汇编器能得到的宏;8检查符号调试信息。,汇编伪指令为程序提供数据、控制汇编过程。所作的工作包括:,伪指令前为小数点。伪指令在运行时不起作用,汇编及调试时起作用。伪指令是实质是指挥控制汇编器汇编。,编译器,汇编.asm,不可执行.obj,可执行.out,汇编器,汇编语言工具,TMS320的汇编语言工具是一个软件包,其中包括:,1.汇编器2.连接器3.归档器4.交叉引用列表器5.十六进制转换公用程序,汇编器(Assembler),将汇编语言的源程序文件汇编成为机器语言的目标程序文件,其格式为COFF(公用目标文件格式)。汇编语言源程序可以包括汇编语言指令(instruction)、汇编指令(assemblerdirectives)和宏指令(macrodirectives)。,连接器(Linker),连接器的基本任务是将目标文件连接在一起,产生可执行模块。连接器可以接受的输入文件包括汇编器产生的COFF目标文件、命令文件、库文件、以及已部分连接好了的文件。它所产生的可执行COFF目标模块可以装入各种开发工具,或由TMS320器件来执行。,归档器(Archiver),归档器允许用户将一组文件归入一个档案文件(库)。例如,将若干个宏归入一个宏库,汇编器将搜索这个库,并调用源文件中使用的宏。也可以用归档器将一组目标文件收入一个目标文件库,连接器将连接库内的成员,并解决外部引用。,交叉引用列表器(Cross-ReferenceLister),交叉引用列表器是一个查错的工具。它接受已经连接好的目标文件作为输入,产生一个交叉引用列表作为输出。它列出符号、符号的定义、以及它们在已经连接的源文件中的引用。,十六进制转换公用程序(HexConversionUtility),将COFF目标文件转换成为若干种标准的文件格式:1.ASCII-十六进制2.ExtendedTektronix3.IntelMCS-864.MotorolaExorciser5.TISDSMAC,公共目标文件格式汇编器和链接器产生的目标文件,是一个可以在TMS320DSP上执行的文件,称为公共目标文件格式(CommonObjectFileFormat),缩写为COFF。由于COFF在编写汇编语言程序时采用代码和数据块的形式,因此便于模块化的编程,这些代码和数据块称为段。所谓段是指连续占有存储空间的一个数据或代码块。在编写汇编语言源程序时,程序按段组织,每行汇编语句都从属一个段。段是目标文件中可重新定位的最小单元,每个目标程序中的每个段通常是分开的和各不相同的。,COFF中至少包含以下三个默认段:.text段(文本段)通常包含可执行代码;.data段(数据段)通常包含己初始化的数据;.bss段(保留空间段)通常为未初始化的数据保留空间。段有两种基本类型,已初始化段和未初始化段.1.未初始化段仅仅在目标系统存储器中保留空间,以供程序运行过程的变量作临时存储空间使用,可由汇编伪指令.bss和.uset创建。2.己初始化段包含可执行代码或者已初始化数据,这些段的内容存储在目标文件中,当程序装入时存放在存储器中。每个己初始化段可独立地进行重定位,且可以访问在其他段中重定义的符号。,自定义段由用户自己定义,和默认段的使用相同,但它们被单独汇编,可由以下3个指令来创建自定义段:符号.usect“段名”,字数符号.sect“段名”,字数(建立的块可重定位)符号.asect“段名”,地址(建立具有绝对地址的块).usect建立的段是在RAM中为变量保留空间(类似于.bss段),.sect建立的是包含代码或数据的段(类似于.text段和.data段)。汇编器确定汇编语言程序的各个部分属于哪一个特定的段,汇编器有六个命令来完成这种功能,即:用于创建未初始化段.bss,.usect和用于创建已初始化.text,.data,.sect,.asect,如果程序未作说明,则统一汇编到.text段中。,链接器的主要功能是将段定位至目标存储器中。确定段地址的工作一般由链接器来完成,由于大部分系统一般包含多个不同类型的存储器(EPROMRAM等),采用段可以使用户更有效地利用目标存储器,所有的段可以独立进行定位。因此可以将不同的段分配至各种目标存储器中,加强程序的灵活性和可移植性。,伪指令(AssemblerDirectives),汇编伪指令,段定义伪指令,.bss在该段中保留若干字,.data汇编入已初始化的数据段,.sect“sectionname”汇编入已命名的段,.text汇编入可执行的代码段,.bsspage,128在.bss段中为page定义128个字。,初始化常数伪指令,.float初始化一个32-bit的浮点常数,.int初始化一个或多个16-bit的整数,.string初始化一个或多个字符串,.word初始化一个或多个16-bit的整数,.bssx,4,1.word0012h,格式化输出列表的伪指令,.list开始源文件列表,.nolist停止源文件列表,.length设置源文件列表的页长度,.title在列表文件每一页打印文件名,引用其他文件的伪指令,.copy/.include包含其他文件的源语句,.global确认一个或多个全局(外部)符号,.mlib定义宏库,.includef240.h.globalaa,条件汇编伪指令,.if/.else/.endif条件汇编代码块,.loop/.endloop循环汇编代码块,.break终止循环汇编代码块,汇编时的符号,.equ/.set使一个符号等于一个值,.end结束程序,aa.equ0012h,宏语言,Macro:Auser-definedroutinethatcanbeusedasaninstruction,汇编器支持宏语言,使用户可以建立自己的“指令”。当程序要将特定的任务执行若干次时,尤其有用。相当于子程序。,宏语言可以使用户:,定义自己的宏,或重新定义正执行的宏,简化长的或复杂的汇编代码,访问由归档器建立的宏库,在一个宏内定义条件块和可重复的块,在一个宏内操作字符串,控制展开列表,定义宏,在程序中使用宏之前,首先必须定义它。可以用两种方法来定义:,(1)在源文件开始处定义;(2).include/.copy文件中定义;,(3)在宏库中定义。,定义宏,macname.macroparameter,modelstatements,.mexit,.endm,定义宏,macname宏的名字,.macro是一个伪指令,确认源语句为宏定义的第一行,parameters选项,作为.macro伪指令的操作数,Modelstatements每次调用宏时执行的指令或伪指令,.endm终止宏定义,定义宏举例,*add3p1,p2,p3(形参)*p3=p1+p2+p3add3.macrop1,p2,p3laccp1addp2addp3.endm,调用宏,在源程序中用宏的名字作为操作码来调用宏.,add3x,y,z(实参),展开宏,在源程序调用宏时,汇编器将其展开。在展开时,汇编器将变量传递给宏参数,用宏定义取代宏调用语句,然后汇编其源代码。在省缺情况下,宏展开打印在列表文件中。可以用伪指令.mnolist来停止其展开的列表。,展开宏,00002000laccx00010001addy00020002addz*Reservespaceforvars0000.bssx,10001.bssy,10002.bssz,1,宏库,定义宏的一种方法是建立一个宏库。宏库是包含有宏定义的文件的集合。必须使用归档器来把这些文件收集到一个文件中。宏库中的每一个成员都包含一个宏定义。该文件必须是未汇编的源文件。宏名字和文件名必须相同,且宏文件名的扩展名必须是.asm,访问宏库,用伪指令.mlib来访问宏库,其语法为:,.mlibmacrolibraryfilename,当汇编器识别到该伪指令时,就打开该宏库,并建立该宏库内容的表。,汇编器输出的列表文件:,1*2*Assembleintothe.textsection.*3*40000.text50000e800LD#0,A6*7*Allocate4wordsin.bssforTEMP.*8*90000Var_1:.bssTEMP,410,11*12*Stillin.text*13*140001f000ADD#56h00020056150003f066MPY#73h0004007316,17*18*Allocate100wordsin.bssforthe*19*symbolnamedARRAY;thispartof*20*.bssmustfitonasinglepage.*21*220004.bssARRAY,100,12324*25*Assemblemorecodeinto.text.*26*2700058000ADDVar_128,29*30*Declareexternal.bsssymbols.*31*32.globalARRAY,TEMP33.end,连接器-m选择项建立映射列表文件,-mfilename该连接器映射列表描述:存储器划分;输入与输出段的位置;外部符号重新定位后的地址。,当没有发现错误时,连接器就建立一个输出模块,省缺名为a.out。也可以使用-o选择项,将输出模块写入另外的文件:-ofilename其中:的文件名就是新的输出模块的文件名。,lnk200orun.outfile1.objfile2.obj,将ile1.obj和file2.obj连接起来,建立一个名为run.out的输出模块。,写入一个命令文件link.cmd:,a.obj/*Firstinputfilename*/b.obj/*Secondinputfilename*/-oprog.out/*Optiontospecifyoutputfile*/-mprog.map/*Optiontospecifymapfile*/并用该命令文件来调用连接器:lnk200link.cmd,包含连接器伪指令的命令文件:,a.objb.objc.obj/*Inputfilenames*/-oprog.out-mprog.map/*Options*/MEMORY/*MEMORYdirective*/RAM:origin=100hlength=0100hROM:origin=01000hlength=0100hSECTIONS/*SECTIONSdirective*/.text:ROM.data:ROM.bss:RAM,MEMORYPAGE0:name1(attr):origin=constant,length=constant;PAGEn:namen(attr):origin=constant,length=constant;,PAGE说明一个存储器空间。用户最多可以说明255页。通常,page0是程序存储器,page1是数据存储器。name命名一个存储器范围。一个存储器的名字可以是18个字符,其中包括AZ,az,$,.,_。,Attr存储器的属性:R存储器可读;W存储器可写;X存储器可包含可执行代码;I存储器可以初始化。,origin指定存储器的开始地址;length指定存储器范围的长度;fill为存储器范围指定一个填入的字符,其值是2-byte的整常数。,TMS320省缺的地址配置:,MEMORYPAGE0:PROG:origin=0 x0080length=0 xFF00PAGE1:DATA:origin=0 x0080length=0 xFF80SECTIONS.text:PAGE=0.data:PAGE=0.cinit:PAGE=0;cflagoptiononly.bss:PAGE=1,连接器使用举例,本例连接三个目标文件demo.obj、fft.obj和tables.obj,并建立输出文件demo.out。符号SETUP是程序的输入点。,连接器命令文件demo.cmd,/*/*SpecifyLinkerOptions*/*/-ecoeff/*Definetheprogramentrypoint*/-odemo.out/*Nametheoutputfile*/-mdemo.map/*Createanoutputmap*/*/*SpecifytheInputFiles*/*/demo.objfft.objtables.obj,/*/*SpecifytheMemoryConfigurations*/*/MEMORYPAGE0:RAM_PG:origin=00080hlength=06F80hROM:origin=0C000hlength=03F80hPAGE1:ONCHIP:origin=00080hlength=0F7FhEXT:origin=01000hlength=0EFFFh,/*/*SpecifytheOutputSections*/*/SECTIONS.text:load=ROM,page=0/*link.textintoROM*/var_defs:load=ONCHIP,page=1/*defsinRAM*/.data:fill=07A1Ch,load=ONCHIP,page=1tables.obj(.data)/*.datainput*/fft.obj(.data)/*.datainput*/.=100h;/*createhole,fillwith07A1Ch*/*andlinkwithONCHIP*/.bss:load=RAM_PG,page=0,fill=0FFFFh/*Remaining.bss;fillandlink*/,映射文件demo.map,OUTPUTFILENAME:ENTRYPOINTSYMBOL:0MEMORYCONFIGURATIONNameoriginlengthattributesfill-PAGE0:RAM_PG00000080000006f80RWIXROM0000c000000003f80RWIXPAGE1:ONCHIP00000080000000f7fRWIXEXT0000100000000efffRWIX,SECTIONALLOCATIONMAPoutputattributes/sectionpageoriginlengthinputsections-.text00000c000000000150000c00000000008demo.obj(.text)0000c00800000007fft.obj(.text)0000c00f00000006tables.obj(.text)var_defs100000080000000020000008000000002demo.obj(var_defs).data100000082000001080000008200000000tables.obj(.data)0000008200000000fft.obj(.data)0000008200000100fill=7a1c0000018200000008demo.obj(.data),.bss0000000800000007b0000008000000013demo.obj(.bss)fill=ffff0000009300000000fft.obj(.bss)0000009300000068tables.obj(.bss)fill=ffffxy10000018a00000014UNINITIALIZED0000018a00000014demo.obj(xy)GLOBALSYMBOLSaddressnameaddressname-00000080.bss00000080.bss00000082.data00000082.data0000c000.text00000093TEMP00000097ARRAY00000097ARRAY00000093TEMP000000fbend0000018aedata0000018aedata000000fbend0000c000.text0000c015etext0000c015etext8symbols,C语言来写程序,编译器编译问题,输入是C源文件。读入源语句,检查语法和语意错误,写出一个中间文件(.if),可选择项。其输入是分析器产生的中间文件(.if)。当运行优化器时,用户可以选择优化的层次。产生一个与中间文件格式相同的高效率版本。,输入是分析器或优化器产生的中间文件(.if或.opt文件),产生一个汇编语言源文件。,内部列表公用程序,输入是C编译器产生的汇编语言源程序和C源程序。产生的是按C文件的语句展开的汇编语言源文件。,C优化编译器,TI为其TMS320系列DSP提供了系列的C编译器。将标准C源文件编译成为相应片种的汇编语言源代码文件,进而汇编和连接,产生可执行的目标文件。这些C编译器符合ANSIC标准;有运行支持库;一个外壳程序(shellprogram)可以一步将C源代码翻译成为TMS320的目标代码。,C优化编译器主要特点,1.完全符合ANSIC标准2.带有一个完整的运行支持库,包括字符串操作,动态存储器分配,数据转换,三角、指数和双曲线函数等。可以对运行支持函数库和用户定义函数库作扩展,C优化编译器主要特点,使用多种先进技术来从C源代码产生高效汇编代码。通用优化可用于任何C代码,而对各片种的专门优化更适应该片种的结构特点。通过简化循环、重新安排语句和表达式、将变量安排入寄存器等方法来改善执行速度,减小C程序的大小。,C优化编译器主要特点,归档器公用程序(ArchiverUtility),将文件归入单一的档案文件或库中,可以对库作文件的添加、删除、替换等。可以将目标文件库作为连接器的输入。,C优化编译器主要特点,公用目标文件格式(COFF,CommonObjectFileFormat)使用户能够在连接时定义自己系统的存储器映射,将C代码和数据连接到特定的存储区域,从而最大限度地改善其性能。COFF还为源程序一级的查错提供强有力的支持。,C优化编译器主要特点,包含一个外壳程序(ShellProgram),只用一个命令,就可以编译、汇编、和连接,直接从C原文件产生可执行的COFF文件。,C优化编译器主要特点,多种列表文件:(1)汇编语言源文件,可以有选择地包括内部列表、C源代码及使用寄存器的信息;(2)预处理输出文件;(3)带有行号和操作码的汇编列表文件。,C编译器的优化,C编译器的效率取决于所作的优化的范围和数量。TMS320的C编译器能作很宽范围的多种优化,从而改善其编译所得代码的效率。TMS320的C编译器所作的优化分为适用于所有处理器的通用优化和针对特定片种的专门优化。,通用优化,改变表达式,字符简化,常数合并将表达式简化成为要求较少指令和较少寄存器的等价形式:(a+b)-(c+d)-(a+b)-c)-d)a=(b+4)-(c+1)-a=b-c+3,通用优化,数据流优化使用较少代价的表达式,检测出并去除不必要的赋值,避免再计算已经计算过的值。,通用优化,优化转移/简化控制流分析程序的转移判断情况,重新安排操作顺序,消去转移或多余的条件。,通用优化,优化循环相关变量,例如:为数组元素设置下标的代码改为指针增量的代码;索引AR0用计数器控制的循环写成块循环,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识产权赋能新质生产力的作用
- 医患关系发展时间线
- 建设工程安全管理实务讲解
- 工信新质生产力
- 2025年呼吸内科常见呼吸系统疾病诊断试卷答案及解析
- 构建新质生产力的实践路径
- 2025年呼吸内科疾病检测与治疗综合考试答案及解析
- 2025年精神科护理知识测试卷答案及解析
- 2025年骨科骨折固定术后康复方案制定模拟考试卷答案及解析
- 2025年骨科骨折固定操作规范考核模拟测试卷答案及解析
- 时事政治考试题(含答案)
- 生物标本课程讲解
- 专八备考单词讲解
- 《古代诗歌四首》理解性默写与训练-2023学年七年级语文上册知识梳理与能力训练
- 2025年非高危安全管理员和企业负责人习题有(含答案)
- 2025年度乡村医生能力提升培训考试试题及答案
- 2025法拍房屋代理竞买合同范本:专业中介服务
- 医院2025年年度窗口服务优化计划
- 营销部综合事务管理办法
- 机加工车间员工技能培训
- 部编人教版三年级上册道德与法治全册教案
评论
0/150
提交评论