13第四章C54x汇编语言_第1页
13第四章C54x汇编语言_第2页
13第四章C54x汇编语言_第3页
13第四章C54x汇编语言_第4页
13第四章C54x汇编语言_第5页
已阅读5页,还剩47页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第四章C54x汇编语言,4.1C54x汇编语言指令和汇编命令,一、C54x汇编指令汇编语言源程序以.asm作为扩展名。汇编语言源程序中的每一行都可以由4个部分组成:,IIR:PORTRPA1,*AR3;从PA1口输入数据,标号是任选项;标号后面可以加也可以不加冒号“:”;标号必须从第1列写起,但第1个字母不能以数字开头;标号最多可达32个字符(AZ,az,09,_,以及$);引用标号时,标号的大小写必须一致;标号的值就是SPC(段程序计数器)的值;如果不用标号,则第一个字母必须为空格、分号或星号(*)。,1、标号:供本程序的其它部分或其它程序调用或跳转。,2、助记符:用于助记符指令、汇编命令、宏指令和宏调用。,作为助记符指令,一般用大写;汇编命令和宏命令,以英文句号“.”开始,且为小写;汇编命令可以形成常数和变量,当用它控制汇编和连接过程时,可以不占存储空间,如.end;指令和汇编命令都不能写在第1列。,3、操作数和注释,操作数:指令中的操作数或汇编命令中定义的内容。,操作数可以不只一个,操作数之间必须用逗号“,”分开;有的指令无操作数,如NOP,RESET。,注释:注释是对指令的说明,注释是任选项。,注释从分号“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的一行或多行;如果注释从第1列开始,也可以用“*”号。,二、汇编命令(伪指令),汇编命令是用来为程序提供数据和控制汇编进程的。C54x汇编命令共有64条,其主要功能包括:1、将代码和数据汇编到指定的位置。2、为未初始化的变量在存储器中保留存储空间。3、控制列表的方式。4、初始化存储器。5、引用其他文件。6、控制条件汇编。7、在汇编时定义符号。8、执行其他功能。Ref:TMS320C54AssemblyLanguageToolsUsersGuide,1、常用的汇编命令,常用的汇编命令(续),三、宏指令,宏指令是用户定义的可以作为一条指令来执行的一段子程序。如果在程序中有一段程序需要执行多次,就可以把这一段程序定义(宏定义)为一条宏指令。然后,在需要重复执行这段程序的地方调用这条宏指令(宏调用)。可以使程序变得简洁。宏指令可以在源程序的任何位置定义,但是必须在用到它之前定义好。宏定义可以嵌套,即在一条宏指令中调用其他的宏指令。,1、宏指令的定义:宏定义的格式:macname.macroparameter1,parameternmodelstatementsormacrodirectives.mexit.endm其中:macname:宏指令的名字,放在源程序语句的标号位置。.macro:宏定义第一行的记号,放在助记符操作码的位置。parameter:任选的替代参数,就像宏指令的操作数。modelstatements:调用宏时要执行的指令或汇编命令。.mexit:相当于goto.endm语句。当检测确认宏展开将失败时,该语句是很有用的。.endm:结束宏定义。,2、宏指令的调用:宏指令定义好之后,就可以在后面的源程序中调用,在源程序中用宏的名字作为操作码来调用宏指令。宏调用的格式为:label:macnameparameter1,parametern其中:label:是任选项。macname:是宏指令名,写在助记符操作码的位置上。parameter:是替代的参数,参数的数目应当与宏指令定义的参数相等。当源程序中调用宏指令时,汇编器就将宏指令展开。宏展开时,汇编器将实在参数传递给宏参数,再用宏定义替代宏调用语句,并对其进行汇编。在列表文件中,汇编器默认打印展开的宏,如果不希望展开宏列表,可以用.mnolist命令停止展开列表。,3、宏指令和子程序,宏指令和子程序都可以被多次调用;子程序汇编成目标代码的过程只进行一次;而对于宏,在用到宏指令的任何地方,都要对宏指令中的语句逐条的进行汇编;子程序无参数,调用前必须事先设置好所需要的寄存器等;而宏指令可以使用参数,调用时只要直接代入参数就可以了;*区别于高级语言:高级语言的子程序可以带参数(又称虚拟自变量、形参或哑元)调用。,例4-1:宏指令的定义和调用的例子,4.2C54x汇编源程序的汇编,一、汇编器,(1)汇编器的作用和使用汇编器可以将汇编源程序汇编成可重定位的目标文件(.obj文件),需要时,可以生成列表文件(.lst文件)。汇编器能够将程序代码分段,每段目标代码都有一个SPC,汇编器可以定义和引用全局符号,可在列表后附加交叉引用表。汇编器支持宏功能,允许定义宏命令。对汇编源程序的汇编可以在CCS软件环境下,运行Project/Build命令完成,也可以在命令行中运行asm500.exe实现。使用asm500的方法:asm500inputfileobjectfilelistingfile-options例如:axm500c54x.asm-l-s-x源程序c54x.asm经汇编后将生成一个c54x.obj目标文件、列表文件、符号表(在目标文件中)以及交叉引用表(在列表文件中)。,(2)汇编器选项,二、列表文件,汇编器对源程序进行汇编时,如果采用了-l选项,汇编后将产生一个列表文件,其中包括源程序语句和目标代码。,Field1:源程序语句的行号,用十进制数表示。行号前面如果有字母,表示从包含文件汇编的;前面如果有数字,表示嵌入的宏展开或循环块。Field2:段程序计数器(SPC),用十六进制数表示。Field3:目标代码,用十六进制数表示;段重定位信息。Field4:源程序语句。,列表文件中目标代码后面的符号:!未定义的外部引用。.text段重新定位。”.data段重新定位。+.sect段重新定位。-.bss和.usect段重新定位。,交叉引用清单汇编器对源程序进行汇编时,如果采用了-x选项,就会在列表文件的最后有1页交叉引用清单,其中列出了交叉引用的符号、定义和引用的位置。,Label:列出汇编时定义和引用的每一个符号。Value:列出一个赋给符号的4位十六进制数值或属性说明。DEFN:列出定义符号的语句行号。REF:列出引用此符号的语句的行号,如在第4行和第28行都引用了proc符号。第二列“VALUE”的说明:REF:外部引用(.global)UNDF:未曾定义过:在.text段定义的符号”:在.data段定义的符号+:在.sect段定义的符号-:在.bss或.usect段定义的符号,三、COFF文件,汇编器和连接器建立的目标文件,是可以在C54xDSP器件上执行的文件。这些目标文件的格式称为公共目标文件格式COFF(CommonObjectFileFormat)文件。汇编器建立的是一种相对地址的COFF文件。汇编器根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。连接器建立的是一种绝对地址的COFF文件。连接器建立COFF文件时,要把各部分程序代码和数据段重新定位到目标存储器中,也就是为各个程序代码或数据分配存储单元。,(2)段是一个目标文件的最小单元。段是一个代码或数据块,它们最终将在内存空间中占用相邻的空间。一个目标文件中的每一个段都是分开的和不相同的。所有的COFF文件都包含下面3种形式的段,段在存储器中占用连续的存储空间,所有的段分成两类,已初始化段和未初始化段,如:.text段,已初始化段,通常包含可执行的代码;.data段,已初始化段,通常包含初始化了的数据;.bss段,未初始化段,为未初始化变量保留存储空间。另外,汇编器和连接器可以建立、命名和连接自定义的段。自定义段在目标文件中与.data、.text和.bss段分开汇编,连接时将作为一个单独的部分分配到存储器。,.已初始化段已初始化的段包含可执行的代码和初始化之后的数据(常数),一般放在ROM或FLASH中。汇编命令有.text.data.sect.asect。.asect是绝对地址自定义段,所定义的段被分配到汇编命令指定的地址。用法:.text段起点.data段起点.sect“段名”,段起点.asect“段名”,地址汇编时遇到已初始化段的汇编命令,汇编器会终止当前正在汇编的段,然后处理下面紧跟着的程序代码或数据。而遇到未初始化段的汇编命令,则会为未初始化段开辟新的空间,然后返回到正在进行的初始化段的汇编过程。段起点是任选项,如果选用就是为段程序计数器SPC设定一个初值,如果没有,SPC=0。,.自定义段自定义段,由用户定义的段,和默认的段.text.data.bss的使用完全相同,而且独立分配,但是自定义段单独被汇编,不和.text.data.bss混在一起。.usect和.bss类似,.sect和.data,.text类似。语法格式如下:标号.usect“段名”,字数.sect“段名”.asect“段名”,地址,、子段,子段是大段中的小段。连接器可以像处理段一样处理子段。采用子段结构的优点是可以使存储器分配图更加紧密。子段命名的句法是:基段名:子段名如:.sect“.text:_func”就在.text段内建立了一个称为_func的子段。子段也有已初始化和未初始化两种,可以分别用.sect和.usect来命名。子段可以单独为其分配存储单元,或在基段之后。,用冒号连接基段和子段,汇编器为每个段都安排一个单独的程序计数器段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。连接器在连接时对每个段进行重新定位。汇编开始时,汇编器将每个SPC置0。当汇编器将程序代码或数据加到一个段内时,相应的SPC就增加。如果再继续对某个段汇编,则相应的SPC就在先前的数值上继续增加。连接器在连接时要对每个段进行重新定位。,、段程序计数器(SPC),3、COFF文件中的符号,COFF文件中有一张符号表,用来存放程序中的符号信息。连接时对符号进行重新定位和调试程序都要用到符号表。其中有一种外部符号,指在一个模块中定义,可在另一个模块中引用的符号。用于处理外部符号的汇编命令有3个:.def:在当前模块中定义,并可在其他模块中使用的符号。.ref:在当前模块中使用,在其他模块中定义的符号。.global:全局符号,包括了上面的两种符号。,.defx;x在此模块中定义,可被别的模块引用.refy;y在这里引用,它在别的模块中定义x:ADD#56h,A;在这里用到符号xBy;引用y,注意:汇编时,汇编器把x和y都放在目标文件的符号表中。连接器必须使所引用的符号与相应的定义相匹配。如果连接器不能找到某个符号的定义,就给出不能辨认所引用符号的出错信息。,例4-2:汇编源程序经汇编后的列表文件(段命令的应用):,该例中一共建立了5个段:.text段:段内有10个字的程序代码。.data段:段内有7个字的数据。vectors段:是一个用.sect建立的自定义段,段内有2个字的已初始化数据。.bss段:在存储器中为变量保留了10个存储单元。newvars段:用.usect建立的自定义段,在存储器中为变量保留8个存储单元。,4.3C54x目标文件的连接,1、连接器,连接器的作用是根据连接命令或连接命令文件(.cmd文件),将一个或多个COFF目标文件连接起来,生成存储器映象文件(.map)和可执行的输出文件(.out)。对目标文件的连接可以在CCS软件环境下,运行Project/Build命令完成连接,也可以在命令行环境运行lnk500.exe来实现。使用lnk500的方法:lnk500file1.objfile2.obj-olink.out或者:lnk500linker.cmdlinker.cmdfile1.objfile2.obj-olink.out,2、连接器选项,3、连接器对段的处理,连接器在处理段时,有两个主要任务:(1)把一个或多个COFF目标文件中的各种段作为连接器的输入,经连接后在一个可执行的COFF输出模块中建立各个输出段。(2)为各个输出段选定存储器地址。为完成以上任务,连接器有两条命令:(1)MEMORY命令用来定义系统的目标存储器配置图,包括对存储器各部分命名,以及规定他们的起始地址和长度。(2)SECTION命令告诉连接器如何将输入段组合成输出段,以及将输出段放在存储器中的什么位置。,(1)连接器命令文件举例,4、连接器命令文件,输入文件名:说明要链接的目标文件、文档库文件或者是其它命令文件。链接器选项:既可以用在链接器命令行中,也可以编在链接器命令文件中。MEMORY命令:定义目标存储器的配置。SECTION命令:规定目标文件中各个段在存储器中的位置。如果没有上两条命令,链接器就从地址0080h开始一个段接着一个段进行配置。.cmd文件中的注释用符号/*和*/。,(2)连接器命令文件主要内容,(3)MEMORY命令,MEMORY命令对存储器模块命名,规定它们的起始地址和长度(容量)。MEMORY命令的句法是:,PAGE:对一个存储空间加以标记,每一个PAGE代表一个完全独立的地址空间。页号n最多可规定为255,取决于目标存储器的配置。通常PAGE0定为程序存储器,PAGE1定为数据存储器。如果没有规定PAGE,则链接器就当作是PAGE0来配置。,name:可以包含8个字符,AZ、az、$、.、_均可。名字并没有特殊的含义,用来标记存储器的区间而已;名字都是内部记号,不需要保留在输出文件或者符号表中。不同PAGE上的存储器区间可以取相同的名字,但在同一PAGE内的名字不能相同,且不许重叠配置。attr:任选项,为所命名的区规定14个属性。如果有选项,应写在括号内。当输出段定位到存储器时,可利用属性加以限制。4种属性包括:R规定可以对存储器执行读操作。W规定可以对存储器执行写操作。X规定存储器可以装入可执行的程序代码。I规定可以对存储器进行初始化。如果一项属性都没有选,就可以将输出段不受限制地定位到任何一个存储器位置。任何一个没有规定属性的存储器都默认有全部4项属性。,origin:规定一个存储区的起始地址。键入origin、org或o都可以。这个值是一个16位二进制常数,可以用十进制数、八进制数或十六进制数表示。length:规定一个存储区的长度,键入length、len或l都可以。,A、Loadallocation:(分配位置)定义将输出段加载到存储器中的什么位置。句法:load=allocation或者:用大于号代替“load=”allocation或者:省掉“load=”allocation(其中allocation是给输出段分配的存储单元),SECTIONS命令的性能参数,如:.text:load=0 x1000将输出段.text定位到一个特定地址。.text:ROM将输出段.text定位到名为ROM的存储区。.bss:(RW)将.bss段定位到属性为R、W的存储区。.text:align=0 x80将.text定位到0 x80开始的存储区。.text:PAGE0将输出段.text定位到PAGE0。如果要用到一个以上参数,可以将它们排成一行,例如:.text:ROMalign16PAGE2为了便于阅读,可以用括号括起来:.text:load=(ROMalign(16)PAGE(2),B、Runallocation:(运行)定义输出段在存储器的什么位置上开始运行。句法:run=allocation或者用:runallocation,链接器为每个输出段在目标存储器中分配两个地址:一个是加载的地址,另一个是执行程序的地址。通常,这两个地址是相同的,可以认为每个输出段只有一个地址。有时要想把程序的加载和运行区分开(先将程序加载到ROM,然后在RAM中以较快的速度运行),只要用SECTIONS命令让链接器对这个段定位两次就行了。一次是设置加载地址,另一次是设置运行地址。例如:.textload=ROM,run=RAM,C、Inputsections:用它定义由哪些输入段组成输出段。句法:inputsection如:.text:*(.text);这样就把所有的.text段连接成.text段输出。一般情况下,在SECTIONS命令中是不列出每个输入文件的段名的,这样,在链接时,链接器就将所有输入文件的.text段链接成一个.text输出段,其它段也是一样的。如:,但是如

温馨提示

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

评论

0/150

提交评论