《DSP原理及应用--TMS320C54x软件开发.ppt》由会员分享,可在线阅读,更多相关《DSP原理及应用--TMS320C54x软件开发.ppt(99页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第5章章 TMS320C54x 软件开发软件开发1引言引言软件开发包括两部分软件开发包括两部分程序的编写程序的编写两者混合两者混合环境和工具环境和工具非集成非集成集成:集成:CCS5000 Code Compose Studio 5000程序程序运行环境和工具运行环境和工具汇编汇编C/C+25.1 5.1 软件开发过程及开发工具软件开发过程及开发工具一、软件开发过程一、软件开发过程1、TMS320C54x DSP软件开发流程软件开发流程342、对流图作简要说明、对流图作简要说明(1)程序文件说明)程序文件说明C源程序(源程序(.c)和汇编源程序()和汇编源程序(.asm)COFF目标文件(目
2、标文件(.obj):不可执行):不可执行可执行的可执行的COFF文件(文件(.out):可执行):可执行COFF:Common Object File Format5(2)器件的说明)器件的说明 C编译器(编译器(C Compiler)汇编器(汇编器(Assembler)连接器(连接器(Linker)十六进制转换公用程序(十六进制转换公用程序(Hex Conversion Utility)归档器(归档器(Archiver)6二、调试工具二、调试工具1、软件仿真器(、软件仿真器(Simulator)2、硬件在线仿真器(、硬件在线仿真器(Emulator)3、评估模块(、评估模块(EVM板)板)用
3、主机的处理器和存储器用主机的处理器和存储器DSP的微处理器和微计算机模式的微处理器和微计算机模式仿真仿真7三、代码生成工具三、代码生成工具程序名程序名作用作用程序名程序名作用作用CL500.exe将将C程序程序转换转换成成.out文件文件AR500.exe对对目目标标文件文件库进库进行增加、行增加、删删除等除等操作操作AC500.exe对对.c文件文件进进行文行文法分析法分析,生成生成.if中中间间文件文件ASM500.exe将将汇编汇编程序程序转换转换为为COFF目目标标文文件件.objOPT500.exe对对.if文件文件进进行行优优化化,生成生成.opt文件文件HEX500.exe将将.
4、out文件文件转换为转换为指定格式的文件指定格式的文件CG500.exe将将.if或或.opt文件生文件生成成.asm文件文件LNK500.exe将目将目标标文件文件链链接接成成.out文件文件CLIST.exe对对.asm文件文件进进行行交叉列表交叉列表,生成生成.cl文件文件MK500.exe库库生成生成应应用程序用程序85.2 公共目标文件格式公共目标文件格式一、一、COFF文件的基本单元文件的基本单元段段COFF:Common Object File Format 段:段:Sections1、段的特点、段的特点 同一个段在存储器空间中占用的单元是连续的同一个段在存储器空间中占用的单元是
5、连续的 段之间相互独立段之间相互独立92、段的分类、段的分类段段已初始化段已初始化段未初始化段未初始化段.text.data.sect.bss.usect包含可执行代码包含可执行代码包含运行程序所需的数据包含运行程序所需的数据常为变量保存空间常为变量保存空间103、两个命名段伪指令、两个命名段伪指令命名段:命名段:自定义与自定义与.text;.data;.bss不同的段不同的段伪指令:伪指令:.sect;.usect格式:格式:符号符号 .usect “段名段名”,字数,字数 .sect “段名段名”,段起点,段起点说明:说明:符号为指向保留空间的第一个字符号为指向保留空间的第一个字 同一个程
6、序中用同一个程序中用.usect和和.sect定义的段的定义的段的段段 名不能相同名不能相同11例如:例如:.bssx,1 ;定义全局变量定义全局变量x,并分配,并分配1个字存储单元个字存储单元stack.usect .mystack,10 ;自定义自定义.mystack段,使用前没有内容段,使用前没有内容 ;10个字的存储空间,首地址为个字的存储空间,首地址为stack,;标号标号stack一定要顶格写一定要顶格写.text (表示以下为可执行代码,直到新段名为止)表示以下为可执行代码,直到新段名为止)start:STM#stack+stacksize,SP PSHMST0;PSHMST1
7、;12二、汇编器对段的处理二、汇编器对段的处理1、处理过程、处理过程 汇编器对段的处理是通过段伪指令确定汇编语言汇编器对段的处理是通过段伪指令确定汇编语言程序的各个部分属于哪个特定的段,并将段名相同的程序的各个部分属于哪个特定的段,并将段名相同的语句汇编在一起。语句汇编在一起。汇编器有汇编器有.bss;.usect;.text;.data;.sect五个汇编伪五个汇编伪指令指令来完成这种功能。来完成这种功能。注意:注意:如果在程序中没有用任何的伪指令,则汇如果在程序中没有用任何的伪指令,则汇编器将把所有的程序块或数据块统一汇编到编器将把所有的程序块或数据块统一汇编到.text段中。段中。132
8、、子段(、子段(Subsections)大段中的小段就是子段,采用小段可以使存储器图更加紧密。大段中的小段就是子段,采用小段可以使存储器图更加紧密。子段的命名语法:基段名:子段名子段的命名语法:基段名:子段名如:如:.sect “.text:_func”3、段程序计数器(、段程序计数器(SPC)汇编器就是靠汇编器就是靠SPC来对段进行处理来对段进行处理处理过程:处理过程:为每个段分配一个为每个段分配一个SPC指向该段的当前位置,并置初始值指向该段的当前位置,并置初始值0;当汇编器将程序代码或数据加到一个段内时,相应的当汇编器将程序代码或数据加到一个段内时,相应的SPC加;加;执行一段时间后当再
9、次遇到相同的段,则执行一段时间后当再次遇到相同的段,则SPC继续增加。继续增加。14三、链接器对段的处理三、链接器对段的处理1、链接器对段的处理任务、链接器对段的处理任务 即根据程序情况进行段匹配,即根据程序情况进行段匹配,将所有程序的数据段组合,代码段组合等。将所有程序的数据段组合,代码段组合等。为输出段选择存储器地址。为输出段选择存储器地址。2、完成以上任务的两条命令、完成以上任务的两条命令链接器输入段输入段输出段输出段15链接器默认的存储器分配链接器默认的存储器分配16MEMORYPAGE 0:PRAM:o=100h,l=1f00hPAGE 1:DRAM:o=2000h,l=1000h
10、17SECTIONS.text :PRAM PAGE 0.data :PRAM PAGE 0.bss :DRAM PAGE 1.mystack :DRAM PAGE 118四、程序装入四、程序装入1、硬硬件件仿仿真真器器和和CCS集集成成开开发发环环境境,具具有有内内部部的的装装入入器器,调调用装入器的用装入器的LOAD命令即可装入可执行程序。命令即可装入可执行程序。2、将将代代码码固固化化在在片片外外存存储储器器中中,采采用用Hex转转换换工工具具(Hex conversion utility),例例如如Hex500将将可可执执行行的的COFF目目标标模模块块(.out文文件件)转转换换成成
11、几几种种其其他他目目标标格格式式文文件件,然然后后将将转转换后的文件用编程器将代码写入换后的文件用编程器将代码写入EPROM/Flash。19五、五、COFF文件中的符号文件中的符号COFF文文件件中中有有一一个个符符号号表表,用用于于存存储储程程序序中中的的符符号号信信息息。链链接接器器对对符符号号重重定定位位时时使使用用该该表表,调调试试工工具具也也使使用用该该表表来来提提供供符号调试。符号调试。外外部部符符号号指指在在一一个个模模块块中中定定义义,在在另另一一个个模模块块中中使使用用的的符符号号。可可使使用用.def、.ref或或.global汇汇编编伪伪指指令令将将符符号号定定义义为为
12、外外部部符符号。号。.def在当前模块中定义,可以在别的模块中使用的符号;在当前模块中定义,可以在别的模块中使用的符号;.ref在当前模块中引用,但在别的模块中定义的符号;在当前模块中引用,但在别的模块中定义的符号;.global可用于以上任何一种情况。可用于以上任何一种情况。20例如:例如:X:ADD#56h,A;B y;.def x ;在此模块中定义,可以在别的模块在此模块中定义,可以在别的模块 中使用的符号中使用的符号 .ref y ;在此模块中引用,但在别的模块中在此模块中引用,但在别的模块中 定义的符号定义的符号215.3 5.3 常用汇编伪指令常用汇编伪指令22一、段定义伪指令一、
13、段定义伪指令 为为便便于于链链接接器器将将程程序序、数数据据分分段段定定位位于于指指定定的的(物物理理存存在在的的)存存储储器器空空间间,并并将将不不同同的的obj文文件件链链接接起起来来。段段的的使使用用非非常灵活,但常用以下约定:常灵活,但常用以下约定:.text 此段存放程序代码此段存放程序代码.data 此段存放初始化了的数据此段存放初始化了的数据.bss 此段存入未初始化的变量此段存入未初始化的变量.sect 名名称称 定定义义一一个个有有名名段段,放放初初始始化化了了的的数数据据或或程程序序代代码码23二、条件汇编伪指令二、条件汇编伪指令 条条件件汇汇编编伪伪指指令令告告诉诉汇汇编
14、编器器按按照照表表达达式式的的计计算算结结果果对对代码块进行条件汇编代码块进行条件汇编.if expression 标标志志条条件件块块的的开开始始,仅仅当当条条件件为为真真(expression的值非的值非0即为真)时汇编代码即为真)时汇编代码.elseif expression 标标志志若若.if条条件件为为假假,而而.elseif条条件为真时要汇编代码块件为真时要汇编代码块.else 标志若标志若.if条件为假时要汇编代码块条件为假时要汇编代码块.endif 标志条件块的结束,并终止该条件代码块标志条件块的结束,并终止该条件代码块24三、引用其他文件和初始化常数伪指令三、引用其他文件和初
15、始化常数伪指令.include 文件名文件名 将指定文件复制到当前位置,其内将指定文件复制到当前位置,其内 容可以是程序、数据、符号定义等。容可以是程序、数据、符号定义等。.copy 文件名文件名 与与.include类似。类似。.def 符号名符号名 在当前文件中定义一个符号,可以被其他文在当前文件中定义一个符号,可以被其他文 件使用。件使用。.ref 符号名符号名 在其他文件中定义,可以在本文件中使用的在其他文件中定义,可以在本文件中使用的 符号。符号。.global 符号名符号名 其作用相当于其作用相当于.def、.ref效果之和。效果之和。25.mmregs 定义存储器映射寄存器的符号
16、名,这样就可以用定义存储器映射寄存器的符号名,这样就可以用 AR0、PMST等助记符替换实际的存储器地址。等助记符替换实际的存储器地址。.float 数数1,数,数2 指定的各浮点数连续放置到存储器中(从指定的各浮点数连续放置到存储器中(从 当前段指针开始)。当前段指针开始)。.word 数数1,数,数2 指定的各数(十六进制)连续放置到存储指定的各数(十六进制)连续放置到存储 器中。器中。.space n 以位为单位,空出以位为单位,空出n位存储空间。位存储空间。.end 程序块结束。程序块结束。26四、宏定义和宏调用四、宏定义和宏调用 TMS320C54x汇汇编编支支持持宏宏语语言言。如如
17、果果程程序序中中需需要要多多次次执执行行某某段段程程序序,可可以以把把这这段段程程序序定定义义(宏宏定定义义)为为一一个个宏宏,然然后在需要重复执行这段程序的地方调用这条宏。后在需要重复执行这段程序的地方调用这条宏。宏定义如下:宏定义如下:Macname.macroparameter 1,parameter n .mexit .endm 宏调用如下:宏调用如下:Macname parameter 1,parameter n27例如:完成例如:完成P3=p1+p2Add2 .macro p1,p2,p3 LD p1,A ADD p2,A STL A,p3 .endm .global shu1,s
18、hu2,he Add2 shu1,shu2,he 285.4 5.4 链接器命令文件的编写与使用链接器命令文件的编写与使用一、一、MEMORYMEMORY伪指令及其使用伪指令及其使用 MEMORYMEMORY伪伪指指令令就就是是用用来来指指定定目目标标存存储储器器的的模模型型。MEMORYMEMORY伪指令的一般语法为:伪指令的一般语法为:MEMORYMEMORY PAGE 0:name1:(attr):origin=constant,PAGE 0:name1:(attr):origin=constant,length=constant;length=constant;PAGE PAGE n:
19、namenn:namen:(:(attrattr):origin=constant,):origin=constant,length=constant;length=constant;29说明:说明:PAGE 指定存储器空间页面,最多指定存储器空间页面,最多255个。通常个。通常PAGE 0用于用于程序存储器,程序存储器,PAGE 1用于数据存储器,用于数据存储器,PAGE 2用于用于I/O存存储器储器,默认为默认为PAGE 0。name是存储器区间的取名,可由是存储器区间的取名,可由164个字符组成,包括个字符组成,包括A-Z、a-z、$、.、_attr指定存储区的指定存储区的1-4种属性种
20、属性origin指定存储区的起始地址指定存储区的起始地址length指定存储区的长度指定存储区的长度R指定指定该该存存储储区可以区可以读读W指定指定该该存存储储区可以写区可以写X指定指定该该存存储储区可以装入可区可以装入可执执行代行代码码I指定指定该该存存储储区可以区可以进进行初始化行初始化30 二、二、SECTIONSSECTIONS伪指令及其使用伪指令及其使用SECTIONS伪指令功能如下:伪指令功能如下:说明如何将输入段组合成输出段。说明如何将输入段组合成输出段。在可执行程序中定义输出段。在可执行程序中定义输出段。指定输出段在存储器中存放的位置。指定输出段在存储器中存放的位置。允许对输出
21、段重新命名。允许对输出段重新命名。31SECTIONS 伪指令的一般语法为:伪指令的一般语法为:SECTIONS name:property,property ,property.name:property,property ,property.name:property,property ,property.32例如:例如:File1.obj file2.obj-o prog.outSECTIONS.text:load=ROM,run=800h.const:load=ROM.bss:load=RAM33命令文件应用举例:命令文件应用举例:例例1:a.Obj b.obj c.obj-o pro
22、g.out -m prog.mapMEMORY RAM:origin=100h length=0100h ROM:origin=01000h length=0100hSECTIONS .text:ROM .data:RAM .bss:RAM34例例2:MEMORYPAGE 0:PRAM:o=100h,l=1f00hPAGE 1:DRAM:o=2000h,l=1000h SECTIONS.text :PRAM PAGE 0.data :PRAM PAGE 0.bss :DRAM PAGE 1.mystack :DRAM PAGE 135 汇编语言程序以汇编语言程序以汇编语言程序以汇编语言程序以.
23、asmasmasmasm为扩展名,可以用任意的编辑器编写源为扩展名,可以用任意的编辑器编写源为扩展名,可以用任意的编辑器编写源为扩展名,可以用任意的编辑器编写源文件。一条语句占源程序的一行,长度可以是源文件编辑器格式文件。一条语句占源程序的一行,长度可以是源文件编辑器格式文件。一条语句占源程序的一行,长度可以是源文件编辑器格式文件。一条语句占源程序的一行,长度可以是源文件编辑器格式允许的长度,但汇编器每行最多读允许的长度,但汇编器每行最多读允许的长度,但汇编器每行最多读允许的长度,但汇编器每行最多读200200200200个字符。因此,语句的执行个字符。因此,语句的执行个字符。因此,语句的执行
24、个字符。因此,语句的执行部分必须限制在部分必须限制在部分必须限制在部分必须限制在200200200200个字符以内。个字符以内。个字符以内。个字符以内。一、汇编语言源程序格式一、汇编语言源程序格式一、汇编语言源程序格式一、汇编语言源程序格式 助记符指令源语句的每一行通常包含助记符指令源语句的每一行通常包含助记符指令源语句的每一行通常包含助记符指令源语句的每一行通常包含4 4个部分:标号区、个部分:标号区、个部分:标号区、个部分:标号区、助记符区、操作数区和注释区。助记符区、操作数区和注释区。助记符区、操作数区和注释区。助记符区、操作数区和注释区。标号标号标号标号:助记符助记符助记符助记符 操作
25、数操作数操作数操作数 ;注释注释注释注释 助记符指令语法格式:助记符指令语法格式:助记符指令语法格式:助记符指令语法格式:36 DIANZIDIANZI .set.set 1 1 ;符号符号符号符号DIANZIDIANZI 1 1Begin:Begin:LDLD#DIANZIDIANZI,AR1AR1 ;将将将将1 1加载到加载到加载到加载到AR1AR1 标标标标 号号号号 助记符助记符助记符助记符 操作数操作数操作数操作数 注注注注 释释释释 例例例例1 1、助记符指令源语句举例。助记符指令源语句举例。助记符指令源语句举例。助记符指令源语句举例。37语句的书写规则:语句的书写规则:语句的书写
26、规则:语句的书写规则:所有语句必须以标号、空格、星号或分号所有语句必须以标号、空格、星号或分号所有语句必须以标号、空格、星号或分号所有语句必须以标号、空格、星号或分号(*(*(*(*或;或;或;或;)开始;开始;开始;开始;标号是可选项,若使用标号,则标号必须从第一列开始;标号是可选项,若使用标号,则标号必须从第一列开始;标号是可选项,若使用标号,则标号必须从第一列开始;标号是可选项,若使用标号,则标号必须从第一列开始;所有包含有汇编伪指令的语句必须在一行完成指定;所有包含有汇编伪指令的语句必须在一行完成指定;所有包含有汇编伪指令的语句必须在一行完成指定;所有包含有汇编伪指令的语句必须在一行完
27、成指定;各部分之间必须用空格分开,各部分之间必须用空格分开,各部分之间必须用空格分开,各部分之间必须用空格分开,TabTabTabTab字符与空格等效;字符与空格等效;字符与空格等效;字符与空格等效;程序中注释是可选项。如果注释在第一列开始时,前面必须标程序中注释是可选项。如果注释在第一列开始时,前面必须标程序中注释是可选项。如果注释在第一列开始时,前面必须标程序中注释是可选项。如果注释在第一列开始时,前面必须标 上星号或分号,在其他列开始的注释前面必须以分号开头;上星号或分号,在其他列开始的注释前面必须以分号开头;上星号或分号,在其他列开始的注释前面必须以分号开头;上星号或分号,在其他列开始
28、的注释前面必须以分号开头;如果源程序很长,需要书写若干行,可以在前一行用反斜杠字如果源程序很长,需要书写若干行,可以在前一行用反斜杠字如果源程序很长,需要书写若干行,可以在前一行用反斜杠字如果源程序很长,需要书写若干行,可以在前一行用反斜杠字 符(符(符(符()结束,余下部分接着在下一行继续书写。)结束,余下部分接着在下一行继续书写。)结束,余下部分接着在下一行继续书写。)结束,余下部分接着在下一行继续书写。381.1.1.1.标号标号标号标号 所有汇编指令和大多数汇编伪指令都可以选用标号,所有汇编指令和大多数汇编伪指令都可以选用标号,所有汇编指令和大多数汇编伪指令都可以选用标号,所有汇编指令
29、和大多数汇编伪指令都可以选用标号,供本程序或其它程序调用。供本程序或其它程序调用。供本程序或其它程序调用。供本程序或其它程序调用。使用标号时应注意:使用标号时应注意:使用标号时应注意:使用标号时应注意:标号必须从语句的第标号必须从语句的第标号必须从语句的第标号必须从语句的第1 1列写起,其后的冒号列写起,其后的冒号列写起,其后的冒号列写起,其后的冒号“:”:”可任选;可任选;可任选;可任选;标号为任选项,若不使用标号,则语句的第一列必须是标号为任选项,若不使用标号,则语句的第一列必须是标号为任选项,若不使用标号,则语句的第一列必须是标号为任选项,若不使用标号,则语句的第一列必须是空格、星号或分
30、号;空格、星号或分号;空格、星号或分号;空格、星号或分号;标号是由字母、数字以及下划线和美元符号等组成,标号是由字母、数字以及下划线和美元符号等组成,标号是由字母、数字以及下划线和美元符号等组成,标号是由字母、数字以及下划线和美元符号等组成,最多可达最多可达最多可达最多可达3232个字符;个字符;个字符;个字符;标号分大小写,且第一个字符不能是数字。标号分大小写,且第一个字符不能是数字。标号分大小写,且第一个字符不能是数字。标号分大小写,且第一个字符不能是数字。在使用标号时,标号的值是段程序计数器在使用标号时,标号的值是段程序计数器在使用标号时,标号的值是段程序计数器在使用标号时,标号的值是段
31、程序计数器SPCSPC的当前值。的当前值。的当前值。的当前值。例如:若使用例如:若使用例如:若使用例如:若使用.wordword伪指令初始化几个字,伪指令初始化几个字,伪指令初始化几个字,伪指令初始化几个字,则标号将指到第一个字。则标号将指到第一个字。则标号将指到第一个字。则标号将指到第一个字。392.2.2.2.助记符助记符助记符助记符 助记符助记符助记符助记符用来表示指令所完成的操作,用来表示指令所完成的操作,用来表示指令所完成的操作,用来表示指令所完成的操作,可以是汇编语言指令、可以是汇编语言指令、可以是汇编语言指令、可以是汇编语言指令、汇编伪指令、宏伪指令。汇编伪指令、宏伪指令。汇编伪
32、指令、宏伪指令。汇编伪指令、宏伪指令。助记符指令:助记符指令:助记符指令:助记符指令:一般用大写,一般用大写,一般用大写,一般用大写,不能从第一列开始不能从第一列开始不能从第一列开始不能从第一列开始;汇编伪指令:汇编伪指令:汇编伪指令:汇编伪指令:用来为程序提供数据和控制汇编进程。以句号用来为程序提供数据和控制汇编进程。以句号用来为程序提供数据和控制汇编进程。以句号用来为程序提供数据和控制汇编进程。以句号“.”.”开始,且用小写;开始,且用小写;开始,且用小写;开始,且用小写;宏伪指令:宏伪指令:宏伪指令:宏伪指令:用来定义一段程序,以便宏调用来调用这段程序。用来定义一段程序,以便宏调用来调用
33、这段程序。用来定义一段程序,以便宏调用来调用这段程序。用来定义一段程序,以便宏调用来调用这段程序。以句号以句号以句号以句号“.”开始,且用小写;开始,且用小写;开始,且用小写;开始,且用小写;宏调用:宏调用:宏调用:宏调用:用来调用由宏伪指令定义的程序段。用来调用由宏伪指令定义的程序段。用来调用由宏伪指令定义的程序段。用来调用由宏伪指令定义的程序段。403.3.3.3.操作数操作数操作数操作数 操作数是指操作数是指操作数是指操作数是指指令中参与操作的数值或汇编伪指令定义的指令中参与操作的数值或汇编伪指令定义的指令中参与操作的数值或汇编伪指令定义的指令中参与操作的数值或汇编伪指令定义的内容,紧跟
34、在助记符的后面,由一个或多个空格分开。内容,紧跟在助记符的后面,由一个或多个空格分开。内容,紧跟在助记符的后面,由一个或多个空格分开。内容,紧跟在助记符的后面,由一个或多个空格分开。操作数之间必须用逗号操作数之间必须用逗号操作数之间必须用逗号操作数之间必须用逗号“,”分隔;分隔;分隔;分隔;操作数可以是常数、符号或表达式;操作数可以是常数、符号或表达式;操作数可以是常数、符号或表达式;操作数可以是常数、符号或表达式;操作数中的常数、符号或表达式可用来作为地址、立操作数中的常数、符号或表达式可用来作为地址、立操作数中的常数、符号或表达式可用来作为地址、立操作数中的常数、符号或表达式可用来作为地址
35、、立即数或间接地址;即数或间接地址;即数或间接地址;即数或间接地址;作为操作数的前缀有三种情况:作为操作数的前缀有三种情况:作为操作数的前缀有三种情况:作为操作数的前缀有三种情况:使用使用使用使用“#”符号作为操作数的前缀;符号作为操作数的前缀;符号作为操作数的前缀;符号作为操作数的前缀;使用使用使用使用“*”符号作为符号作为符号作为符号作为操作数的操作数的操作数的操作数的前缀;前缀;前缀;前缀;使用使用使用使用“”符号作为符号作为符号作为符号作为操作数的操作数的操作数的操作数的前缀前缀前缀前缀。41 用用用用“#”作作作作前缀前缀前缀前缀 例如:例如:例如:例如:LabelLabelLabe
36、lLabel:ADDADDADDADD#99,99,B B B B STM#X_SIN,AR1STM#X_SIN,AR1 使用使用使用使用“#”号作为前缀,汇编器将操作数作为立即数处理。号作为前缀,汇编器将操作数作为立即数处理。号作为前缀,汇编器将操作数作为立即数处理。号作为前缀,汇编器将操作数作为立即数处理。即使操作数是寄存器或地址,也将作为立即数。即使操作数是寄存器或地址,也将作为立即数。即使操作数是寄存器或地址,也将作为立即数。即使操作数是寄存器或地址,也将作为立即数。如果操作数是地址,汇编器将把地址处理为一个数值,而如果操作数是地址,汇编器将把地址处理为一个数值,而如果操作数是地址,汇
37、编器将把地址处理为一个数值,而如果操作数是地址,汇编器将把地址处理为一个数值,而不使用地址的内容。不使用地址的内容。不使用地址的内容。不使用地址的内容。用用用用“*”作作作作前缀前缀前缀前缀 使用使用使用使用“*”符号作为前缀,汇编器将操作数作为间接地址,符号作为前缀,汇编器将操作数作为间接地址,符号作为前缀,汇编器将操作数作为间接地址,符号作为前缀,汇编器将操作数作为间接地址,即把操作数的内容作为地址。即把操作数的内容作为地址。即把操作数的内容作为地址。即把操作数的内容作为地址。42 用用用用“”作作作作前缀前缀前缀前缀 例如:例如:例如:例如:LabelLabel:LDLD xx,A A
38、使用使用使用使用“”符号作为前缀,汇编器将操作数作为直接地址,符号作为前缀,汇编器将操作数作为直接地址,符号作为前缀,汇编器将操作数作为直接地址,符号作为前缀,汇编器将操作数作为直接地址,即操作数由直接地址码赋值。即操作数由直接地址码赋值。即操作数由直接地址码赋值。即操作数由直接地址码赋值。只要只要只要只要DP=0DP=0,将直接地址将直接地址将直接地址将直接地址x x中的内容装入指定的累加器中的内容装入指定的累加器中的内容装入指定的累加器中的内容装入指定的累加器A A中。中。中。中。例如:例如:例如:例如:LabelLabel:LDLD *AR3AR3,B B 操作数操作数操作数操作数*AR
39、3AR3AR3AR3指定一个间接地址。该指令将引导汇编器找指定一个间接地址。该指令将引导汇编器找指定一个间接地址。该指令将引导汇编器找指定一个间接地址。该指令将引导汇编器找到寄存器到寄存器到寄存器到寄存器AR3AR3AR3AR3的内容作为地址,然后将该地址中的内容装入指的内容作为地址,然后将该地址中的内容装入指的内容作为地址,然后将该地址中的内容装入指的内容作为地址,然后将该地址中的内容装入指定的累加器定的累加器定的累加器定的累加器B B B B中。中。中。中。434.4.4.4.注释注释注释注释 用来说明指令功能的文字,便于用户阅读。用来说明指令功能的文字,便于用户阅读。用来说明指令功能的文
40、字,便于用户阅读。用来说明指令功能的文字,便于用户阅读。注释可注释可注释可注释可位于句首位于句首位于句首位于句首或句尾,位于句首时,以或句尾,位于句首时,以或句尾,位于句首时,以或句尾,位于句首时,以“*”或或或或“;”开开开开始,位于句尾时,以分号始,位于句尾时,以分号始,位于句尾时,以分号始,位于句尾时,以分号“;”开始。开始。开始。开始。注释是任选项注释是任选项注释是任选项注释是任选项;注释可注释可注释可注释可单单单单独一行或数行独一行或数行独一行或数行独一行或数行;11 00000 .11 00000 .11 00000 .11 00000 .bssbsssymsym,;保留空间于保留
41、空间于保留空间于保留空间于.bssbss *改变段,允许第五个改变段,允许第五个改变段,允许第五个改变段,允许第五个mylabmylab定义定义定义定义 *例如:例如:例如:例如:44 汇编程序中的符号用于标号、常数和替代字符。汇编程序中的符号用于标号、常数和替代字符。汇编程序中的符号用于标号、常数和替代字符。汇编程序中的符号用于标号、常数和替代字符。符号名最多可长达符号名最多可长达符号名最多可长达符号名最多可长达200200200200个字符;个字符;个字符;个字符;由字母、数字以及下划线和美元符号(由字母、数字以及下划线和美元符号(由字母、数字以及下划线和美元符号(由字母、数字以及下划线和
42、美元符号(AZAZAZAZ,azazazaz,0 0 0 09999,_ _ _ _和和和和$)等组成;)等组成;)等组成;)等组成;在符号中,第在符号中,第在符号中,第在符号中,第1 1 1 1位不能是数字,并且符号中不能含空格。位不能是数字,并且符号中不能含空格。位不能是数字,并且符号中不能含空格。位不能是数字,并且符号中不能含空格。作为标号的符号代表在程序中对应位置的符号地址。作为标号的符号代表在程序中对应位置的符号地址。作为标号的符号代表在程序中对应位置的符号地址。作为标号的符号代表在程序中对应位置的符号地址。通常,标号是局部变量,在一个文件中局部使用的标号必须通常,标号是局部变量,在
43、一个文件中局部使用的标号必须通常,标号是局部变量,在一个文件中局部使用的标号必须通常,标号是局部变量,在一个文件中局部使用的标号必须是唯一的。是唯一的。是唯一的。是唯一的。助记符操作码和汇编伪指令名助记符操作码和汇编伪指令名助记符操作码和汇编伪指令名助记符操作码和汇编伪指令名(不带前缀不带前缀不带前缀不带前缀“.”)为有效标号。为有效标号。为有效标号。为有效标号。标号分大小写。标号分大小写。标号分大小写。标号分大小写。例如:例如:例如:例如:ABCABC,AbcAbc,abcabc是是是是3 3个不同的符号。个不同的符号。个不同的符号。个不同的符号。在调用汇编器时使用在调用汇编器时使用在调用汇
44、编器时使用在调用汇编器时使用-c-c选项,可以不分大小写。选项,可以不分大小写。选项,可以不分大小写。选项,可以不分大小写。1.1.1.1.标号标号标号标号 二、汇编语言中的符号二、汇编语言中的符号 452.2.2.2.符号常数符号常数符号常数符号常数 【例例例例5.25.2】定义符号常数举例。定义符号常数举例。定义符号常数举例。定义符号常数举例。N N N N .setsetsetset 512 512 512 512 buffer buffer buffer buffer .setsetsetset 4*4*4*4*N N N N nzg1 nzg1 nzg1 nzg1 .setsetse
45、tset 1 1 1 1 nzg2 nzg2 nzg2 nzg2 .setsetsetset 2 2 2 2 nzg3 nzg3 nzg3 nzg3 .setsetsetset 3 3 3 3 item item item item .structstructstructstruct .intintintint nzgnzgnzgnzg1 1 1 1 .intintintint nzg nzg nzg nzg2 2 2 2 .intintintint nzg3 nzg3 nzg3 nzg3 tangtangtangtang .endstructendstructendstructendstru
46、ct arrayarrayarrayarray .tag itemtag itemtag itemtag item .bssbssbssbss array array array array,tangtangtangtang*N N N N;定义常数定义常数定义常数定义常数 ;itemitem结结结结构定构定构定构定义义义义 ;常数偏移常数偏移常数偏移常数偏移nzg1=1nzg1=1;常数偏移常数偏移常数偏移常数偏移nzg2=2nzg2=2 ;常数偏移常数偏移常数偏移常数偏移nzg2=3nzg2=3 ;声明数组声明数组声明数组声明数组 符号也可被设置成常数值。为了提高程序的可读性,可以用符号也
47、可被设置成常数值。为了提高程序的可读性,可以用符号也可被设置成常数值。为了提高程序的可读性,可以用符号也可被设置成常数值。为了提高程序的可读性,可以用有意义的名称来代表一些重要的常数值。有意义的名称来代表一些重要的常数值。有意义的名称来代表一些重要的常数值。有意义的名称来代表一些重要的常数值。464.4.4.4.替代符号替代符号替代符号替代符号 可将字符串值可将字符串值可将字符串值可将字符串值(变量变量变量变量)赋给符号,使符号名与该变量等效,赋给符号,使符号名与该变量等效,赋给符号,使符号名与该变量等效,赋给符号,使符号名与该变量等效,成为字符串的别名,这种用来代表变量的符号称为替代符号。成
48、为字符串的别名,这种用来代表变量的符号称为替代符号。成为字符串的别名,这种用来代表变量的符号称为替代符号。成为字符串的别名,这种用来代表变量的符号称为替代符号。当汇编器遇到替代符号时,将用字符串值替代符号。和当汇编器遇到替代符号时,将用字符串值替代符号。和当汇编器遇到替代符号时,将用字符串值替代符号。和当汇编器遇到替代符号时,将用字符串值替代符号。和符号常数不同,替代符号可以被重新定义。可在程序中的任何符号常数不同,替代符号可以被重新定义。可在程序中的任何符号常数不同,替代符号可以被重新定义。可在程序中的任何符号常数不同,替代符号可以被重新定义。可在程序中的任何地方将变量赋给替代符号。地方将变
49、量赋给替代符号。地方将变量赋给替代符号。地方将变量赋给替代符号。例如:例如:例如:例如:.asgasg highhigh,AR2AR2;寄存器寄存器寄存器寄存器AR2AR2 3.3.3.3.预先定义的符号常数预先定义的符号常数预先定义的符号常数预先定义的符号常数 汇编器有若干预先定义符号,包括:汇编器有若干预先定义符号,包括:汇编器有若干预先定义符号,包括:汇编器有若干预先定义符号,包括:美元符号美元符号美元符号美元符号$,代表段程序指,代表段程序指,代表段程序指,代表段程序指针针针针SPCSPCSPCSPC的当前值;的当前值;的当前值;的当前值;映像映像映像映像寄存器符号寄存器符号寄存器符号
50、寄存器符号,包括包括包括包括AR0AR7AR0AR7;映像寄存器由汇编器设置为符号,映像寄存器由汇编器设置为符号,映像寄存器由汇编器设置为符号,映像寄存器由汇编器设置为符号,指定存储器模式,由指定存储器模式,由指定存储器模式,由指定存储器模式,由-mkmk选项设置。选项设置。选项设置。选项设置。475.5.5.5.局部标号局部标号局部标号局部标号 局部标号是一种特殊的标号,使用的范围和影响是临时性的。局部标号是一种特殊的标号,使用的范围和影响是临时性的。局部标号是一种特殊的标号,使用的范围和影响是临时性的。局部标号是一种特殊的标号,使用的范围和影响是临时性的。注意:注意:注意:注意:局部局部局