版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DSPDSP原理与应用原理与应用第第5章章 TMS320C55x汇编语言编程汇编语言编程1参考资料:n山大课程中心DSPDSP原理与应用原理与应用网站: http:/ http:/nTMS320C55x DSP Mnemonic Instruction Set Reference Guide (SPRU374G, 2002年年)2第第5章章TMS320C55x汇编语言编程汇编语言编程n5.1 TMS320C55x软件开发流程软件开发流程n5.2 TMS320C55x目标文件格式目标文件格式n5.3 TMS320C55x汇编器汇编器n5.4 TMS320C55x汇编伪指令汇编伪指令n5.5 TM
2、S320C55x汇编语言源文件书写格式汇编语言源文件书写格式n5.6 TMS320C55x链接器链接器n5.7 一个完整的一个完整的TMS320C55x汇编程序汇编程序3第第5章章TMS320C55x汇编语言编程汇编语言编程n5.1 TMS320C55x软件开发流程软件开发流程5.1.1软件开发流程软件开发流程 5.1.2软件开发工具软件开发工具45.1 TMS320C55x软件开发流程软件开发流程5.1.1 软件开发流程软件开发流程l编程语言编程语言u汇编语言汇编语言 编程过程复杂,但程序执行效率高编程过程复杂,但程序执行效率高uC/C+语言语言 编程容易,但程序执行效率不如汇编语言编程容易
3、,但程序执行效率不如汇编语言l软件开发环境软件开发环境u集成集成开发环境开发环境CCS(Code Composer Studio)(第第3章章)u非集成非集成开发环境开发环境(本章介绍本章介绍)(:ticcsv5toolscompilerc5500_4.4.1bin中可执行文件中可执行文件)55.1.1 软件开发流程软件开发流程l非集成开发环境下非集成开发环境下,C55x的的软件开发流程软件开发流程和和所所用工具用工具与与CCS下是一样的下是一样的。因此本章有关内容也。因此本章有关内容也是学习是学习CCS的基础。的基础。l两个环境的不同在于:两个环境的不同在于:u CCS把有关把有关开发工具集
4、成在一个开发工具集成在一个Window界界面面下使用,使用更方便下使用,使用更方便u CCS增加了一些增加了一些新的开发工具新的开发工具,功能更强大,功能更强大6源程序源程序(.C或或.CPP) 源程序源程序(.asm) 目标文件目标文件(.obj) 库文件库文件(.lib) 可执行输出可执行输出文件文件(.out) 可脱机运行可脱机运行的执行程序的执行程序(.hex) 7图图5-1 非集成非集成开发开发环境下环境下C55x软件软件开发流程图开发流程图 :ticcsv5toolscompilerc5500_4.4.1bin (并列有并列有include和和lib文件夹文件夹)中可执行文件中可执
5、行文件(*.exe):ticcsv5toolscompilerc5500_4.4.1bin (并列有并列有include和和lib文件夹文件夹)中可执行文件中可执行文件(*.exe)u采用采用C/C+语言或汇编语言编写源文件语言或汇编语言编写源文件(.c或或.asm);u 经经C/C+编译器、汇编器生成编译器、汇编器生成COFF格式的目标文格式的目标文件件(.obj),再用链接器进行链接,生成在,再用链接器进行链接,生成在C55x上可上可执行的目标代码执行的目标代码(.out);u然后利用调试工具然后利用调试工具(软件仿真器软件仿真器simulator或硬件仿或硬件仿真器真器emulator)
6、对可执行目标代码进行仿真和调试。对可执行目标代码进行仿真和调试。u当调试完成后当调试完成后, 通过通过Hex代码转换工具代码转换工具, 将调试后的将调试后的可执行目标代码可执行目标代码(.out)转换成转换成EPROM编程器能接受编程器能接受的代码的代码(.hex); u并将该代码固化到并将该代码固化到EPROM中或加载到用户的应用系中或加载到用户的应用系统中统中, 以便以便DSP目标系统脱离计算机单独运行。目标系统脱离计算机单独运行。l 非集成开发环境下软件开发的流程图非集成开发环境下软件开发的流程图 9第第5章章TMS320C55x汇编语言编程汇编语言编程n5.1 TMS320C55x软件
7、开发流程软件开发流程5.1.1软件开发流程软件开发流程 5.1.2软件开发工具软件开发工具105.1.2 软件开发工具软件开发工具l代码生成工具代码生成工具u源代码编辑器源代码编辑器 采用汇编语言或采用汇编语言或C/C+语言编写的源程序均为语言编写的源程序均为文本文件,可以在任何一种文本编辑器中进行。如文本文件,可以在任何一种文本编辑器中进行。如WORD、EDIT、TC、Windows操作系统自带的操作系统自带的笔记本等笔记本等uC/C+编译器编译器 用来将用来将C/C+语言源程序语言源程序(.C或或.CPP)自动编译自动编译为为C55x的汇编语言源程序的汇编语言源程序(.asm)。115.1
8、.2 软件开发工具软件开发工具u汇编器汇编器 用来将汇编语言源文件用来将汇编语言源文件(.asm)汇编成机器语言汇编成机器语言COFF目标文件目标文件(.obj)。u链接器链接器将汇编生成的、可重新定位的将汇编生成的、可重新定位的COFF目标模块目标模块(.obj)组合成一个组合成一个可执行的可执行的COFF目标模块目标模块(.out)。u文档管理器文档管理器 允许用户将一组文件允许用户将一组文件(源文件或目标文件源文件或目标文件)集中为一个集中为一个文档文件库文档文件库 。125.1.2 软件开发工具软件开发工具u建库实用程序建库实用程序 用来建立用户自己使用的、并用用来建立用户自己使用的、
9、并用C/C+语言编写的语言编写的支持运行的库函数。支持运行的库函数。u十六进制转换程序十六进制转换程序(Hex代码转换工具代码转换工具) 可以很方便地将可以很方便地将COFF目标文件目标文件(.out)转换成转换成TI、Intel、Motorola等公司的目标文件格式等公司的目标文件格式(.hex) 。u绝对制表程序绝对制表程序(绝对地址列表器绝对地址列表器) 将链接后的目标文件作为输入将链接后的目标文件作为输入, 生成生成.abs输出文件输出文件,再再汇编成具有绝对地址的目标代码列表文件汇编成具有绝对地址的目标代码列表文件(.lst) 。 u交叉引用制表程序交叉引用制表程序(交叉引用列表器交
10、叉引用列表器) 利用目标文件生成一个交叉引用清单,列出链接利用目标文件生成一个交叉引用清单,列出链接的源文件中的的源文件中的符号以及它们的定义和引用情况符号以及它们的定义和引用情况。135.1.2 软件开发工具软件开发工具l代码调试工具代码调试工具 u软件仿真器(软件仿真器(Simulator) 是一种模拟是一种模拟DSP芯片各种功能并在非实时条芯片各种功能并在非实时条件下进行软件调试的调试工具,它不需目标硬件件下进行软件调试的调试工具,它不需目标硬件支持,只需在计算机上运行支持,只需在计算机上运行u硬件仿真器(硬件仿真器( XDS100,XDS510, XDS560 ) 可用来进行系统级的集
11、成调试,是进行可用来进行系统级的集成调试,是进行DSP芯片软硬件开发的最佳工具芯片软硬件开发的最佳工具14第第5章章TMS320C55x汇编语言编程汇编语言编程n5.1 TMS320C55x软件开发流程软件开发流程n5.2 TMS320C55x目标文件格式目标文件格式n5.3 TMS320C55x汇编器汇编器n5.4 TMS320C55x汇编伪指令汇编伪指令n5.5 TMS320C55x汇编语言源文件书写格式汇编语言源文件书写格式n5.6 TMS320C55x链接器链接器n5.7 一个完整的一个完整的TMS320C55x汇编程序汇编程序15(COFF)5.2 TMS320C55x目标文件格式目
12、标文件格式n5.2.1 COFF文件的基本单元文件的基本单元段段n5.2.2 汇编器对段的处理汇编器对段的处理n5.2.3 链接器对段的处理链接器对段的处理n5.2.4 链接器对程序的重新定位链接器对程序的重新定位n5.2.5 COFF文件中的符号文件中的符号16(通用目标文件格式通用目标文件格式COFF: Common Object File Format)5.2.1 COFF文件的基本单元文件的基本单元段段l通用目标文件格式通用目标文件格式COFF: Common Object File Formatl段段(section)是是COFF文件的基本单元文件的基本单元。一个段是一个。一个段是一
13、个占据存储器里占据存储器里连续地址的代码或者数据块连续地址的代码或者数据块, COFF目标目标文件的每个段都是分开和不同的文件的每个段都是分开和不同的lCOFF目标文件通常包括目标文件通常包括3个默认段,即个默认段,即.text段段,通常包含可执行代码,通常包含可执行代码.data段段,通常包含初始化数据,通常包含初始化数据.bss段段,通常为未初始化变量保留存储空间,通常为未初始化变量保留存储空间17l汇编器汇编器的一些的一些汇编伪指令汇编伪指令可将代码和数据的各个部可将代码和数据的各个部分与相应的段相联系;分与相应的段相联系;链接器链接器可将各段分配给相应可将各段分配给相应的存储器。的存储
14、器。图图5-2目标文件中的段与目标存储器的关系目标文件中的段与目标存储器的关系18.text、.data、.bss5.2 TMS320C55x目标文件格式目标文件格式n5.2.1 COFF文件的基本单元文件的基本单元段段n5.2.2 汇编器对段的处理汇编器对段的处理n5.2.3 链接器对段的处理链接器对段的处理n5.2.4 链接器对程序的重新定位链接器对程序的重新定位n5.2.5 COFF文件中的符号文件中的符号195.2.2 汇编器对段的处理汇编器对段的处理l汇编器通过段伪指令自动识别各个段,并将段名汇编器通过段伪指令自动识别各个段,并将段名相同的语句汇编在一起相同的语句汇编在一起;l汇编器
15、有汇编器有5条伪指令条伪指令可以识别汇编语言程序的各可以识别汇编语言程序的各个不同段个不同段:u.text、.data、.sect创建初始化段创建初始化段u.bss和和.usect创建未初始化段创建未初始化段u.sect与与.usect创建自定义段和子段创建自定义段和子段20本节内容本节内容: 1. 未初始化段未初始化段;2. 初始化段初始化段;3. 自定义段自定义段;4. 子段子段;5. 段指针段指针;段伪指令的使用段伪指令的使用1.未初始化段未初始化段l未初始化段未初始化段占用处理器存储空间占用处理器存储空间, 常常分配到常常分配到RAM;l未初始化段在目标文件里未初始化段在目标文件里无实
16、际内容无实际内容, 仅用于保留存储仅用于保留存储空间空间, 当程序在运行时用这些空间来当程序在运行时用这些空间来创建和存储变量创建和存储变量;l汇编命令汇编命令.bss和和.usect用来创建未初始化数据区域用来创建未初始化数据区域: .bss symbol, size ,blocking flag,alignment flagsymbol .usect ”section name”,size ,blocking flag ,alignment flagsize: size: 为对应段开辟的存储空间为对应段开辟的存储空间大小大小, , 单位为单位为字字。symbol: symbol: 指向指向
17、.bss.bss或者或者.usect.usect指指令创建的令创建的段的第一个字段的第一个字, , 对应该对应该存储空间的存储空间的变量名变量名; ; 可被其他段可被其他段引用引用, ,被声明为一个被声明为一个全局符号全局符号。section name:section name:段名段名, , 例例varvar21blocking flagblocking flag: : 可选。若是可选。若是非零值非零值, , 汇编器汇编器会连续分配会连续分配size字空间字空间, , 这些这些区域块不会跨区域块不会跨越一页边界越一页边界( (size ROM .switch ROM .const ROM .
18、cinit ROM .vectors VECTOR .data RAM .bss RAM .sysmem RAM .stack RAM .sysstack RAM .cio RAM42File1.obj.text1(.text).data1(.data).bss1(.bss)table1(.table) (初始化的命名段初始化的命名段)u_vars1 (未初始化的命名段未初始化的命名段)File2.obj.text2(.text).data2(.data).bss2(.bss)table2(.table) (初始化的命名段初始化的命名段)u_vars2 (未初始化的命名段未初始化的命名段)FF
19、T(初始化的命名段初始化的命名段)程序存储器程序存储器数据存储器数据存储器43图图5-4 两个文件的链接过程两个文件的链接过程5.2 TMS320C55x目标文件格式目标文件格式n5.2.1 COFF文件的基本单元文件的基本单元段段n5.2.2 汇编器对段的处理汇编器对段的处理n5.2.3 链接器对段的处理链接器对段的处理n5.2.4 链接器对程序的重新定位链接器对程序的重新定位n5.2.5 COFF文件中的符号文件中的符号445.2.4 链接器对程序的重新定位链接器对程序的重新定位1. 地址重新定位地址重新定位l汇编器对每个段汇编时都是从汇编器对每个段汇编时都是从0地址开始地址开始,所有需要
20、,所有需要重重新定位新定位的符号的符号(标号标号)在段内都是相在段内都是相对于对于0地址地址的的;l事实上所有段都事实上所有段都不可能从存储器中不可能从存储器中0地址单元开始地址单元开始,因,因此链接器必须对各个段进行此链接器必须对各个段进行重新定位重新定位 ;l重新定位的方法:重新定位的方法:u将将各段配置到存储器中各段配置到存储器中, 使每段都有一使每段都有一合适起始地址合适起始地址;u调整调整符号变量值符号变量值(例例5-2的的Z,Y)到使其反映到使其反映新的段地址新的段地址; u调整相对于调整相对于重新定位后的符号重新定位后的符号间的距离偏离值间的距离偏离值(例例5-2的的”B Z”)
21、,使其反映调整后的,使其反映调整后的新符号值新符号值(例例5-2的的Z)。45例例5-2,程序重新定位。,程序重新定位。1 .ref X; X在在其它文件中其它文件中已定义已定义2 .ref Z; Z在在其它文件中其它文件中已定义已定义3 000000 .text4 000000 4A048 B Y5 000002 6A00 B Z ; 产生产生重新定位重新定位入口程序地址入口程序地址 000004 0000!6 000006 7600 MOV #X,AC0; 产生产生重新定位重新定位入口程序地址入口程序地址 000008 0008!7 00000a 9400 Y: RESET 符号符号Y与与
22、SPC关系固定不需要重新定位关系固定不需要重新定位,符号符号Z与与本段本段SPC相相对关系不确定对关系不确定, 需要需要重新定位重新定位,因为它定义在,因为它定义在另一个的文件另一个的文件里。里。 汇编代码时,汇编代码时,X和和Z的值为的值为0(汇编器假设所有未定义的外部汇编器假设所有未定义的外部符号都为符号都为0)。)。汇编器为汇编器为X和和Z产生重新定位入口地址。对产生重新定位入口地址。对X和和Z的引用都是外部引用(在列表中由的引用都是外部引用(在列表中由!符号表示符号表示)。)。 46MOV K16, dst操作码操作码0111 0110 KKKK KKKK KKKK KKKK FDDD
23、 10 xxFDDD: 0000 Accumulator 0 (AC0);B L24 操作码操作码0110 1010 PPPP PPPP PPPP PPPP PPPP PPPP;L7 编码成以字节为单位的符号偏移编码成以字节为单位的符号偏移程序地址程序地址;B L7 操作码操作码0100 101E 0LLL LLLL2.运行时间重新定位运行时间重新定位l在实际运行中,有时需要将在实际运行中,有时需要将代码装入存储器的一个代码装入存储器的一个地方地方,而在,而在另一个地方运行另一个地方运行。如:一些关键的执行代码必须如:一些关键的执行代码必须装在系统的装在系统的ROM中,中,但运行时希望在较快的
24、但运行时希望在较快的RAM中进行中进行。l利用利用SECTIONS伪指令选项可让链接器对其定位伪指令选项可让链接器对其定位2次,方法如下:次,方法如下:u使用使用load关键字设置关键字设置装入地址装入地址u使用使用run关键字设置它的关键字设置它的运行地址运行地址例例SECTIONS中中: .text: load =ROM, run=800h475.2 TMS320C55x目标文件格式目标文件格式n5.2.1 COFF文件的基本单元文件的基本单元段段n5.2.2 汇编器对段的处理汇编器对段的处理n5.2.3 链接器对段的处理链接器对段的处理n5.2.4 链接器对程序的重新定位链接器对程序的重
25、新定位n5.2.5 COFF文件中的符号文件中的符号485.2.5 COFF文件中的符号文件中的符号lCOFF文件中有一个文件中有一个符号表符号表,主要用来存储程序中有,主要用来存储程序中有关符号的信息关符号的信息;l 链接器链接器在执行在执行程序定位程序定位时时, 要使用符号表提供的信息,要使用符号表提供的信息,而而调试工具调试工具也要使用该表来提供也要使用该表来提供符号调试符号调试。 491. 外部符号外部符号l在在一个模块中定义、而在另一个模块中引用的符号一个模块中定义、而在另一个模块中引用的符号。l可用伪指令可用伪指令.def、.ref或或.global来来定义或引用定义或引用: u.
26、def :定义定义符号符号; 用来定义在当前模块中定义、可在别用来定义在当前模块中定义、可在别的模块中引用的符号的模块中引用的符号;u.ref :引用引用符号符号; 当前模块引用在其他模块中定义的符号当前模块引用在其他模块中定义的符号;u.global:定义全局符号定义全局符号; 可以是上面的任何一种情况。可以是上面的任何一种情况。2. 符号表符号表.def x ;定义内部符号定义内部符号x.ref y ;引用外部符号引用外部符号, y在其它文件中已定义在其它文件中已定义x: ADD #86, AC0, AC1 ; 定义定义x B y ; 引用引用y50例例5-3,外部符号的使用。,外部符号的
27、使用。l每当遇到一个每当遇到一个外部符号外部符号, 无论是定义的还是引用的无论是定义的还是引用的, 汇汇编器都将在编器都将在符号表中产生一条记录符号表中产生一条记录。l每个段在每个段在COFF文件里文件里都有一个都有一个可重新定位符号记录表可重新定位符号记录表, 段中每次引用段中每次引用重新定位符号重新定位符号, 就对应记录表中的一条就对应记录表中的一条记录。记录。链接器使用这些符号表进行引用符号重新定位链接器使用这些符号表进行引用符号重新定位 。第第5章章TMS320C55x汇编语言编程汇编语言编程n5.1 TMS320C55x软件开发流程软件开发流程n5.2 TMS320C55x目标文件格
28、式目标文件格式n5.3 TMS320C55x汇编器汇编器n5.4 TMS320C55x汇编伪指令汇编伪指令n5.5 TMS320C55x汇编语言源文件书写格式汇编语言源文件书写格式n5.6 TMS320C55x链接器链接器n5.7 一个完整的一个完整的TMS320C55x汇编程序汇编程序515.3 TMS320C55x 汇编器汇编器n 5.3.1 汇编器概述汇编器概述n 5.3.2 汇编程序的运行汇编程序的运行n 5.3.3 C55x汇编器的特点汇编器的特点525.3.1 汇编器概述汇编器概述lTMS320C55x有有2个汇编器,即:个汇编器,即:umasm55: 助记符指令汇编器,接受助记符
29、指令汇编器,接受C54x和和C55x助记符指令汇编源程序。助记符指令汇编源程序。uasm55: 代数指令汇编器,只接受代数指令汇编器,只接受C55x代数指代数指令汇编源程序。令汇编源程序。l本章只介绍介绍助记符指令汇编器本章只介绍介绍助记符指令汇编器masm55,关于,关于代数指令汇编器代数指令汇编器asm55可参考文献可参考文献SPRU375E,TMS320C55x DSP Algebraic Instruction Set Reference Guide53(:ticcsv5toolscompilerc5500_4.4.1bin中有可执行文件中有可执行文件):ticcsv5toolscom
30、pilerc5500_4.4.1bin (并列有并列有include和和lib文件夹文件夹)中可执行文件中可执行文件(*.exe)l 汇编器具有如下功能:汇编器具有如下功能:u处理文本格式的源文件处理文本格式的源文件(.asm, .cmd,.c等等),产产生生可重新定位的可重新定位的C55x目标文件(目标文件(.obj);u产生列表文件产生列表文件(可选),可对该列表进行控制(可选),可对该列表进行控制;u允许允许把代码分段把代码分段,对每一个目标代码段提供一,对每一个目标代码段提供一个段指针个段指针SPC;u定义和引用全局符号定义和引用全局符号,并提供源文件交叉引用,并提供源文件交叉引用表(
31、可选)表(可选);u汇编条件程序块汇编条件程序块 ;u支持宏功能,允许定义支持宏功能,允许定义宏命令宏命令。555.3 TMS320C55x 汇编器汇编器n 5.3.1 汇编器概述汇编器概述n 5.3.2 汇编程序的运行汇编程序的运行n 5.3.3 C55x汇编器的特点汇编器的特点565.3.2 汇编程序的运行汇编程序的运行l命令格式:命令格式:masm55 input file object file listing file -options 其中:其中:uinput file: 汇编源文件名汇编源文件名, 默认扩展名为默认扩展名为.asm; ulisting file: 汇编器产生的列表
32、文件名汇编器产生的列表文件名, 默认扩展名默认扩展名为为.lst ;u-options: 汇编器的选项汇编器的选项, 为汇编器的使用提供各种为汇编器的使用提供各种选择。选择。57:ticcsv5toolscompilerc5500_4.4.1bin masm55.exe表表5-1 汇编器汇编器masm55的选项及其功能的选项及其功能58选 项功 能-filemane(文件名)可以将文件名的内容附加到命令行上。 使用该选项可以避免命令行长度的限制。如果在一个命令文件、文件名或选项参数中包含了嵌入的空格或连字号,则必须使用引号括起来,例如:“this-file.asm”。 -a建立一个绝对列表文件
33、;当选用-a时,汇编器不产生目标文件。-c使汇编语言文件中大小写没有区别。-d为名字符号设置初值。格式为-d name=value时,与汇编文件被插入name .set =value是等效的。如果value被省略,则此名字符号被置为1。 -f抑制汇编器给无.asm扩展名的文件添加扩展名的默认行为。 -g允许汇编器在源代码中进行代码调试。汇编语言源文件中每行的信息输出到COFF文件中。注意:用户不能对已经包含.line伪指令的汇编代码使用-g 选项。例如由C/C+编译器运行-g选项产生的代码。 -h,-help,-? 这些选项的任一个将显示可供使用的汇编器选项的清单。 -hc将选定的文件复制到汇
34、编模块。格式为-hc filename所选定的文件包含到源文件语句的前面,复制的文件将出现在汇编列表文件中。 表表5-1 汇编器汇编器masm55的选项及其功能的选项及其功能59选 项功 能-hi将选定的文件包含到汇编模块。格式为-hi filename所选定的文件包含到源文件语句的前面,所包含的文件不出现在汇编列表文件中。 -i规定一个目录。汇编器可在这个目录下找到.copy,.include或.mlib命令所命名的文件。格式为-i pathname, 最多可规定10个目录, 每一条路径名的前面都必须加上-i选项。 -l (小写l)生成一个列表文件。 ma(ARMS模式)程序执行期间使能AR
35、MS位。缺省状态下, 禁止ARMS。mc (CPL模式)程序执行期间使能CPL位。缺省状态下, 禁止CPL。mh使汇编器处理C54x源程序时,产生快速代码。缺省状态下,产生的是小规模代码。mk使C55x 为大内存模式,设置_large_model symbol 为1,为链接器提供检测小模式和大模式目标模型非法组合的信息。ml(C54x兼容模式) 程序执行期间使能C54CM 位。缺省状态下,禁止C54CM。mn使汇编器取消C54x延时分支/调用指令处的NOP指令。3.2.5 构建构建(Build)操作的参数设置操作的参数设置60n构建参数包括构建参数包括汇编器参数和链接器参数汇编器参数和链接器参
36、数(对对C程序还包程序还包括编译器参数括编译器参数)。 方法方法:将鼠标移至将鼠标移至“Project Explorer” 中中的当前工程文件的当前工程文件Ex3_1.pjt处处, 右击右击菜单菜单选择选择“Properties”, 打开打开Properties窗口。窗口。3.2.5 构建构建(Build)操作的参数设置操作的参数设置61n构建参数包括汇编器参数和链接器参数构建参数包括汇编器参数和链接器参数(对对C程序还包程序还包括编译器参数括编译器参数)。 方法方法:将鼠标移至将鼠标移至“Project Explorer” 中中的当前工程文件的当前工程文件Ex3_1.pjt处处, 右击右击菜
37、单菜单选择选择“Properties”, 打开打开Properties窗口。窗口。打钩后打钩后, 再构建后会产生列表文件再构建后会产生列表文件Ex3_1. lst 点击选择汇编选项点击选择汇编选项 Generate listing file (-asm_listing,-al)62选 项功 能mt使汇编器处理C54x源程序时禁止SST 位。缺省状态下,禁止SST 位为使能状态。mv使汇编器在处理某些可变长度指令时使用最大(P24)格式。缺省状态下,汇编器总是试图把所有变长度指令分解成最小长度。purecirc使汇编器处理C54x源程序文件时,使用C54x循环寻址方式(不使用C55x循环寻址方式
38、)-q抑制汇编的标题以及所有的进展信息。 -r, -rnum压缩汇编器由num标识的标志。该标志是报告给汇编器的消息,这种消息不如警告严重。若不对num指定值,则所有标志都将被压缩。-s 把所有定义的符号放进目标文件的符号表中。 汇编程序通常只将全局符号放进符号表。当利用-s选项时, 所定义的标号以及汇编时定义的常数也都放进符号表内。 -u ,-u name取消预先定义的常数名,从而不考虑由任何-d选项所指定的常数。 -x产生一个交叉引用表,并将它附加到列表文件的最后,还在目标文件上加上交叉引用信息。即使没有要求生成列表文件,汇编程序总还是要建立列表文件的。 表表5-1 汇编器汇编器masm5
39、5的选项及其功能的选项及其功能5.3 TMS320C55x 汇编器汇编器n 5.3.1 汇编器概述汇编器概述n 5.3.2 汇编程序的运行汇编程序的运行n 5.3.3 C55x汇编器的特点汇编器的特点635.3.3 C55x汇编器的特点汇编器的特点1.字节字节/字寻址字寻址l对于对于代码代码采用采用字节寻址字节寻址方法方法l对于对于数据数据则采用则采用字寻址字寻址方法方法l对于对于.struct 或或 .union中的中的偏移量偏移量总是总是以以字为单位字为单位计算,即汇编器总是计算,即汇编器总是把把.struct或或.union 视为数据视为数据64例例5-4,C55x数据的字寻址方法。数据
40、的字寻址方法。.def Struct1, Struct2.bss Struct1, 8 ;为为Struct1分配分配8个字个字.bss Struct2, 6 ;为为Struct2分配分配6个字个字.textMOV *(#(Struct1+2),T0 ; 加载加载Struct1的第的第3个字个字MOV *(#1000h),T1 ; 0 x1000是是绝对字地址绝对字地址65例例5-5,C55x代码的字节寻址方法。代码的字节寻址方法。.text.ref FuncCALL #(Func+3) ; 跳转到跳转到(Func+3字节字节)处处CALL #0 x1000 ; 0 x1000是绝对是绝对字节地
41、址字节地址2.可变长度指令解码可变长度指令解码l缺省缺省状态下,状态下,汇编汇编器尽量把所有的可变长度指令解码器尽量把所有的可变长度指令解码成成最小长度最小长度。(例例: B L7; B L16; B P24)l当汇编时当汇编时不知道具体跳转地址时不知道具体跳转地址时(如它可能是在另一个如它可能是在另一个文件中定义的符号文件中定义的符号),汇编器将选择汇编器将选择最大长度最大长度的指令的指令,即即B P24指令。指令。l涉及可变长度指令解码问题的指令还有几组涉及可变长度指令解码问题的指令还有几组(例例: BCC L4, cond; BCC L8, cond; BCC L16, cond; BC
42、C P24, cond)。l在在某些情况某些情况下,用户可能希望选择下,用户可能希望选择最大长度最大长度(P24)指指令令, 因为某些指令的因为某些指令的P24实现方式比长度更小的实现方实现方式比长度更小的实现方式执行式执行速度更快速度更快。例如例如, “B P24”占用占用4个字节和个字节和3个个周期,而周期,而“B L7” 占用占用3个字节个字节和和4个个周期,在编译器选项中使用周期,在编译器选项中使用mv即可实现这一目的。即可实现这一目的。663.存储器模式存储器模式(Memory Modes )l汇编器支持汇编器支持3种存储器模式种存储器模式,即,即uC54x兼容模式兼容模式uCPL模
43、式模式uARMS模式模式 分别对应于分别对应于3个状态位个状态位C54CM、CPL和和ARMS的值。的值。67参考参考“第第6章章: 6.2.7 存储器模式存储器模式”-小存储模式小存储模式(默默认认)和和大存储器模式大存储器模式(_LARGE_MODEL=1)或参考或参考5.5.3 汇编源程序中的符号汇编源程序中的符号(预定义的符号常数预定义的符号常数)memory model C54CM=1 or 0CPL=1 or 0ARMS=1 or 0(1)C54x兼容模式兼容模式l.c54cm_on(C54CM=1)和和.c54cm_off(C54CM=0)指令用于与指令用于与C54x代码兼容。代
44、码兼容。l当当汇编器命令行汇编器命令行选项和选项和指令指令发生发生冲突冲突时时, 指令具有较高指令具有较高优先权。优先权。(所有位于所有位于.c54 cm_on和和.c54cm_off指令之指令之间的汇编源代码将在间的汇编源代码将在C54x兼容模式下汇编兼容模式下汇编)l .c54cm_on和和.c54cm_off指令指令的作用域是的作用域是静态静态的的, 不不受汇编程序流的影响。受汇编程序流的影响。l在在C54x兼容模式兼容模式下下, AR0 取代取代T0 (C55x变址寄存器变址寄存器) 。例如,例如,* *(AR5+T0)(AR5+T0)在在C54xC54x兼容模式下无效兼容模式下无效,
45、 , 应该用应该用* *(AR5 + AR0(AR5 + AR0。68汇编器的汇编器的mlml命令行选项命令行选项C54CM=1uThe The assembler cannot track the value of the status bits.assembler cannot track the value of the status bits. You must You must use assembler directives use assembler directives and/or command line and/or command line options option
46、s to inform the assembler to inform the assembler of the value of these bits.of the value of these bits. BCLR C54CM;硬指令 .c54cm_off; 伪指令uAn instruction that modifies the value of the C54CM, CPL, An instruction that modifies the value of the C54CM, CPL, or ARMS status bit must be immediately followed
47、by an or ARMS status bit must be immediately followed by an appropriate assembler directive. appropriate assembler directive. (2)CPL模式模式lCPL模式影响直接寻址方式模式影响直接寻址方式l.cpl_on(CPL=1)和和.cpl_off(CPL=0)指令的作用域指令的作用域是静态的是静态的, 不受汇编程序流的影响不受汇编程序流的影响;l在在CPL模式模式(.cpl_on)下,存储器直接寻址与堆栈指下,存储器直接寻址与堆栈指针针(SP)相关相关, 语法为语法为*S
48、P(dma);l在在默认模式默认模式(.cpl_off)下,存储器直接寻址与数据页下,存储器直接寻址与数据页寄存器寄存器(DP)相关相关,语法为,语法为dma。在在.cpl_on和和.cpl_off指令之间的汇编代码将在指令之间的汇编代码将在CPL模式模式 (CPL=1)下汇编。下汇编。69等价于汇编器等价于汇编器mcmc命令行选项命令行选项lARMS模式影响间接寻址方式模式影响间接寻址方式l .arms_on(ARMS=1)和和.arms_off(ARMS=0)指令指令的作用域是静态的的作用域是静态的, 不受汇编程序流的影响不受汇编程序流的影响;l在在默认模式默认模式(.arms_off)下
49、下, 编译器选择编译器选择DSP方式方式, 存存储器间接寻址方式的短偏移操作数无效储器间接寻址方式的短偏移操作数无效;l在在ARMS模式模式(.arms_on)下下, 编译器选择编译器选择控制器方式控制器方式, 存储器间接寻址方式的存储器间接寻址方式的短偏移操作数有效短偏移操作数有效, 有助于优化有助于优化代码长度。代码长度。在在.arms_on和和.arm s_off指令之间的汇编代码将在指令之间的汇编代码将在ARMS模式模式(ARMS=1)下汇编。下汇编。70等价于汇编器等价于汇编器ma命令行选项命令行选项(3)ARMS模式模式*ARn(short(#k3)4.汇编器关于汇编器关于MMR寻
50、址的警告寻址的警告l当存储器映像寄存器当存储器映像寄存器(MMR)用于单存储器操作数用于单存储器操作数(Smem)位置时位置时, 汇编器提示汇编器提示”Using MMR address”警告警告, 意味意味着汇编器将着汇编器将MMR认为是认为是DP间间直接寻址直接寻址操作数操作数;l为使指令正常执行为使指令正常执行, DP必须设为必须设为0。71例例: ADD SP,T0; 产生产生”Using MMR address” 警告语句:警告语句:”file.asm”, WARNING! at line 1: W9999 Using MMR address.汇编器关于这条指令影响的警告表示:汇编器
51、关于这条指令影响的警告表示:ADD value at address(DP+MMR address of SP),T0使用此指令最好的方式是:使用此指令最好的方式是:ADD mmap(SP),T0 ADD mmap(SP),T0当当已知已知DP值为值为0时时, 用用符号符号, 以避免警告以避免警告: ADD SP,T0SP寄存器MMR地址有两个:000018h和00004dh,直接寻址时用高地址寻址的是000018h单元内容若DP值非0, 例如DPH=DP=20H, 则”ADD SP,T0”中SP寻址的是206dh单元值第第5章章TMS320C55x汇编语言编程汇编语言编程n5.1 TMS32
52、0C55x软件开发流程软件开发流程n5.2 TMS320C55x目标文件格式目标文件格式n5.3 TMS320C55x汇编器汇编器n5.4 TMS320C55x汇编伪指令汇编伪指令n5.5 TMS320C55x汇编语言源文件书写格式汇编语言源文件书写格式n5.6 TMS320C55x链接器链接器n5.7 一个完整的一个完整的TMS320C55x汇编程序汇编程序725.4 TMS320C55x汇编伪指令汇编伪指令 伪指令用于处理汇编和连接过程,是汇伪指令用于处理汇编和连接过程,是汇编语言源程序的重要组成部分,但是最后编语言源程序的重要组成部分,但是最后产生的目标文件不包括它们。产生的目标文件不包
53、括它们。n 5.4.1 汇编伪指令汇编伪指令n 5.4.2 宏指令宏指令735.4.1 汇编指令汇编指令l汇编指令汇编指令为程序提供数据和汇编过程的控制为程序提供数据和汇编过程的控制, 功能有:功能有:u把代码和数据汇编到指定的段把代码和数据汇编到指定的段(.text, .data, .sect)u在存储区为非初始化变量保留存储空间在存储区为非初始化变量保留存储空间(.bss, .usect)u控制列表文件的内容控制列表文件的内容(. list, .mlist等等)u初始化存储器初始化存储器(.word , .char , .float, .long等等)u汇编条件块汇编条件块(.if , .
54、else , .loop, .endloop等等)u声明全局变量声明全局变量(.def , .ref, .global等等)u指定宏指令库指定宏指令库, 这是所用到宏指令的宏定义文件这是所用到宏指令的宏定义文件(.macro等等)u符号值定义指令符号值定义指令(.equ, .eval, .set等等)l汇编伪指令和其参数必须写汇编伪指令和其参数必须写在一行中在一行中,可带标号和注释可带标号和注释.74表表5-2 定义段的汇编伪指令定义段的汇编伪指令指令格式指令格式说说 明明.bss symbol,size,blocking,alignment定义定义.bss段段, 段长度段长度size的单位为
55、字的单位为字.clink “section name”当前段或者指定段当前段或者指定段使能有条件连接使能有条件连接.data定义一个定义一个.data段段.sect “section name”定义一个自定义段定义一个自定义段.text定义一个定义一个.text段段symbol .usect “section name”, size ,blocking ,align ment定义一个自定义段定义一个自定义段, 段长度段长度size的单位的单位为字为字75表表5-3 初始化常数(数据和存储器)伪指令(初始化常数(数据和存储器)伪指令(1)指令格式指令格式说说 明明.byte value_l,va
56、lue_n当前段初始化一个或者多个连当前段初始化一个或者多个连续的字节或字续的字节或字.char value_l,value_n.double value_l,value_n 初始化一个或者多个初始化一个或者多个64位位,IEEE双精度浮点常数双精度浮点常数.ldouble value_l,value_n.field value,size初始化一个变量长度的域初始化一个变量长度的域.float value_l,value_n初始化一个或者多个初始化一个或者多个32位位,IEEE单精度浮点常数单精度浮点常数.half value_l,value_n初始化一个或多个初始化一个或多个16位整数位整数
57、.short value_l,value_n初始化一个或多个初始化一个或多个16位整数位整数.int value_l,value_n初始化一个或多个初始化一个或多个16位整数位整数.long value_l,value_n初始化一个或多个初始化一个或多个32位整数位整数.pstring “string_1” , “string_n”初始化一个或多个文本字符串初始化一个或多个文本字符串(从左开始每两个字符打包成一从左开始每两个字符打包成一个字个字, 若是奇数个若是奇数个, 最右字节是最右字节是0)76表表5-3 初始化常数(数据和存储器)伪指令(初始化常数(数据和存储器)伪指令(2)指令格式指令
58、格式说说 明明.space size在当前段保留存储空间,在当前段保留存储空间,size的单位的单位为位为位.string “string_1”, “string_n”初始化一个或多个文本字符串初始化一个或多个文本字符串, 每个每个字符占一个字字符占一个字.ubyte value_l,value_n初始化当前段的连续字节或字初始化当前段的连续字节或字.uchar value_l,value_n.uhalf value_l,value_n初始化一个或多个无符号初始化一个或多个无符号16位整数位整数.ushort value_l,value_n.uint value_l,value_n初始化一个或
59、多个无符号初始化一个或多个无符号16位整数位整数.ulong value_l,value_n初始化一个或多个无符号初始化一个或多个无符号32位整数位整数.uword value_l,value_n 初始化一个或多个无符号初始化一个或多个无符号16位整数位整数.word value_l,value_n初始化一个或多个初始化一个或多个16位整数位整数.xfloat value_l,value_n初始化一个或多个初始化一个或多个32位位,IEEE单精度单精度浮点常数浮点常数, 但是在但是在长字边界不对齐长字边界不对齐.xlong value_l,value_n初始化一个或多个初始化一个或多个32位整
60、数位整数,但是,但是在在长字边界不对齐长字边界不对齐77表表5-4 对齐段程序计数器(对齐段程序计数器(SPC)指令)指令指令格式指令格式说说 明明.align size将将SPC对齐由参数对齐由参数size指定的一个边界指定的一个边界,参数必须是参数必须是2的指数的指数(2 2n n, , n= 07n= 07)。size的单位对于的单位对于代码段为字节代码段为字节, 对于对于数据段数据段为字为字, 默认为默认为128字节字节(代码段代码段)或者或者128字字(数据段数据段).even等于等于.align 278表表5-5 引用其他文件的指令引用其他文件的指令指令格式指令格式说说 明明.co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《工作流程集合》课件
- 《肠杆菌科的细菌》课件
- 2024年汽车配件质量控制及认证服务合同范本3篇
- 《外耳道异物讲稿》课件
- 2024年度生物制药研发与市场推广合同样本2篇
- 2024商铺租赁装修合同:涵盖商铺租赁市场调研与风险评估条款3篇
- 2025运输合同危险品运输合同范本
- 2024图书购置项目与图书馆信息素养教育服务合同3篇
- 2024年标准农作物种植合作合同范本版B版
- 2025房地产信贷部职工住房抵押贷款合同
- 护理年终个人工作总结
- 中华人民共和国学前教育法
- 2024-2025学年五年级科学上册第二单元《地球表面的变化》测试卷(教科版)
- 马王卫生院医疗质量提升攻坚年行动部署落实情况汇报
- 2023-2024部编版小学六年级《道德与法治》上册全册教案
- 《现代汉语》(增订6版)笔记和课后习题(含考研真题)详解
- 政法系统诗朗诵
- 高尔基《我的大学》
- 化工有限公司生产安全事故应急预案
- 律师事务所战略合作协议 范文 模板
- 工商卷烟物流在途信息系统-使用手册-数据采集系统
评论
0/150
提交评论