《第4章课程汇编语言程序设计》由会员分享,可在线阅读,更多相关《第4章课程汇编语言程序设计(137页珍藏版)》请在金锄头文库上搜索。
1、第4章课程汇编语言程序设计 4.1 C54x的软件开发过程 提供2种编程语言:汇编语言 C/C+语言 对于完成一般功能的代码,这两种语言都可使用,但对于一些运算量很大的关键代码,最好采用汇编语言来完成,以提高程序的运算效率。 C54x的软件开发过程可以分为文本编辑、编译、汇编和连接这样四个基本步骤,如图4-1所示。 第第4 4章章 汇编语言程序设计汇编语言程序设计2第第4 4章章 汇编语言程序设计汇编语言程序设计3 C54x C54x的软件开发需要借助于的软件开发需要借助于TITI公司提供的软件开发公司提供的软件开发工具:编译器、汇编器和连接器,另外还有一些辅助工具:编译器、汇编器和连接器,另
2、外还有一些辅助的软件包,如归档器、列表器和代码转换器等。的软件包,如归档器、列表器和代码转换器等。 这些软件开发工具都被集成在这些软件开发工具都被集成在CCS(Code CCS(Code Composer Studio)Composer Studio)开发环境中。将在第开发环境中。将在第6 6章详细介章详细介绍绍CCSCCS的组成及其使用方法的组成及其使用方法 第第4 4章章 汇编语言程序设计汇编语言程序设计4C源文件C编译器汇编源文件汇编器汇编源文件COFF目标文件链接器可执行的COFF文件宏源文件存档器宏库存档器目标文件库建库工具运行时支持库EPROM编程器交叉引用列表器调试工具TMS32
3、0C54x绝对地址列表器HEX代码转换工具第第4 4章章 汇编语言程序设计汇编语言程序设计5 汇编器和链接器生成的目标文件,是一个可以由C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。4.2 公共目标文件格式COFF 采用这种文件格式的优点是: 将指令和数据按照段的概念进行组织和存储,这使得程序的可读性大大增强,更容易编写程序,更便于进行程序的移植,更利于进行模块化的程序设计,为管理代码段及系统存储器提供了灵活的方法和手段。第第4 4章章 汇编语言程序设计汇编语言程序设计6 COFF文件有3种类型:COFF0、COFF1、COFF2 每种类型的COFF文件,其标题
4、格式都有所不同,但数据部分是相同的。 链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。第第4 4章章 汇编语言程序设计汇编语言程序设计7 所谓“段”就是在存储器映像中占据连续空间的一段独立的代码或数据。每个目标文件都分成若干段。 COFF目标文件包含以下三个默认的段: .text 段:通常内含可执行代码; .data段:通常内含已初始化数据; .bss段:是为没有初始化的数据保留空间的。 COFF目标文件的段又可分为两大基本类型:已初始化段和未初始化段。 第第4 4章章 汇编语言程序设计汇编语言程序设计8 包含程序代
5、码、常数表格和数据。每个段都可以独立的进行重定位,且可访问在其它段中定义的符号。已初始化段的值是不可修改的,因而一般将它们建立在程序存储器中。 主要有: .text段已初始化段; .data段已初始化段; .sect段已初始化段,由汇编器伪指令建立的自定义段。 第第4 4章章 汇编语言程序设计汇编语言程序设计9 是为变量在数据存储器中保留空间的。它们在目标文件中没有实际内容,只是保留出空间,在运行程序时再利用这些空间去建立和存储变量。未初始化段一般应建立在片内或片外RAM中。 由这些段定义的空间仅作为临时存储空间,在程序运行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,
6、分别由汇编器伪指令.bss和.usect产生。.第第4 4章章 汇编语言程序设计汇编语言程序设计10目标文件中的段与目标存储器之间的关系目标文件中的段与目标存储器之间的关系: : 目标文件目标存储器.bss.data.textRAME2PROMROM第第4 4章章 汇编语言程序设计汇编语言程序设计113. 段定义伪指令 汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分: .bss.bss .usect .usect .text .text .data .data .sect .sect定义未初始化段定义未初始化段定义未
7、初始化段定义未初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段第第4 4章章 汇编语言程序设计汇编语言程序设计12 定义已初始化段的伪指令定义已初始化段的伪指令 .text 段起点 .data 段起点 .sect “段名”,段起点段起点是任选项。 若选用,它为段程序计数器SPC定义一个起始值。 若默认,则SPC从0开始。第第4 4章章 汇编语言程序设计汇编语言程序设计13 定义未初始化段的伪指令定义未初始化段的伪指令 (1) .bss伪指令 用于在bss段中保留若干个空间。 格式:.bss 符号,字数,块标记,定位标记 符号对应于保留的存储空间第一个
8、字的变量名称。 字数表示在bss段或标有名字的段中保留若干个存储单元。 每调用一次.bss伪指令,汇编器在相应的段保留更多的空间。第第4 4章章 汇编语言程序设计汇编语言程序设计14 (2) .usect伪指令 用于为指定的命名段保留若干个空间。格式: 标号 .usect “段名”,字数,块标记,定位标记 建立一个自定义段但是没有初始化的段,在自定义的段中保留空间。 每调用一次.usect伪指令,汇编器在指定的命名段保留更多的空间。第第4 4章章 汇编语言程序设计汇编语言程序设计 定义未初始化段的伪指令定义未初始化段的伪指令15 例4-1:段定义程序举例。 .text .word 1,2,3,
9、4,5,6,7,8 .data .word 9,10,11,12 .word 13,14 .word 15,16 .sect “var1” .word 17,18 .bss x1,19;为.bss段保留19个字单元空间。 y1 .usect “var2”,40;为var2段保留40个单元空间。 第第4 4章章 汇编语言程序设计汇编语言程序设计16 上列程序建立了5个段,情况如下: .text段:8个16位字18。 .data段:8个16位字916。 Var1段:2个16位字17,18。 .bss段:保留19个字的连续空间,第一个单 元的标号是x1。 Var2段:保留40个字的连续空间,第一个单
10、元的标号是y1。 第第4 4章章 汇编语言程序设计汇编语言程序设计 例4-1:段定义程序举例。174.2.2 汇编器对段的建立 当汇编器遇到.text或.data或.sect命令时,将停止对当前段的汇编(相当于一条结束当前段汇编的命令),然后将紧接着的程序代码或数据汇编到指定的段中,直到再遇到另一条.text、.data或.sect命令为止。 当汇编器遇到.bss或.usect命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来,并开始对新的段进行汇编。第第4 4章章 汇编语言程序设计汇编语言程序设计18 段程序计数器段程序计数器SPCSPC 汇编器为每个段都安排了一个单独的程序计数器称之为
11、段程序计数器SPC。 SPC表示在程序代码或数据段内当前的地址。开始时汇编器将每个SPC置0。当汇编器将程序代码或数据加到段内时,增加相应的SPC值。若再继续对某个段汇编,则相应的SPC就在先前的数值上继续增加。第第4 4章章 汇编语言程序设计汇编语言程序设计4.2.2 汇编器对段的建立19 例例4-2 4-2 段定义应用举例段定义应用举例 汇编语言源程序: .data.datacoeff .word 011h,022h,033hcoeff .word 011h,022h,033h .bss buffer .bss buffer,10 10 prt .word 0123hprt .word 0
12、123h .text .textaddadd: LD 0Fh LD 0Fh,A A aloopaloop:SUB #1SUB #1,A A BC aloop BC aloop,AGEQAGEQ .data .dataivals .word 0AAhivals .word 0AAh,0BBh0BBh,0CCh0CCh ; ;初始化数据段初始化数据段 ;3;3组数据放入组数据放入.data.data段段 ; ;在在.bss.bss段保留段保留1010个单元个单元 ;0123h;0123h放入放入.data.data段段 ; ;初始化文本段初始化文本段 ;1;1字指令字指令 ;2;2字指令字指令 ;
13、2;2字指令字指令 ; ;初始化数据段初始化数据段 ;3;3组数据放入组数据放入.data.data段段第第4 4章章 汇编语言程序设计汇编语言程序设计20汇编语言源程序:汇编语言源程序:var2 .usect var2 .usect “ “newvarsnewvars” ”,1 1 inbuf .usect inbuf .usect “ “newvarsnewvars” ”,7 7 .text .text mpympy: LD 0AhLD 0Ah,B B mloopmloop: MPY #0AhMPY #0Ah,B B BC mloop BC mloop,BNOVBNOV .sect .se
14、ct “ “vectorsvectors” ” .word 011h .word 011h,033h 033h ; ;建立建立newvarsnewvars命名段命名段, ,保留保留1 1个单元个单元 ; ;在在newvarsnewvars段保留段保留7 7个单元个单元 ; ;初始化文本段初始化文本段 ;1;1字指令字指令 ;2;2字指令字指令 ;2;2字指令字指令 ; ;建立建立vectorsvectors命名段命名段 ;2;2组数据放入组数据放入vectorsvectors命名段命名段第第4 4章章 汇编语言程序设计汇编语言程序设计21经汇编后,得列表文件(部分):经汇编后,得列表文件(部分
15、): 2 *2 *3 * 3 * 汇编一个初始化表到汇编一个初始化表到. .datadata段段 * *4 *4 *5 0000 .data5 0000 .data6 0000 0011 coeff .word 011h,022h,033h 6 0000 0011 coeff .word 011h,022h,033h 0001 0022 0001 0022 0002 0033 0002 00337 *7 *8 * 8 * 在在.bss.bss段中为变量保留空间段中为变量保留空间 * *9 *9 *10 0000 .bss buffer10 0000 .bss buffer,101011 *11
16、 *12 * 12 * 仍然在仍然在.data .data 段中段中 * *13 *13 *14 0003 0123 prt 14 0003 0123 prt . .word 0123hword 0123h第第4 4章章 汇编语言程序设计汇编语言程序设计2215 *15 *16 * 16 * 汇编代码到汇编代码到.text.text段段 * *17 *17 *18 0000 .text18 0000 .text19 0000 100f add19 0000 100f add: LD 0FhLD 0Fh,A A20 0001 f010 aloop20 0001 f010 aloop: SUB #1SUB #1, A A 0002 0001 0002 0001 21 0003 f842 BC aloop21 0003 f842 BC aloop,AGEQ AGEQ 0004 0001 0004 0001 22 *22 *23 * 23 * 汇编另一个初始化表到汇编另一个初始化表到. .data data 段段 * * 24 *24 *25 0004 25 0004 . .data data