汇编语言程序开发工具

上传人:pu****.1 文档编号:592720777 上传时间:2024-09-22 格式:PPT 页数:176 大小:950KB
返回 下载 相关 举报
汇编语言程序开发工具_第1页
第1页 / 共176页
汇编语言程序开发工具_第2页
第2页 / 共176页
汇编语言程序开发工具_第3页
第3页 / 共176页
汇编语言程序开发工具_第4页
第4页 / 共176页
汇编语言程序开发工具_第5页
第5页 / 共176页
点击查看更多>>
资源描述

《汇编语言程序开发工具》由会员分享,可在线阅读,更多相关《汇编语言程序开发工具(176页珍藏版)》请在金锄头文库上搜索。

1、第第4章章 汇编语言程序开发工具汇编语言程序开发工具 内容提要内容提要内容提要内容提要内容提要内容提要 可编程可编程可编程可编程可编程可编程DSPDSPDSP芯片开发需要一套完整的软、硬件开芯片开发需要一套完整的软、硬件开芯片开发需要一套完整的软、硬件开芯片开发需要一套完整的软、硬件开芯片开发需要一套完整的软、硬件开芯片开发需要一套完整的软、硬件开发工具。通常可分成代码生成工具和代码调试工具两发工具。通常可分成代码生成工具和代码调试工具两发工具。通常可分成代码生成工具和代码调试工具两发工具。通常可分成代码生成工具和代码调试工具两发工具。通常可分成代码生成工具和代码调试工具两发工具。通常可分成代

2、码生成工具和代码调试工具两大类。大类。大类。大类。大类。大类。 代码生成工具是指将高级语言或汇编语言编写的代码生成工具是指将高级语言或汇编语言编写的代码生成工具是指将高级语言或汇编语言编写的代码生成工具是指将高级语言或汇编语言编写的代码生成工具是指将高级语言或汇编语言编写的代码生成工具是指将高级语言或汇编语言编写的DSPDSPDSP程序转换成可执行的程序转换成可执行的程序转换成可执行的程序转换成可执行的程序转换成可执行的程序转换成可执行的DSPDSPDSP芯片目标代码的工具程芯片目标代码的工具程芯片目标代码的工具程芯片目标代码的工具程芯片目标代码的工具程芯片目标代码的工具程序,主要包括汇编器、

3、链接器和序,主要包括汇编器、链接器和序,主要包括汇编器、链接器和序,主要包括汇编器、链接器和序,主要包括汇编器、链接器和序,主要包括汇编器、链接器和C CC编译器以及一些辅编译器以及一些辅编译器以及一些辅编译器以及一些辅编译器以及一些辅编译器以及一些辅助工具程序等。助工具程序等。助工具程序等。助工具程序等。助工具程序等。助工具程序等。 代码调试工具包括代码调试工具包括代码调试工具包括代码调试工具包括代码调试工具包括代码调试工具包括C/C/C/汇编语言源码调试器、仿真汇编语言源码调试器、仿真汇编语言源码调试器、仿真汇编语言源码调试器、仿真汇编语言源码调试器、仿真汇编语言源码调试器、仿真器等。器等

4、。器等。器等。器等。器等。 本章主要介绍代码生成工具,包括本章主要介绍代码生成工具,包括本章主要介绍代码生成工具,包括本章主要介绍代码生成工具,包括本章主要介绍代码生成工具,包括本章主要介绍代码生成工具,包括C54xC54xC54x软件开软件开软件开软件开软件开软件开发流程、汇编语言程序的编写、编辑、汇编和链接过发流程、汇编语言程序的编写、编辑、汇编和链接过发流程、汇编语言程序的编写、编辑、汇编和链接过发流程、汇编语言程序的编写、编辑、汇编和链接过发流程、汇编语言程序的编写、编辑、汇编和链接过发流程、汇编语言程序的编写、编辑、汇编和链接过程、程、程、程、程、程、COFFCOFFCOFF段的一般

5、概念、汇编器和链接器处理段的段的一般概念、汇编器和链接器处理段的段的一般概念、汇编器和链接器处理段的段的一般概念、汇编器和链接器处理段的段的一般概念、汇编器和链接器处理段的段的一般概念、汇编器和链接器处理段的方法以及程序的重定位等。方法以及程序的重定位等。方法以及程序的重定位等。方法以及程序的重定位等。方法以及程序的重定位等。方法以及程序的重定位等。 2024/9/222024/9/221 1第第4章章 汇编语言程序开发工具汇编语言程序开发工具 4.4.1 1 TMS320C54x软件开发过程软件开发过程 汇编语言程序的编辑、汇编和链接过程汇编语言程序的编辑、汇编和链接过程 COFF的一般概念

6、的一般概念 源程序的汇编源程序的汇编 链接器的使用链接器的使用2024/9/222024/9/222 2第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.1 4.1 TMS320C54xTMS320C54x软件开件开发过程程 C54xC54xC54xC54x的应用软件开发主要完成以下工作:的应用软件开发主要完成以下工作:的应用软件开发主要完成以下工作:的应用软件开发主要完成以下工作:(1)(1)(1)(1) 选择编程语言编写源程序选择编程语言编写源程序选择编程语言编写源程序

7、选择编程语言编写源程序 C54xC54xC54xC54x提供提供提供提供2 2 2 2种编程语言,即汇编语言和种编程语言,即汇编语言和种编程语言,即汇编语言和种编程语言,即汇编语言和C/C+C/C+C/C+C/C+语言。语言。语言。语言。 对于完成一般功能的代码,这两种语言都可使用,但对对于完成一般功能的代码,这两种语言都可使用,但对对于完成一般功能的代码,这两种语言都可使用,但对对于完成一般功能的代码,这两种语言都可使用,但对于一些运算量很大的关键代码,最好采用汇编语言来完成,于一些运算量很大的关键代码,最好采用汇编语言来完成,于一些运算量很大的关键代码,最好采用汇编语言来完成,于一些运算量

8、很大的关键代码,最好采用汇编语言来完成,以提高程序的运算效率。以提高程序的运算效率。以提高程序的运算效率。以提高程序的运算效率。(2)(2)(2)(2) 选择开发工具和环境选择开发工具和环境选择开发工具和环境选择开发工具和环境 C54xC54xC54xC54x提供了两种开发环境。即非集成开发环境和集成提供了两种开发环境。即非集成开发环境和集成提供了两种开发环境。即非集成开发环境和集成提供了两种开发环境。即非集成开发环境和集成开发环境开发环境开发环境开发环境CCSCCSCCSCCS。 2024/9/222024/9/223 3第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇

9、编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.1 4.1 TMS320C54xTMS320C54x软件开发过程软件开发过程 1.1.1.1. C54xC54x应用软件开发流程应用软件开发流程 C54xC54x应用软件的开发可在应用软件的开发可在TITI公司提供的开发环境中进公司提供的开发环境中进行行,用户可以用用户可以用C C/C+/C+语言或汇编语言编写源文件,经语言或汇编语言编写源文件,经C C编译器、编译器、汇编器生成汇编器生成COFFCOFF格式的目标文件,再用链接器进行链接,生格式的目标文件,再用链接器进行链接,生成在成在C54

10、xC54x上可执行的目标代码,然后利用调试工具对可执上可执行的目标代码,然后利用调试工具对可执行的目标代码进行仿真和调试。行的目标代码进行仿真和调试。 当调试完成后,通过当调试完成后,通过HexHex代码转换工具,将调试后的可执代码转换工具,将调试后的可执行目标代码转换成行目标代码转换成EPROMEPROM编程器能接受的代码,并将该代码固编程器能接受的代码,并将该代码固化到化到EPROMEPROM中或加载到用户的应用系统中,以便中或加载到用户的应用系统中,以便DSPDSP目标系统目标系统脱离计算机单独运行。脱离计算机单独运行。 2024/9/222024/9/224 4第第第第第第4 4 4

11、4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. C54xC54x应用软件开发流程应用软件开发流程 开发过程的目的是产生一个可以由开发过程的目的是产生一个可以由C54xC54x目标系目标系统执行的模块。统执行的模块。C C源文件源文件C C编译器编译器汇编汇编源文件源文件汇编器汇编器汇编汇编源文件源文件COFFCOFF目标目标文件文件链接器链接器可执行的可执行的COFFCOFF文件文件宏宏源文件源文件存档存档器器宏库宏库存档器存档器目标目标文件库文件库建库工具建库工具运行时运行时支持

12、库支持库EPROMEPROM编程器编程器交叉引用交叉引用列表器列表器调试工具调试工具TMS320C54xTMS320C54x绝对地址绝对地址列表器列表器HEXHEX代码代码转换工具转换工具2024/9/222024/9/225 5第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. C54xC54x的开发工具的开发工具 TITI公司提供的公司提供的DSPDSP开发环境和工具主要包括以下开发环境和工具主要包括以下三个部分:三个部分: 代码生成工具代码生成工具 代码调

13、试工具代码调试工具 实时操作系统实时操作系统2024/9/222024/9/226 6第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. C54xC54x的开发工具的开发工具(1)(1)代码生成工具:代码生成工具: C C编译器编译器:用来将用来将C/C+C/C+语言源程序自动编译为语言源程序自动编译为C54xC54x的汇编语言源程序。的汇编语言源程序。 汇编器汇编器:用来将汇编语言源文件汇编成机器语用来将汇编语言源文件汇编成机器语言言COFFCOFF目标文件。

14、目标文件。 链接器链接器:将汇编生成的、可重新定位的将汇编生成的、可重新定位的COFFCOFF目目标模块组合成一个可执行的标模块组合成一个可执行的COFFCOFF目标模块。目标模块。 文档管理器文档管理器:允许用户将一组文件(源文件或允许用户将一组文件(源文件或目标文件)集中为一个文档文件库。目标文件)集中为一个文档文件库。 2024/9/222024/9/227 7第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. C54xC54x的开发工具的开发工具 助记符

15、指令助记符指令代数式指令翻译器代数式指令翻译器:用来将包含用来将包含助记符指令的汇编语言源文件转换成包含代数式指令助记符指令的汇编语言源文件转换成包含代数式指令的汇编语言源文件。的汇编语言源文件。 建库实用程序建库实用程序:用来建立用户自己使用的、并用来建立用户自己使用的、并用用C/C+C/C+语言编写的支持运行的库函数。语言编写的支持运行的库函数。 十六进制转换程序十六进制转换程序:可以很方便地将可以很方便地将COFFCOFF目标目标文件转换成文件转换成TITI、IntelIntel、MotorolaMotorola等公司的目标文件等公司的目标文件格式。格式。 (1)(1)代码生成工具:代码

16、生成工具:2024/9/222024/9/228 8第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. C54xC54x的开发工具的开发工具(1)(1)代码生成工具:代码生成工具: 绝对制表程序绝对制表程序:将链接后的目标文件作为输入将链接后的目标文件作为输入, ,生成生成. .absabs输出文件。输出文件。 交叉引用制表程序交叉引用制表程序:利用目标文件生成一个交利用目标文件生成一个交叉引用清单,列出链接的源文件中的符号以及它们的叉引用清单,列出链接的源文件

17、中的符号以及它们的定义和引用情况。定义和引用情况。 2024/9/222024/9/229 9第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. C54xC54x的开发工具的开发工具(2)(2)代码调试工具:代码调试工具: C/C/汇编语言源码调试器:汇编语言源码调试器:与软件仿真器、评与软件仿真器、评价模块、软件开发系统、软件仿真器等配合使用。价模块、软件开发系统、软件仿真器等配合使用。 软件仿真器:软件仿真器:是一种模拟是一种模拟DSPDSP芯片各种功能并芯

18、片各种功能并在非实时条件下进行软件调试的调试工具,它不需在非实时条件下进行软件调试的调试工具,它不需目标硬件支持,只需在计算机上运行。目标硬件支持,只需在计算机上运行。 初学者工具初学者工具DSKDSK:是是TITI公司提供给初学者进行公司提供给初学者进行DSPDSP编程练习的一套廉价的实时软件调试工具。编程练习的一套廉价的实时软件调试工具。 2024/9/222024/9/221010第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. C54xC54x的开发工

19、具的开发工具(2)(2)代码调试工具:代码调试工具: 软件开发系统软件开发系统SWDSSWDS:是一块是一块PCPC插卡,可提供插卡,可提供低成本的评价和实时软件开发,还可用来进行软件低成本的评价和实时软件开发,还可用来进行软件调试,程序可在调试,程序可在DSPDSP芯片上实时运行。芯片上实时运行。 可扩展的开发系统仿真器可扩展的开发系统仿真器( (XDS510)XDS510):可用来可用来进行系统级的集成调试,是进行进行系统级的集成调试,是进行DSPDSP芯片软硬件开发芯片软硬件开发的最佳工具。的最佳工具。 评价模块评价模块EVMEVM板:板:是一种低成本的开发板,可是一种低成本的开发板,可

20、进行进行DSPDSP芯片评价、性能评估和有限的系统调试。芯片评价、性能评估和有限的系统调试。 2024/9/222024/9/221111第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.2 4.2 汇编语言程序的言程序的编辑、汇编和和链接接过程程 汇编语言源程序可以在任何一种文本编辑器中进汇编语言源程序可以在任何一种文本编辑器中进汇编语言源程序可以在任何一种文本编辑器中进汇编语言源程序可以在任何一种文本编辑器中进行。如笔记本、行。如笔记本、行。如笔记本、行。如笔记本、WO

21、RDWORDWORDWORD、EDITEDITEDITEDIT、TCTCTCTC等。等。等。等。 当汇编语言源程序编写完成后,还必须经过汇编当汇编语言源程序编写完成后,还必须经过汇编当汇编语言源程序编写完成后,还必须经过汇编当汇编语言源程序编写完成后,还必须经过汇编和链接后才能运行。和链接后才能运行。和链接后才能运行。和链接后才能运行。 2024/9/222024/9/221212第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.2 4.2 汇编语言程序的言程序的编辑、汇编

22、和和链接接过程程 示意图示意图示意图示意图汇编器汇编器汇编器汇编器调试程序调试程序调试程序调试程序链接器链接器链接器链接器文本编辑器文本编辑器文本编辑器文本编辑器.asm源文件源文件.obj目标文件目标文件.out输出文件输出文件. cmd链接命链接命令文件令文件. lst列表文件列表文件. map存储器存储器映像文件映像文件十六进制十六进制十六进制十六进制转换程序转换程序转换程序转换程序HEX500HEX500- - o- - m- - l2024/9/222024/9/221313第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇

23、编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.2 4.2 汇编语言程序的言程序的编辑、汇编和和链接接过程程 1.1.1.1. 编辑编辑编辑编辑 利用各种文本编辑器,如笔记本、利用各种文本编辑器,如笔记本、利用各种文本编辑器,如笔记本、利用各种文本编辑器,如笔记本、WORDWORDWORDWORD、EDITEDITEDITEDIT和和和和TCTCTCTC等,可编写汇编语言源程序。等,可编写汇编语言源程序。等,可编写汇编语言源程序。等,可编写汇编语言源程序。 2.2.2.2. 汇编汇编汇编汇编 当汇编语言源程序编写好以后,可利用当汇编语言源程序编写好以后,可利用当汇编语言源程序编写

24、好以后,可利用当汇编语言源程序编写好以后,可利用C54xC54xC54xC54x的的的的汇编器汇编器汇编器汇编器ASM500ASM500ASM500ASM500,对一个或多个源程序分别进行汇编对一个或多个源程序分别进行汇编对一个或多个源程序分别进行汇编对一个或多个源程序分别进行汇编, , , ,并生成列表文件并生成列表文件并生成列表文件并生成列表文件(.(.(.(.lst)lst)lst)lst)和目标文件和目标文件和目标文件和目标文件(.(.(.(.obj)obj)obj)obj)。 2024/9/222024/9/221414第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发

25、工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.2 4.2 汇编语言程序的言程序的编辑、汇编和和链接接过程程 2.2.2.2. 汇编汇编汇编汇编 常用的汇编命令:常用的汇编命令: asm500 %1 s 1 x 调用汇编器命令调用汇编器命令调用汇编器命令调用汇编器命令 源文件名源文件名源文件名源文件名 将程序所有定义的符号放将程序所有定义的符号放将程序所有定义的符号放将程序所有定义的符号放在目标文件的符号表中在目标文件的符号表中在目标文件的符号表中在目标文件的符号表中 生成一个生成一个生成一个生成一个列表文件列表文件列表文件列表文件.

26、 . . .lstlstlstlst 生成一个生成一个生成一个生成一个交叉汇编表交叉汇编表交叉汇编表交叉汇编表 2024/9/222024/9/221515第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.2 4.2 汇编语言程序的言程序的编辑、汇编和和链接接过程程 3.3.3.3. 链接链接链接链接 所谓链接,就是利用所谓链接,就是利用所谓链接,就是利用所谓链接,就是利用C54xC54xC54xC54x的链接器的链接器的链接器的链接器LNK500LNK500LNK500L

27、NK500,根根根根据链接器命令文件据链接器命令文件据链接器命令文件据链接器命令文件(.(.(.(.cmd)cmd)cmd)cmd)对已汇编过的一个或多个目对已汇编过的一个或多个目对已汇编过的一个或多个目对已汇编过的一个或多个目标文件标文件标文件标文件(.(.(.(.obj)obj)obj)obj)进行链接,生成输出文件进行链接,生成输出文件进行链接,生成输出文件进行链接,生成输出文件(.(.(.(.out)out)out)out)和存储和存储和存储和存储器映像文件器映像文件器映像文件器映像文件(.(.(.(.map)map)map)map) 。 常用的汇编器命令:常用的汇编器命令: lnk5

28、00 %1.cmd lnk500:lnk500: 调用链接器命令调用链接器命令调用链接器命令调用链接器命令 %1.cmd:%1.cmd: 链接命令文件名,该文件须链接命令文件名,该文件须指明指明目标文件、目标文件、输入文件、输出文件、输入文件、输出文件、链接选项和存储器配置要求等。链接选项和存储器配置要求等。 2024/9/222024/9/221616第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 COFFCOFF的一般概念的一般概念 汇编器和链接器生成的目标文件,是一个

29、可以由汇编器和链接器生成的目标文件,是一个可以由汇编器和链接器生成的目标文件,是一个可以由汇编器和链接器生成的目标文件,是一个可以由C54xC54xC54xC54x器件执行的文件。这些目标文件的格式称之为器件执行的文件。这些目标文件的格式称之为器件执行的文件。这些目标文件的格式称之为器件执行的文件。这些目标文件的格式称之为公共目标文件格式公共目标文件格式公共目标文件格式公共目标文件格式( ( ( (COFF)COFF)COFF)COFF)。 在编写汇编语言程序时,在编写汇编语言程序时,在编写汇编语言程序时,在编写汇编语言程序时,COFFCOFFCOFFCOFF采用代码段和数据采用代码段和数据采

30、用代码段和数据采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得段的形式,以便于模块化的编程,使编程和管理变得段的形式,以便于模块化的编程,使编程和管理变得段的形式,以便于模块化的编程,使编程和管理变得更加方便。更加方便。更加方便。更加方便。 这些代码段和数据段简称为段。汇编器和链接器这些代码段和数据段简称为段。汇编器和链接器这些代码段和数据段简称为段。汇编器和链接器这些代码段和数据段简称为段。汇编器和链接器提供一些伪指令来建立和管理各种各样的段。提供一些伪指令来建立和管理各种各样的段。提供一些伪指令来建立和管理各种各样的段。提供一些伪指令来建立和管理各种各样的段。 2024/9/

31、222024/9/221717第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 COFFCOFF的一般概念的一般概念 COFFCOFFCOFFCOFF文件的基本单元文件的基本单元文件的基本单元文件的基本单元 COFFCOFFCOFFCOFF文件有文件有文件有文件有3 3 3 3种类型:种类型:种类型:种类型:COFF0COFF0COFF0COFF0、COFF1COFF1COFF1COFF1、COFF2COFF2COFF2COFF2。 每种类型的每种类型的每种类型的每种类型的C

32、OFFCOFFCOFFCOFF文件,其标题格式都有所不同,文件,其标题格式都有所不同,文件,其标题格式都有所不同,文件,其标题格式都有所不同,但数据部分是相同的。但数据部分是相同的。但数据部分是相同的。但数据部分是相同的。 链接器能够读链接器能够读链接器能够读链接器能够读/ / / /写所有类型的写所有类型的写所有类型的写所有类型的COFFCOFFCOFFCOFF文件,默认时链文件,默认时链文件,默认时链文件,默认时链接器生成的是接器生成的是接器生成的是接器生成的是COFF2COFF2COFF2COFF2文件,采用文件,采用文件,采用文件,采用- - - -vnvnvnvn链接选项可以选择链接

33、选项可以选择链接选项可以选择链接选项可以选择不同类型的不同类型的不同类型的不同类型的COFFCOFFCOFFCOFF文件。文件。文件。文件。 C54xC54xC54xC54x汇编器和汇编器和汇编器和汇编器和C C C C编译器产生的是编译器产生的是编译器产生的是编译器产生的是COFF2COFF2COFF2COFF2文件。文件。文件。文件。 2024/9/222024/9/221818第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 COFFCOFFCOFFCOFF文件的基本单

34、元文件的基本单元文件的基本单元文件的基本单元 1.1.1.1. 段段段段( ( ( (sections)sections)sections)sections) 是是是是COFFCOFFCOFFCOFF文件中最重要的概念。每个目标文件都分文件中最重要的概念。每个目标文件都分文件中最重要的概念。每个目标文件都分文件中最重要的概念。每个目标文件都分成若干段。成若干段。成若干段。成若干段。 段段段段是存储器中占据相邻空间的代码或数据块。是存储器中占据相邻空间的代码或数据块。是存储器中占据相邻空间的代码或数据块。是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。一个目标

35、文件中的每个段都是分开的和各不相同的。一个目标文件中的每个段都是分开的和各不相同的。一个目标文件中的每个段都是分开的和各不相同的。 COFFCOFFCOFFCOFF目标文件都包含以下目标文件都包含以下目标文件都包含以下目标文件都包含以下3 3 3 3种形式的段:种形式的段:种形式的段:种形式的段: . . . .texttexttexttext 段段段段( ( ( (文本段文本段文本段文本段) ) ) ),通常包含可执行代码;,通常包含可执行代码;,通常包含可执行代码;,通常包含可执行代码; . . . .datadatadatadata 段段段段( ( ( (数据段数据段数据段数据段) )

36、) ),通常包含初始化数据;,通常包含初始化数据;,通常包含初始化数据;,通常包含初始化数据; .bss .bss .bss .bss 段段段段( (保留空间段保留空间段保留空间段保留空间段) ),通常为未初始化变量保留存储空间。,通常为未初始化变量保留存储空间。,通常为未初始化变量保留存储空间。,通常为未初始化变量保留存储空间。2024/9/222024/9/221919第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 COFFCOFFCOFFCOFF文件的基本单元文件的基

37、本单元文件的基本单元文件的基本单元 2.2.2.2. 段的基本类型段的基本类型段的基本类型段的基本类型 COFFCOFFCOFFCOFF目标文件中的段有两种基本类型。目标文件中的段有两种基本类型。目标文件中的段有两种基本类型。目标文件中的段有两种基本类型。 初始化段初始化段初始化段初始化段 未未未未初始化段初始化段初始化段初始化段(1)(1)(1)(1) 初始化段初始化段初始化段初始化段 初始化段中包含有数据或程序代码。主要有:初始化段中包含有数据或程序代码。主要有:初始化段中包含有数据或程序代码。主要有:初始化段中包含有数据或程序代码。主要有: . . . .texttexttexttext

38、段段段段已初始化段;已初始化段;已初始化段;已初始化段; . . . .datadatadatadata段段段段已初始化段;已初始化段;已初始化段;已初始化段; . . . .sectsectsectsect段段段段已初始化段,由汇编器伪指令建立已初始化段,由汇编器伪指令建立已初始化段,由汇编器伪指令建立已初始化段,由汇编器伪指令建立 的自定义段。的自定义段。的自定义段。的自定义段。 2024/9/222024/9/222020第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具

39、 COFFCOFFCOFFCOFF文件的基本单元文件的基本单元文件的基本单元文件的基本单元 2.2.2.2. 段的基本类型段的基本类型段的基本类型段的基本类型 COFFCOFFCOFFCOFF目标文件中的段有两种基本类型。目标文件中的段有两种基本类型。目标文件中的段有两种基本类型。目标文件中的段有两种基本类型。(2)(2)(2)(2) 未初始化段未初始化段未初始化段未初始化段 在存储空间中,为未初始化数据保留存储空间。在存储空间中,为未初始化数据保留存储空间。在存储空间中,为未初始化数据保留存储空间。在存储空间中,为未初始化数据保留存储空间。它包括:它包括:它包括:它包括: . . . .bs

40、sbss段段段段未初始化段;未初始化段;未初始化段;未初始化段; . . . .usectusect段段段段未初始化段,由汇编命令建立的命未初始化段,由汇编命令建立的命未初始化段,由汇编命令建立的命未初始化段,由汇编命令建立的命 名段(自定义段)。名段(自定义段)。名段(自定义段)。名段(自定义段)。2024/9/222024/9/222121第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 COFFCOFFCOFFCOFF文件的基本单元文件的基本单元文件的基本单元文件的基本

41、单元 3.3.3.3. 段与目标存储器的对应关系段与目标存储器的对应关系段与目标存储器的对应关系段与目标存储器的对应关系 汇编器的任务:汇编器的任务:汇编器的任务:汇编器的任务:在汇编过程中,根据汇编命令用适在汇编过程中,根据汇编命令用适在汇编过程中,根据汇编命令用适在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文当的段将各部分程序代码和数据连在一起,构成目标文当的段将各部分程序代码和数据连在一起,构成目标文当的段将各部分程序代码和数据连在一起,构成目标文件。件。件。件。 链接器的任务:链接器的任务:链接器的任务:链接器的任务:就是分配存储单元,将目标文件中就是分

42、配存储单元,将目标文件中就是分配存储单元,将目标文件中就是分配存储单元,将目标文件中的段重新定位到目标系统的存储器中,这一过程称为定的段重新定位到目标系统的存储器中,这一过程称为定的段重新定位到目标系统的存储器中,这一过程称为定的段重新定位到目标系统的存储器中,这一过程称为定位或分配位或分配位或分配位或分配。 2024/9/222024/9/222222第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具3.3.3.3. 段与目标存储器的对应关系段与目标存储器的对应关系段与目标存

43、储器的对应关系段与目标存储器的对应关系目标文件中的段与目标存储器之间的关系目标文件中的段与目标存储器之间的关系目标文件中的段与目标存储器之间的关系目标文件中的段与目标存储器之间的关系 目标文件目标文件目标存储器目标存储器.bss.data.textRAME2PROMROM2024/9/222024/9/222323第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编器对段的处理汇编器对段的处理汇编器对段的处理汇编器对段的处理 汇编器对段的处理是通过段伪指令来区别各个段汇编器

44、对段的处理是通过段伪指令来区别各个段汇编器对段的处理是通过段伪指令来区别各个段汇编器对段的处理是通过段伪指令来区别各个段的的的的,并将段名相同的语句汇编在一起。并将段名相同的语句汇编在一起。并将段名相同的语句汇编在一起。并将段名相同的语句汇编在一起。 汇编器有汇编器有汇编器有汇编器有5 5 5 5条伪指令可识别汇编语言程序的各个部条伪指令可识别汇编语言程序的各个部条伪指令可识别汇编语言程序的各个部条伪指令可识别汇编语言程序的各个部分:分:分:分: . . . .bssbssbssbss . . . .usectusectusectusect . . . .texttexttexttext .

45、. . .datadatadatadata . . . .sectsectsectsect定义未初始化段定义未初始化段定义未初始化段定义未初始化段定义未初始化段定义未初始化段定义未初始化段定义未初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段2024/9/222024/9/222424第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编器对段的处理

46、汇编器对段的处理汇编器对段的处理汇编器对段的处理 未初始化段就是在未初始化段就是在未初始化段就是在未初始化段就是在C54xC54xC54xC54x存储器中保留空间,存储器中保留空间,存储器中保留空间,存储器中保留空间,通常它们被定位在通常它们被定位在通常它们被定位在通常它们被定位在RAMRAMRAMRAM区。在目标文件中,这些段中区。在目标文件中,这些段中区。在目标文件中,这些段中区。在目标文件中,这些段中没有确切的内容。没有确切的内容。没有确切的内容。没有确切的内容。 由这些段定义的空间仅作为临时存储空间,在由这些段定义的空间仅作为临时存储空间,在由这些段定义的空间仅作为临时存储空间,在由这

47、些段定义的空间仅作为临时存储空间,在程序运行时,可以利用这些存储空间存放变量。程序运行时,可以利用这些存储空间存放变量。程序运行时,可以利用这些存储空间存放变量。程序运行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,分别由未初始化段分为默认的和命名的两种,分别由未初始化段分为默认的和命名的两种,分别由未初始化段分为默认的和命名的两种,分别由汇编器伪指令汇编器伪指令汇编器伪指令汇编器伪指令. . . .bssbssbssbss和和和和. . . .usectusectusectusect产生。产生。产生。产生。 1.1.1.1. 未初始化段未初始化段未初始化段未初始化段

48、2024/9/222024/9/222525第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(1)(1)(1)(1) . .bssbssbssbss伪指令伪指令伪指令伪指令1.1.1.1. 未初始化段未初始化段未初始化段未初始化段 用于用于用于用于在在在在bssbssbssbss段中保留若干个空间。段中保留若干个空间。段中保留若干个空间。段中保留若干个空间。 格式:格式:格式:格式: . .bssbss 符号,符号,符号,符号, 字数字数字数字数符号符号符号符号对应于保留的存

49、储空间第一个字的变量名称。对应于保留的存储空间第一个字的变量名称。对应于保留的存储空间第一个字的变量名称。对应于保留的存储空间第一个字的变量名称。 可以让其他段引用,也可以用可以让其他段引用,也可以用可以让其他段引用,也可以用可以让其他段引用,也可以用. . . .globalglobalglobalglobal命令定义为全命令定义为全命令定义为全命令定义为全 局符号。局符号。局符号。局符号。 字数字数字数字数表示在表示在表示在表示在bssbssbssbss段或标有名字的段中保留若干个存储单元。段或标有名字的段中保留若干个存储单元。段或标有名字的段中保留若干个存储单元。段或标有名字的段中保留若

50、干个存储单元。 每调用一次每调用一次每调用一次每调用一次. . . .bssbssbssbss伪指令,汇编器在相应的段保留伪指令,汇编器在相应的段保留伪指令,汇编器在相应的段保留伪指令,汇编器在相应的段保留更多的空间。更多的空间。更多的空间。更多的空间。 2024/9/222024/9/222626第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 未初始化段未初始化段未初始化段未初始化段 (2)(2)(2)(2) . .usectusectusectusect

51、伪指令伪指令伪指令伪指令 用于为指定的命名段保留若干个空间。用于为指定的命名段保留若干个空间。用于为指定的命名段保留若干个空间。用于为指定的命名段保留若干个空间。 格式:格式:格式:格式: 符号符号符号符号 . .usect usect “段名段名段名段名”, 字数字数字数字数段名段名段名段名程序员为未初始化的命名段定义的名字。程序员为未初始化的命名段定义的名字。程序员为未初始化的命名段定义的名字。程序员为未初始化的命名段定义的名字。 每调用一次每调用一次每调用一次每调用一次. . . .usectusectusectusect伪指令,汇编器在指定的命名伪指令,汇编器在指定的命名伪指令,汇编器

52、在指定的命名伪指令,汇编器在指定的命名段保留更多的空间。段保留更多的空间。段保留更多的空间。段保留更多的空间。 2024/9/222024/9/222727第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编器对段的处理汇编器对段的处理汇编器对段的处理汇编器对段的处理 已初始化段中包含有可执行代码或初始化数据。已初始化段中包含有可执行代码或初始化数据。已初始化段中包含有可执行代码或初始化数据。已初始化段中包含有可执行代码或初始化数据。 这些段中的内容都在目标文件中,当加载程

53、序时这些段中的内容都在目标文件中,当加载程序时这些段中的内容都在目标文件中,当加载程序时这些段中的内容都在目标文件中,当加载程序时再放到再放到再放到再放到C54xC54xC54xC54x的存储器中。每个已初始化段都是可以的存储器中。每个已初始化段都是可以的存储器中。每个已初始化段都是可以的存储器中。每个已初始化段都是可以重新定位的,并且可以引用其他段中所定义的符号。重新定位的,并且可以引用其他段中所定义的符号。重新定位的,并且可以引用其他段中所定义的符号。重新定位的,并且可以引用其他段中所定义的符号。链接器在链接时会自动地处理段间的相互引用。链接器在链接时会自动地处理段间的相互引用。链接器在链

54、接时会自动地处理段间的相互引用。链接器在链接时会自动地处理段间的相互引用。 已初始化段由已初始化段由已初始化段由已初始化段由. . . .texttexttexttext、.data.data.data.data和和和和. . . .sectsectsectsect三个伪指令三个伪指令三个伪指令三个伪指令建立。建立。建立。建立。2.2.2.2. 已初始化段已初始化段已初始化段已初始化段 2024/9/222024/9/222828第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工

55、具 已初始化命令的句法:已初始化命令的句法:已初始化命令的句法:已初始化命令的句法: 2.2.2.2. 已初始化段已初始化段已初始化段已初始化段 . .texttext 段起点段起点段起点段起点 . .datadata 段起点段起点段起点段起点 . .sectsect “ “ “ “段名段名段名段名”,”,”,”,段起点段起点段起点段起点 段起点段起点段起点段起点是任选项。是任选项。是任选项。是任选项。 若选用,它为段程序计数器若选用,它为段程序计数器若选用,它为段程序计数器若选用,它为段程序计数器SPCSPCSPCSPC定义一个起始值。定义一个起始值。定义一个起始值。定义一个起始值。 若默认

56、,则若默认,则若默认,则若默认,则SPCSPCSPCSPC从从从从0 0 0 0开始。开始。开始。开始。 2024/9/222024/9/222929第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编器对段的处理汇编器对段的处理汇编器对段的处理汇编器对段的处理 当汇编器遇到当汇编器遇到当汇编器遇到当汇编器遇到. . . .texttexttexttext或或或或. . . .datadatadatadata或或或或. . . .sectsectsectsect命令时,将停

57、止命令时,将停止命令时,将停止命令时,将停止对当前段的汇编对当前段的汇编对当前段的汇编对当前段的汇编( ( ( (相当于一条结束当前段汇编的命令相当于一条结束当前段汇编的命令相当于一条结束当前段汇编的命令相当于一条结束当前段汇编的命令) ) ) ),然后将紧接着的程序代码或数据汇编到指定的段中,然后将紧接着的程序代码或数据汇编到指定的段中,然后将紧接着的程序代码或数据汇编到指定的段中,然后将紧接着的程序代码或数据汇编到指定的段中,直到再遇到另一条直到再遇到另一条直到再遇到另一条直到再遇到另一条. . . .texttexttexttext、. . . .datadatadatadata或或或或

58、. . . .sectsectsectsect命令为止。命令为止。命令为止。命令为止。 当汇编器遇到当汇编器遇到当汇编器遇到当汇编器遇到. . . .bssbssbssbss或或或或. . . .usectusectusectusect命令时,并不结束当前命令时,并不结束当前命令时,并不结束当前命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来,并开始对新段的汇编,只是暂时从当前段脱离出来,并开始对新段的汇编,只是暂时从当前段脱离出来,并开始对新段的汇编,只是暂时从当前段脱离出来,并开始对新的段进行汇编。的段进行汇编。的段进行汇编。的段进行汇编。 . . . .bssbssbssbss和和

59、和和. . . .usectusectusectusect命令可以出现在一个已初始化段的任命令可以出现在一个已初始化段的任命令可以出现在一个已初始化段的任命令可以出现在一个已初始化段的任何位置,而不会对它的内容发生影响。何位置,而不会对它的内容发生影响。何位置,而不会对它的内容发生影响。何位置,而不会对它的内容发生影响。 2024/9/222024/9/223030第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编器对段的处理汇编器对段的处理汇编器对段的处理汇编器对段的处

60、理 命名段由用户指定,与默认的命名段由用户指定,与默认的命名段由用户指定,与默认的命名段由用户指定,与默认的. . . .texttexttexttext,. . . .datadatadatadata和和和和. . . .bssbssbssbss段的使用相同,但它们被分开汇编。段的使用相同,但它们被分开汇编。段的使用相同,但它们被分开汇编。段的使用相同,但它们被分开汇编。 假如一部分可执行代码(例如初始化程序)不希假如一部分可执行代码(例如初始化程序)不希假如一部分可执行代码(例如初始化程序)不希假如一部分可执行代码(例如初始化程序)不希望和望和望和望和. . . .texttexttext

61、text段分配在一起,可将它们汇编进一个命名段,段分配在一起,可将它们汇编进一个命名段,段分配在一起,可将它们汇编进一个命名段,段分配在一起,可将它们汇编进一个命名段,这样就可定位在与这样就可定位在与这样就可定位在与这样就可定位在与. . . .texttexttexttext不同的地方。也可将初始化的不同的地方。也可将初始化的不同的地方。也可将初始化的不同的地方。也可将初始化的数据汇编到与数据汇编到与数据汇编到与数据汇编到与. . . .datadatadatadata段不同的地方,或者将未初始化的段不同的地方,或者将未初始化的段不同的地方,或者将未初始化的段不同的地方,或者将未初始化的变量

62、保留在与变量保留在与变量保留在与变量保留在与. . . .bssbssbssbss段不同的位置。段不同的位置。段不同的位置。段不同的位置。 可用可用可用可用. . . .usectusectusectusect和和和和. . . .sectsectsectsect两个伪指令产生命名段。两个伪指令产生命名段。两个伪指令产生命名段。两个伪指令产生命名段。3.3.3.3. 命名段(自定义段)命名段(自定义段)命名段(自定义段)命名段(自定义段) 2024/9/222024/9/223131第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编

63、语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 . . . .usectusectusectusect伪指令产生类似伪指令产生类似伪指令产生类似伪指令产生类似. . . .bssbssbssbss的段,为变量在的段,为变量在的段,为变量在的段,为变量在RAMRAMRAMRAM中中中中保留存储空间。保留存储空间。保留存储空间。保留存储空间。 . . . .sectsectsectsect伪指令产生类似伪指令产生类似伪指令产生类似伪指令产生类似. . . .texttexttexttext和和和和. . . .datadatadatadata的段,可以包含的段,可以包含的段,可以包含的段

64、,可以包含代码或数据。代码或数据。代码或数据。代码或数据。. . . .sectsectsectsect伪指令产生可重新定位地址的命名伪指令产生可重新定位地址的命名伪指令产生可重新定位地址的命名伪指令产生可重新定位地址的命名段。段。段。段。3.3.3.3. 命名段命名段命名段命名段 产生命名段伪指令格式:产生命名段伪指令格式:产生命名段伪指令格式:产生命名段伪指令格式: 符号符号符号符号 . .usectusect “ “ “ “段名段名段名段名”,字数,字数,字数,字数 . .sectsect “ “ “ “段名段名段名段名” 可以产生多达可以产生多达可以产生多达可以产生多达32767327

65、673276732767个不同的命名段。段名可长个不同的命名段。段名可长个不同的命名段。段名可长个不同的命名段。段名可长达达达达200200200200个字符。个字符。个字符。个字符。 2024/9/222024/9/223232第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 对于对于对于对于. . . .sectsectsectsect和和和和. . . .usectusectusectusect伪指令,段名可以作为子段的伪指令,段名可以作为子段的伪指令,段名可以作为子段

66、的伪指令,段名可以作为子段的参考。参考。参考。参考。 每次用一个新名字调用这些伪指令时,就产生一每次用一个新名字调用这些伪指令时,就产生一每次用一个新名字调用这些伪指令时,就产生一每次用一个新名字调用这些伪指令时,就产生一个新的命名段。个新的命名段。个新的命名段。个新的命名段。 若用已有的段名调用这些伪指令,则汇编器就将若用已有的段名调用这些伪指令,则汇编器就将若用已有的段名调用这些伪指令,则汇编器就将若用已有的段名调用这些伪指令,则汇编器就将代码或数据(或保留空间)汇编进相应名称的段中。代码或数据(或保留空间)汇编进相应名称的段中。代码或数据(或保留空间)汇编进相应名称的段中。代码或数据(或

67、保留空间)汇编进相应名称的段中。 不同的伪指令不能使用相同的名字。即不能用不同的伪指令不能使用相同的名字。即不能用不同的伪指令不能使用相同的名字。即不能用不同的伪指令不能使用相同的名字。即不能用. . . .usectusectusectusect创建了命名段,然后又用创建了命名段,然后又用创建了命名段,然后又用创建了命名段,然后又用. . . .sectsectsectsect创建一个相同名创建一个相同名创建一个相同名创建一个相同名字的段。字的段。字的段。字的段。 3.3.3.3. 命名段命名段命名段命名段 2024/9/222024/9/223333第第第第第第4 4 4 4 4 4章章章

68、章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编器对段的处理汇编器对段的处理汇编器对段的处理汇编器对段的处理 子段是较大段中的小段。链接器可以像处理其他子段是较大段中的小段。链接器可以像处理其他子段是较大段中的小段。链接器可以像处理其他子段是较大段中的小段。链接器可以像处理其他段一样处理子段。段一样处理子段。段一样处理子段。段一样处理子段。 子段结构可用来对存储器空间进行更紧凑的控制子段结构可用来对存储器空间进行更紧凑的控制子段结构可用来对存储器空间进行更紧凑的控制子段结构可用来对存储器空间进行更紧凑的控制,

69、 , , ,可以使存储器空间分配更加紧密。可以使存储器空间分配更加紧密。可以使存储器空间分配更加紧密。可以使存储器空间分配更加紧密。 4.4.4.4. 子段子段子段子段 子段命名格式:子段命名格式:子段命名格式:子段命名格式: 基段名:基段名:基段名:基段名: 子段名子段名子段名子段名 子段名前为基段名,随后为冒号,最后为子段名。子段名前为基段名,随后为冒号,最后为子段名。子段名前为基段名,随后为冒号,最后为子段名。子段名前为基段名,随后为冒号,最后为子段名。 2024/9/222024/9/223434第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇

70、编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 对于子段,汇编器可以单独为其分配存储单元,对于子段,汇编器可以单独为其分配存储单元,对于子段,汇编器可以单独为其分配存储单元,对于子段,汇编器可以单独为其分配存储单元,或者在相同的基段名下与其他段组合在一起。或者在相同的基段名下与其他段组合在一起。或者在相同的基段名下与其他段组合在一起。或者在相同的基段名下与其他段组合在一起。 用用用用. . . .sectsectsectsect命令建立的段是已初始化的子段;命令建立的段是已初始化的子段;命令建立的段是已初始化的子段;命令建立的段是已初始化的子段; 用用用用. .

71、 . .usectusectusectusect命令建立的段是未初始化的子段。命令建立的段是未初始化的子段。命令建立的段是未初始化的子段。命令建立的段是未初始化的子段。 4.4.4.4. 子段子段子段子段 例如,若要在例如,若要在例如,若要在例如,若要在. . . .texttexttexttext段内建立一个称之为段内建立一个称之为段内建立一个称之为段内建立一个称之为_ _ _ _funcfuncfuncfunc的的的的子段,其命令格式:子段,其命令格式:子段,其命令格式:子段,其命令格式: . . . .sectsectsectsect “. “. “. “.texttexttexttex

72、t:_func_func_func_func” 2024/9/222024/9/223535第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编器对段的处理汇编器对段的处理汇编器对段的处理汇编器对段的处理 汇编器为每个段都安排了一个单独的程序计数器汇编器为每个段都安排了一个单独的程序计数器汇编器为每个段都安排了一个单独的程序计数器汇编器为每个段都安排了一个单独的程序计数器称之为段程序计数器称之为段程序计数器称之为段程序计数器称之为段程序计数器SPCSPCSPCSPC。 SP

73、CSPCSPCSPC表示在程序代码或数据段内当前的地址。开表示在程序代码或数据段内当前的地址。开表示在程序代码或数据段内当前的地址。开表示在程序代码或数据段内当前的地址。开始时汇编器将每个始时汇编器将每个始时汇编器将每个始时汇编器将每个SPCSPCSPCSPC置置置置0 0 0 0。当汇编器将程序代码或数。当汇编器将程序代码或数。当汇编器将程序代码或数。当汇编器将程序代码或数据加到段内时,增加相应的据加到段内时,增加相应的据加到段内时,增加相应的据加到段内时,增加相应的SPCSPCSPCSPC值。若再继续对某个值。若再继续对某个值。若再继续对某个值。若再继续对某个段汇编,则相应的段汇编,则相应

74、的段汇编,则相应的段汇编,则相应的SPCSPCSPCSPC就在先前的数值上继续增加。就在先前的数值上继续增加。就在先前的数值上继续增加。就在先前的数值上继续增加。 链接器在链接时要对每个段进行重新定位。链接器在链接时要对每个段进行重新定位。链接器在链接时要对每个段进行重新定位。链接器在链接时要对每个段进行重新定位。 5.5.5.5. 段程序计数器段程序计数器段程序计数器段程序计数器SPC SPC SPC SPC 2024/9/222024/9/223636第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序

75、开发工具汇编语言程序开发工具【例例例例】段命令应用举例。段命令应用举例。段命令应用举例。段命令应用举例。 汇编语言源程序:汇编语言源程序:汇编语言源程序:汇编语言源程序: . . . .datadatadatadatacoeff .word 044h,055h,066hcoeff .word 044h,055h,066hcoeff .word 044h,055h,066hcoeff .word 044h,055h,066h . . . .bss bufferbss bufferbss bufferbss buffer,8 8 8 8 prt .word 0456hprt .word 0456h

76、prt .word 0456hprt .word 0456h . . . .texttexttexttextaddaddaddadd: LD 0Dh LD 0Dh LD 0Dh LD 0Dh,A A A A aloopaloopaloopaloop:SUB #1SUB #1SUB #1SUB #1,A A A A BC aloopBC aloopBC aloopBC aloop,AGEQAGEQAGEQAGEQ . . . .datadatadatadataivals .word 0CChivals .word 0CChivals .word 0CChivals .word 0CCh,0DDh

77、0DDh0DDh0DDh,0EEh0EEh0EEh0EEh ; ; ; ;初始化数据段初始化数据段初始化数据段初始化数据段 ;3;3;3;3组数据放入组数据放入组数据放入组数据放入. . . .datadatadatadata段段段段 ; ; ; ;在在在在. . . .bssbssbssbss段保留段保留段保留段保留8 8 8 8个单元个单元个单元个单元 ;0456h;0456h;0456h;0456h放入放入放入放入. . . .datadatadatadata段段段段 ; ; ; ;初始化文本段初始化文本段初始化文本段初始化文本段 ;1;1;1;1字指令字指令字指令字指令 ;2;2;2;

78、2字指令字指令字指令字指令 ;2;2;2;2字指令字指令字指令字指令共计共计5 5个字个字 ; ; ; ;初始化数据段初始化数据段初始化数据段初始化数据段 ;3;3;3;3组数据放入组数据放入组数据放入组数据放入. . . .datadatadatadata段段段段2024/9/222024/9/223737第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言源程序:汇编语言源程序:汇编语言源程序:汇编语言源程序:var2 .usect “newvars”var2 .us

79、ect “newvars”var2 .usect “newvars”var2 .usect “newvars”,2 2 2 2 inbuf .usect “newvars”inbuf .usect “newvars”inbuf .usect “newvars”inbuf .usect “newvars”,8 8 8 8 .text.text.text.text mpympympympy: LD 0Ah LD 0Ah LD 0Ah LD 0Ah,B B B B mloopmloopmloopmloop: MPY #0Ah MPY #0Ah MPY #0Ah MPY #0Ah,B B B B BC

80、 mloop BC mloop BC mloop BC mloop,BNOVBNOVBNOVBNOV .sect “vectors” .sect “vectors” .sect “vectors” .sect “vectors” .word 044h .word 044h .word 044h .word 044h,088h 088h 088h 088h ; ; ; ;建立建立建立建立newvarsnewvarsnewvarsnewvars命名段命名段命名段命名段, , , ,保留保留保留保留2 2 2 2个单元个单元个单元个单元 ; ; ; ;在在在在newvarsnewvarsnewvar

81、snewvars段保留段保留段保留段保留8 8 8 8个单元个单元个单元个单元 ; ; ; ;初始化文本段初始化文本段初始化文本段初始化文本段 ;1;1;1;1字指令字指令字指令字指令 ;2;2;2;2字指令字指令字指令字指令 ;2;2;2;2字指令字指令字指令字指令共计共计5 5个字个字 ; ; ; ;建立建立建立建立vectorsvectorsvectorsvectors命名段命名段命名段命名段 ;2;2;2;2组数据放入组数据放入组数据放入组数据放入vectorsvectorsvectorsvectors命名段命名段命名段命名段2024/9/222024/9/223838第第第第第第4

82、4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具经汇编后,得列表文件(部分):经汇编后,得列表文件(部分):经汇编后,得列表文件(部分):经汇编后,得列表文件(部分): 2 2 * *3 3 * * 汇编一个初始化表到汇编一个初始化表到. .datadata段段 * *4 4 *5 5 00000000 .data .data6 6 00000000 00440044 coeff .word 044h,055h,066h coeff .word 044h,055h,066h 0001 000

83、1 00550055 0002 0002 006600667 7 * *8 8 * * 在在. .bssbss段中为变量保留空间段中为变量保留空间 * *9 9 * *1010 00000000 .bss buffer .bss buffer,8 81111 * *1212 * * 仍然在仍然在. .data data 段中段中 * *1313 * *1414 0003 0003 04560456 prt prt . .word 0456hword 0456h2024/9/222024/9/223939第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编

84、语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1515 * *1616 * * 汇编代码到汇编代码到. .texttext段段 * *1717 * *1818 00000000 .text .text1919 00000000 100d 100d add add: LD 0Dh LD 0Dh,A A2020 00010001 f010f010 aloop aloop: SUB #1SUB #1, A A 00020002 00010001 2121 0003 0003 f842f842 BC aloopBC aloop,AGEQAGEQ 00040004 0001

85、0001 2222 *2323 * * 汇编另一个初始化表到汇编另一个初始化表到. . . .data data 段段 * * 24 24 * *2525 00040004 . . . .datadata 2626 00040004 00cc00cc ivals ivals . . . .word 0CChword 0CCh,0DDh0DDh,0EEh 0EEh 0005 0005 00dd00dd 00060006 00ee00ee2727 * *2828 * * 为更多的变量定义另一个段为更多的变量定义另一个段 * *2929 * *3030 00000000 var2 var2 . .

86、. .usect “newvars”usect “newvars”,2 2 31 31 00010001 inbuf inbuf . . . .usect “newvars”usect “newvars”,8 8 2024/9/222024/9/224040第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具3232 * *3333 * * 汇编更多代码到汇编更多代码到. . . .texttext段段 * *3434 * *3535 00050005 . . . .textte

87、xt 3636 0005 0005 110a110a mpympy: LD 0Ah LD 0Ah,B B 37 37 00060006 f166f166 mloop MPY #0Ah mloop MPY #0Ah,B B 00070007 000a000a 3838 0008 0008 f868 f868 BC mloop BC mloop,BNOV BNOV 00090009 00060006 3939 * *4040 * * 为中断向量为中断向量. . . .vectorsvectors定义一个自定义段定义一个自定义段 * * 4141 * *4242 00000000 . . . .se

88、ct “vectors” sect “vectors” 43 43 00000000 00440044 . . . .word 044hword 044h,088h088h 00010001 00880088 源程序源程序的行号的行号 段程序段程序计数器计数器目标目标代码代码汇编语言汇编语言源程序源程序2024/9/222024/9/224141第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编语言源程序经过汇编后,共建立了汇编语言源程序经过汇编后,共建立了汇编语言源程序

89、经过汇编后,共建立了汇编语言源程序经过汇编后,共建立了5 5 5 5个段:个段:个段:个段: .text.text.text.text段段段段文本段,段内有文本段,段内有文本段,段内有文本段,段内有10101010个字可执行个字可执行个字可执行个字可执行 的程序代码。的程序代码。的程序代码。的程序代码。 . . . .datadatadatadata段段段段已初始化的数据段,段内有已初始化的数据段,段内有已初始化的数据段,段内有已初始化的数据段,段内有7 7 7 7 个字的数据。个字的数据。个字的数据。个字的数据。 vectorsvectorsvectorsvectors段段段段用用用用. .

90、 . .sectsectsectsect命令生成的命名段命令生成的命名段命令生成的命名段命令生成的命名段, , 段内有段内有段内有段内有2 2 2 2个字的初始化数据。个字的初始化数据。个字的初始化数据。个字的初始化数据。 . . . .bssbssbssbss段段段段未初始化的数据段,未初始化的数据段,未初始化的数据段,未初始化的数据段,在存储器中在存储器中在存储器中在存储器中 为变量保留为变量保留为变量保留为变量保留8 8 8 8个存储单元。个存储单元。个存储单元。个存储单元。 newvarsnewvarsnewvarsnewvars段段段段用用用用. . . .usectusectuse

91、ctusect命令建立的命名段命令建立的命名段命令建立的命名段命令建立的命名段, , , , 为变量保留为变量保留为变量保留为变量保留10101010个存储单元。个存储单元。个存储单元。个存储单元。 2024/9/222024/9/224242第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具经汇编后,得列表文件(部分):经汇编后,得列表文件(部分):经汇编后,得列表文件(部分):经汇编后,得列表文件(部分): 2 2 * *3 3 * * 汇编一个初始化表到汇编一个初始化表到

92、. .datadata段段 * *4 4 *5 5 00000000 .data .data6 6 00000000 00440044 coeff .word 044h,055h,066h coeff .word 044h,055h,066h 0001 0001 00550055 0002 0002 006600667 7 * *8 8 * * 在在. .bssbss段中为变量保留空间段中为变量保留空间 * *9 9 * *1010 00000000 .bss buffer .bss buffer,8 81111 * *1212 * * 仍然在仍然在. .data data 段中段中 * *1

93、313 * *1414 0003 0003 04560456 prt prt . .word 0456hword 0456h行号行号行号行号 目标代码目标代码目标代码目标代码段名段名段名段名100100100100d d d df010f010f010f0100001000100010001f842f842f842f8420001000100010001110a110a110a110af166f166f166f166000a000a000a000aF868F868F868F8680006000600060006004400440044004400550055005500550066006600

94、660066045604560456045600000000cccccccc00dd00dd00dd00dd00ee00ee00ee00ee00440044004400440088008800880088 没有数据没有数据没有数据没有数据保留保留保留保留10101010个字个字个字个字5 5 0000 .data0000 .data6 0000 0044 coeff .word 044h,055h,066h6 0000 0044 coeff .word 044h,055h,066h10 0000 .bss buffer10 0000 .bss buffer,8 814 0003 0456 pr

95、t 14 0003 0456 prt . .word 0456hword 0456h. . . .datadatadatadata 6 6 6 6 00440044004400446 6 6 6 00550055005500556 6 6 6 006600660066006610101010 . . . .bssbssbssbss 没有数据没有数据没有数据没有数据保留保留保留保留8 8 8 8个字个字个字个字14141414 04560456045604562024/9/222024/9/224343第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语

96、言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1515 * *1616 * * 汇编代码到汇编代码到. .texttext段段 * *1717 * *1818 00000000 .text .text1919 00000000 100d 100d add add: LD 0Dh LD 0Dh,A A2020 00010001 f010f010 aloop aloop: SUB #1SUB #1, A A 00020002 00010001 2121 0003 0003 f842f842 BC aloopBC aloop,AGEQAGEQ 00040004 00010

97、001 2222 *2323 * * 汇编另一个初始化表到汇编另一个初始化表到. . . .data data 段段 * * 2424 * *2525 00040004 . . . .datadata 2626 00040004 00cc00cc ivals ivals . . . .word 0CChword 0CCh,0DDh0DDh,0EEh 0EEh 0005 0005 00dd00dd 00060006 00ee00ee2727 * *2828 * * 为更多的变量定义另一个段为更多的变量定义另一个段 * *2929 * *3030 00000000 var2 var2 . . .

98、.usect “newvars”usect “newvars”,2 2 3131 00010001 inbuf inbuf . . . .usect “newvars”usect “newvars”,8 8 行号行号行号行号 目标代码目标代码目标代码目标代码段名段名段名段名100100100100d d d df010f010f010f0100001000100010001f842f842f842f8420001000100010001110a110a110a110af166f166f166f166000a000a000a000aF868F868F868F8680006000600060006

99、6 6 6 66 6 6 66 6 6 614141414004400440044004400550055005500550066006600660066045604560456045600000000cccccccc00dd00dd00dd00dd00ee00ee00ee00ee. . . .datadatadatadata00440044004400440088008800880088 10101010没有数据没有数据没有数据没有数据保留保留保留保留8 8 8 8个字个字个字个字. . . .bssbssbssbss没有数据没有数据没有数据没有数据保留保留保留保留10101010个字个字个

100、字个字. . . .texttexttexttext 18 0000 .text18 0000 .text19 0000 100d add19 0000 100d add: LD 0Dh LD 0Dh,A A19191919 100d100d100d100d20 0001 f010 aloop20 0001 f010 aloop: SUB #1SUB #1, A A20202020 f010f010f010f01020202020 000100010001000121 21 0003 0003 f842 BC aloopf842 BC aloop,AGEQAGEQ21212121 f842f8

101、42f842f84221212121 000100010001000125 0004 25 0004 . . . .datadata26 0004 00cc ivals 26 0004 00cc ivals . . . .word 0CChword 0CCh,0DDh0DDh,0EEh0EEh. . . .datadatadatadata 26262626 00cc00cc00cc00cc00cc00cc26262626 00dd00dd00dd00dd00dd00dd26262626 00ee00ee00ee00ee00ee00ee30 0000 var2 30 0000 var2 . .

102、. .usect “newvars”usect “newvars”,2 2newvarsnewvarsnewvarsnewvars 30303030 保留保留保留保留保留保留2 2 2 22 2个字个字个字个字个字个字31 0001 inbuf 31 0001 inbuf . . . .usect “newvars”usect “newvars”,8 831313131 保留保留保留保留保留保留8 8 8 88 8个字个字个字个字个字个字2024/9/222024/9/224444第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语

103、言程序开发工具汇编语言程序开发工具汇编语言程序开发工具3232 * *3333 * * 汇编更多代码到汇编更多代码到. . . .texttext段段 * *3434 * *3535 00050005 . . . .texttext 3636 0005 0005 110a110a mpympy: LD 0Ah LD 0Ah,B B 37 37 00060006 f166f166 mloop MPY #0Ah mloop MPY #0Ah,B B 00070007 000a000a 3838 0008 0008 f868 f868 BC mloop BC mloop,BNOV BNOV 0009

104、0009 00060006 3939 * *4040 * * 为中断向量为中断向量. . . .vectorsvectors定义一个自定义段定义一个自定义段 * * 4141 * *4242 00000000 . . . .sect “vectors” sect “vectors” 43 43 00000000 00440044 . . . .word 044hword 044h,088h088h 0001 0001 00880088 行号行号行号行号 目标代码目标代码目标代码目标代码 段名段名段名段名1919191920202020202020202121212121212121100100

105、100100d d d df010f010f010f0100001000100010001f842f842f842f8420001000100010001110a110a110a110af166f166f166f166000a000a000a000aF868F868F868F8680006000600060006. . . .texttexttexttext6 6 6 66 6 6 66 6 6 6141414142626262626262626262626260044004400440044005500550055005500660066006600660456045604560456000

106、00000cccccccc00dd00dd00dd00dd00ee00ee00ee00ee. . . .datadatadatadata00440044004400440088008800880088 10101010没有数据没有数据没有数据没有数据保留保留保留保留8 8 8 8个字个字个字个字. . . .bssbssbssbss3030303031313131没有数据没有数据没有数据没有数据保留保留保留保留10101010个字个字个字个字newvarsnewvarsnewvarsnewvars35 0005 35 0005 . . . .texttext. . . .texttexttex

107、ttext 36 0005 110a mpy36 0005 110a mpy: LD 0Ah LD 0Ah,B B 36363636 110a110a110a110a110a110a37 37 0006 f166 mloop MPY #0Ah0006 f166 mloop MPY #0Ah,B B37373737 f168f168f168f168f168f16837373737 000a000a000a000a000a000a38 0008 f868 BC mloop38 0008 f868 BC mloop,BNOVBNOV38383838 f868f868f868f868f868f8683

108、8383838 00060006000600060006000642 0000 42 0000 . . . .sect “vectors”sect “vectors”vectorsvectorsvectorsvectors 43 0000 0044 43 0000 0044 . . . .word 044hword 044h,088h088h43434343 00440044004400440044004443434343 0088008800880088008800882024/9/222024/9/224545第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序

109、开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器对段的处理链接器对段的处理链接器对段的处理链接器对段的处理 链接器是开发链接器是开发链接器是开发链接器是开发C54xC54xC54xC54x器件必不可少的开发工具器件必不可少的开发工具器件必不可少的开发工具器件必不可少的开发工具之一,它对段处理时有之一,它对段处理时有之一,它对段处理时有之一,它对段处理时有2 2 2 2个主要任务:个主要任务:个主要任务:个主要任务: 将一个或多个将一个或多个将一个或多个将一个或多个COFFCOFFCOFFCOFF目标文件中的各种段作为目标文件中的各种段作为目标文件

110、中的各种段作为目标文件中的各种段作为链接器的输入段,经链接后在一个执行的链接器的输入段,经链接后在一个执行的链接器的输入段,经链接后在一个执行的链接器的输入段,经链接后在一个执行的COFFCOFFCOFFCOFF输出输出输出输出模块中建立各个输出段;模块中建立各个输出段;模块中建立各个输出段;模块中建立各个输出段; 在程序装入时对其重新定位,在程序装入时对其重新定位,在程序装入时对其重新定位,在程序装入时对其重新定位,为各个输出段为各个输出段为各个输出段为各个输出段选定存储器地址。选定存储器地址。选定存储器地址。选定存储器地址。 2024/9/222024/9/224646第第第第第第4 4

111、4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器对段的处理链接器对段的处理链接器对段的处理链接器对段的处理 链接器有链接器有链接器有链接器有2 2 2 2条伪指令支持上述任务:条伪指令支持上述任务:条伪指令支持上述任务:条伪指令支持上述任务: MEMORYMEMORYMEMORYMEMORY伪指令伪指令伪指令伪指令用来定义目标系统的存储用来定义目标系统的存储用来定义目标系统的存储用来定义目标系统的存储器配置空间,包括对存储器各部分命名,以及规定器配置空间,包括对存储器各部分命名,以及规定

112、器配置空间,包括对存储器各部分命名,以及规定器配置空间,包括对存储器各部分命名,以及规定它们的起始地址和长度。它们的起始地址和长度。它们的起始地址和长度。它们的起始地址和长度。 SECTIONSSECTIONSSECTIONSSECTIONS伪指令伪指令伪指令伪指令用来指定链接器将输入用来指定链接器将输入用来指定链接器将输入用来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位段组合成输出段方式,以及输出段在存储器中的位段组合成输出段方式,以及输出段在存储器中的位段组合成输出段方式,以及输出段在存储器中的位置,也可用于指定子段。置,也可用于指定子段。置,也可用于指定子段。置,也可用于

113、指定子段。 若未使用伪指令,则链接器将使用目标处理器若未使用伪指令,则链接器将使用目标处理器若未使用伪指令,则链接器将使用目标处理器若未使用伪指令,则链接器将使用目标处理器默认的方法将段放入存储空间。默认的方法将段放入存储空间。默认的方法将段放入存储空间。默认的方法将段放入存储空间。 2024/9/222024/9/224747第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器对段的处理链接器对段的处理链接器对段的处理链接器对段的处理 1.1.1.1. 默认的存储器分配

114、默认的存储器分配默认的存储器分配默认的存储器分配 链接器可对多个目标文件进行链接。若链接文件链接器可对多个目标文件进行链接。若链接文件链接器可对多个目标文件进行链接。若链接文件链接器可对多个目标文件进行链接。若链接文件中不使用中不使用中不使用中不使用MEMORYMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSSECTIONSSECTIONS命令,则为默认方式。命令,则为默认方式。命令,则为默认方式。命令,则为默认方式。 每个目标文件都有每个目标文件都有每个目标文件都有每个目标文件都有. . . .texttexttexttext,.data.data.data.da

115、ta、. . . .bssbssbssbss段和命名段和命名段和命名段和命名段。若采用默认链接,链接器将对多个目标文件中的段。若采用默认链接,链接器将对多个目标文件中的段。若采用默认链接,链接器将对多个目标文件中的段。若采用默认链接,链接器将对多个目标文件中的各个段进行组合,形成各自的对应段,并将各个段配各个段进行组合,形成各自的对应段,并将各个段配各个段进行组合,形成各自的对应段,并将各个段配各个段进行组合,形成各自的对应段,并将各个段配置到所指定的存储器中,形成可执行的目标模块。置到所指定的存储器中,形成可执行的目标模块。置到所指定的存储器中,形成可执行的目标模块。置到所指定的存储器中,形

116、成可执行的目标模块。 在默认的方式下,链接器将从存储器的在默认的方式下,链接器将从存储器的在默认的方式下,链接器将从存储器的在默认的方式下,链接器将从存储器的0080008000800080h h h h开开开开始,对组合后的各段进行存储器配置。始,对组合后的各段进行存储器配置。始,对组合后的各段进行存储器配置。始,对组合后的各段进行存储器配置。2024/9/222024/9/224848第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 默认的存储器分配:默认的存储器分配:默

117、认的存储器分配:默认的存储器分配: 将所有将所有将所有将所有. . . .texttexttexttext段组合在一起,形成一个段组合在一起,形成一个段组合在一起,形成一个段组合在一起,形成一个. . . .texttexttexttext段,并分配到程序存储器中;段,并分配到程序存储器中;段,并分配到程序存储器中;段,并分配到程序存储器中; 将多个目标文件中的将多个目标文件中的将多个目标文件中的将多个目标文件中的. . . .datadatadatadata段组合在一起,分段组合在一起,分段组合在一起,分段组合在一起,分配到紧接着配到紧接着配到紧接着配到紧接着. . . .texttextt

118、exttext段的程序存储空间中;段的程序存储空间中;段的程序存储空间中;段的程序存储空间中; 将将将将. . . .bssbssbssbss段组合,配置到数据存储器中;段组合,配置到数据存储器中;段组合,配置到数据存储器中;段组合,配置到数据存储器中; 组合命名段。初始化的命名段按顺序分配到组合命名段。初始化的命名段按顺序分配到组合命名段。初始化的命名段按顺序分配到组合命名段。初始化的命名段按顺序分配到紧随紧随紧随紧随. . . .datadatadatadata段的程序存储器,而未初始化命名段将被段的程序存储器,而未初始化命名段将被段的程序存储器,而未初始化命名段将被段的程序存储器,而未初

119、始化命名段将被配置到紧随配置到紧随配置到紧随配置到紧随. . . .bssbssbssbss段的数据存储器中。段的数据存储器中。段的数据存储器中。段的数据存储器中。 1.1.1.1. 默认的存储器分配默认的存储器分配默认的存储器分配默认的存储器分配 2024/9/222024/9/224949第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 默认的存储器分配过程:默认的存储器分配过程:默认的存储器分配过程:默认的存储器分配过程:File1.objFile1.obj. .tex

120、t1text1. .data1data1. .bss1bss1table_1table_1 ( (初始化的命名段初始化的命名段初始化的命名段初始化的命名段) )u_vars1u_vars1 ( (未初始化的命名段未初始化的命名段未初始化的命名段未初始化的命名段) )File2.objFile2.obj. .text2text2. .data2data2. .bss2bss2table_2table_2 ( (初始化的命名段初始化的命名段初始化的命名段初始化的命名段) )u_vars2u_vars2 ( (未初始化的命名段未初始化的命名段未初始化的命名段未初始化的命名段) )FFTFFT( (初

121、始化的命名段初始化的命名段初始化的命名段初始化的命名段) )程序存储器程序存储器程序存储器程序存储器数据存储器数据存储器数据存储器数据存储器.text.text. .text1text1. .text2text2.data.data. .data1data1. .data2data2 .bss .bss. .bss1bss1. .bss2bss2tabletabletable_1table_1table_2table_2u_vars1u_vars1u_vars1u_vars1u_vars2u_vars2FFTFFTFFTFFT没有使用没有使用没有使用没有使用没有配置没有配置没有配置没有配置没有

122、配置没有配置没有配置没有配置没有使用没有使用没有使用没有使用2024/9/222024/9/225050第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器对段的处理链接器对段的处理链接器对段的处理链接器对段的处理 2.2.2.2. 段放入存储器空间段放入存储器空间段放入存储器空间段放入存储器空间 若不希望链接器将所有的若不希望链接器将所有的若不希望链接器将所有的若不希望链接器将所有的. . . .texttexttexttext段结合在一起形成段结合在一起形成段结合在一

123、起形成段结合在一起形成单个的单个的单个的单个的. . . .texttexttexttext段,就不能采用默认的方式。段,就不能采用默认的方式。段,就不能采用默认的方式。段,就不能采用默认的方式。 由于由于由于由于DSPDSPDSPDSP硬件系统中可能配置多种类型的存储器硬件系统中可能配置多种类型的存储器硬件系统中可能配置多种类型的存储器硬件系统中可能配置多种类型的存储器, , , ,若要把某一段分配到特定类型的存储器中,或将命名若要把某一段分配到特定类型的存储器中,或将命名若要把某一段分配到特定类型的存储器中,或将命名若要把某一段分配到特定类型的存储器中,或将命名段配置特定的地址,则需采用段

124、配置特定的地址,则需采用段配置特定的地址,则需采用段配置特定的地址,则需采用MEMORYMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSSECTIONSSECTIONS伪指伪指伪指伪指令来配置。令来配置。令来配置。令来配置。 若不采用默认的方式,通常需要建立一个链接命若不采用默认的方式,通常需要建立一个链接命若不采用默认的方式,通常需要建立一个链接命若不采用默认的方式,通常需要建立一个链接命令文件,在命令文件中用令文件,在命令文件中用令文件,在命令文件中用令文件,在命令文件中用MEMORYMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSS

125、ECTIONSSECTIONS伪指令定伪指令定伪指令定伪指令定义存储器和配置段地址。义存储器和配置段地址。义存储器和配置段地址。义存储器和配置段地址。 2024/9/222024/9/225151第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器对程序的重新定位链接器对程序的重新定位链接器对程序的重新定位链接器对程序的重新定位 1.1.1.1. 链接器重新定位链接器重新定位链接器重新定位链接器重新定位 汇编器对每个段汇编时都是从汇编器对每个段汇编时都是从汇编器对每个段汇

126、编时都是从汇编器对每个段汇编时都是从0 0地址开始,而所地址开始,而所地址开始,而所地址开始,而所有需要重新定位的符号有需要重新定位的符号有需要重新定位的符号有需要重新定位的符号( ( ( (标号标号标号标号) ) ) )在段内都是相对于在段内都是相对于在段内都是相对于在段内都是相对于0 0地地地地址的。事实上,所有段都不可能从存储器中址的。事实上,所有段都不可能从存储器中址的。事实上,所有段都不可能从存储器中址的。事实上,所有段都不可能从存储器中0 0地址单地址单地址单地址单元开始,因此链接器必须对各个段进行重新定位。元开始,因此链接器必须对各个段进行重新定位。元开始,因此链接器必须对各个段

127、进行重新定位。元开始,因此链接器必须对各个段进行重新定位。 重新定位的方法:重新定位的方法:重新定位的方法:重新定位的方法: 将各个段配置到存储器中,使每个段都有一个将各个段配置到存储器中,使每个段都有一个将各个段配置到存储器中,使每个段都有一个将各个段配置到存储器中,使每个段都有一个 合适的起始地址;合适的起始地址;合适的起始地址;合适的起始地址; 将符号变量调整到相对于新的段地址的位置;将符号变量调整到相对于新的段地址的位置;将符号变量调整到相对于新的段地址的位置;将符号变量调整到相对于新的段地址的位置; 将引用调整到重新定位后的符号,这些符号将引用调整到重新定位后的符号,这些符号将引用调

128、整到重新定位后的符号,这些符号将引用调整到重新定位后的符号,这些符号 反映了调整后的新符号值。反映了调整后的新符号值。反映了调整后的新符号值。反映了调整后的新符号值。 2024/9/222024/9/225252第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 链接器重新定位链接器重新定位链接器重新定位链接器重新定位 汇编器在需要引用重新定位的符号处都留了一汇编器在需要引用重新定位的符号处都留了一汇编器在需要引用重新定位的符号处都留了一汇编器在需要引用重新定位

129、的符号处都留了一个重定位入口。链接器在对符号重新定位时,利用个重定位入口。链接器在对符号重新定位时,利用个重定位入口。链接器在对符号重新定位时,利用个重定位入口。链接器在对符号重新定位时,利用这些入口修正对符号的引用值。这些入口修正对符号的引用值。这些入口修正对符号的引用值。这些入口修正对符号的引用值。 【例】【例】【例】【例】一段采用助记符指令编写的程序,经汇编后得列表文一段采用助记符指令编写的程序,经汇编后得列表文一段采用助记符指令编写的程序,经汇编后得列表文一段采用助记符指令编写的程序,经汇编后得列表文件如下:件如下:件如下:件如下: 1 1 1 1 . . . . ref Xref X

130、ref Xref X2 2 2 2 . ref Z. ref Z. ref Z. ref Z3 3 3 3 0000 0000 0000 0000 . text. text. text. text4 4 4 4 0000 0000 0000 0000 F073F073F073F073 B YB YB YB Y ;产生一个重定位入口产生一个重定位入口产生一个重定位入口产生一个重定位入口 0001 0001 0001 0001 00060006000600065 5 5 5 0002 0002 0002 0002 F073F073F073F073 B ZB ZB ZB Z ;产生一个重定位入口产生

131、一个重定位入口产生一个重定位入口产生一个重定位入口 0003 0003 0003 0003 0000000000000000!6 6 6 6 0004 0004 0004 0004 F020F020F020F020 LD #XLD #XLD #XLD #X,A A A A ;产生一个重定位入口产生一个重定位入口产生一个重定位入口产生一个重定位入口 0005 0005 0005 0005 0000000000000000!7 7 7 7 0006 0006 0006 0006 F7E0F7E0F7E0F7E0 Y Y Y Y: RESET RESET RESET RESET 2024/9/222

132、024/9/225353第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 链接器重新定位链接器重新定位链接器重新定位链接器重新定位 程序中有三个符号:程序中有三个符号:程序中有三个符号:程序中有三个符号: X X X X、ZZZZ是在另一个模块中定义的;是在另一个模块中定义的;是在另一个模块中定义的;是在另一个模块中定义的; Y Y Y Y在在在在. . . .texttexttexttext段中定义的。段中定义的。段中定义的。段中定义的。 当程序汇编时,当程

133、序汇编时,当程序汇编时,当程序汇编时,X X X X、Z Z Z Z的值为的值为的值为的值为0000未定义的外部符号未定义的外部符号未定义的外部符号未定义的外部符号 Y Y Y Y的值为的值为的值为的值为6 6 6 6相对于相对于相对于相对于. . . .texttexttexttext段地址段地址段地址段地址0 0 0 0定义定义定义定义 汇编器形成了两个重定位入口:汇编器形成了两个重定位入口:汇编器形成了两个重定位入口:汇编器形成了两个重定位入口: X X X X和和和和Z Z Z Z:在在在在. . . .texttexttexttext段中为一次外部引用,用符号!表示;段中为一次外部引

134、用,用符号!表示;段中为一次外部引用,用符号!表示;段中为一次外部引用,用符号!表示; Y Y Y Y:是一次内部引用,用符号是一次内部引用,用符号是一次内部引用,用符号是一次内部引用,用符号表示表示表示表示。 链接时,链接时,链接时,链接时,X X X X重新定位在地址重新定位在地址重新定位在地址重新定位在地址7100710071007100h h h h . . . .texttexttexttext段起始地址重新定位在段起始地址重新定位在段起始地址重新定位在段起始地址重新定位在7200720072007200h h h h Y Y Y Y的重新定位值为的重新定位值为的重新定位值为的重新定

135、位值为7204720472047204h h h h。 2024/9/222024/9/225454第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 链接器重新定位链接器重新定位链接器重新定位链接器重新定位 链接器利用两个重定位入口,对目标文件中的两次引用链接器利用两个重定位入口,对目标文件中的两次引用链接器利用两个重定位入口,对目标文件中的两次引用链接器利用两个重定位入口,对目标文件中的两次引用进行修正:进行修正:进行修正:进行修正:变成变成变成变成 f07

136、3f073f073f073 7204720472047204变成变成变成变成 f020f020f020f020 7100710071007100 f073f073f073f073 B YB YB YB Y 0004000400040004 f020f020f020f020 LD #XLD #XLD #XLD #X,A A A A 0000!0000!0000!0000! 2024/9/222024/9/225555第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器对程序

137、的重新定位链接器对程序的重新定位链接器对程序的重新定位链接器对程序的重新定位 2.2.2.2. 运行时间重新定位运行时间重新定位运行时间重新定位运行时间重新定位 在实际运行中,有时需要将代码装入存储器的一在实际运行中,有时需要将代码装入存储器的一在实际运行中,有时需要将代码装入存储器的一在实际运行中,有时需要将代码装入存储器的一个地方,而在另一个地方运行。个地方,而在另一个地方运行。个地方,而在另一个地方运行。个地方,而在另一个地方运行。 如:一些关键的执行代码必须装在系统的如:一些关键的执行代码必须装在系统的如:一些关键的执行代码必须装在系统的如:一些关键的执行代码必须装在系统的ROMROM

138、ROMROM中中中中, , , ,但运行时希望在较快的但运行时希望在较快的但运行时希望在较快的但运行时希望在较快的RAMRAMRAMRAM中进行。中进行。中进行。中进行。 利用利用利用利用SECTIONSSECTIONSSECTIONSSECTIONS伪指令选项可让链接器对其定位伪指令选项可让链接器对其定位伪指令选项可让链接器对其定位伪指令选项可让链接器对其定位2 2 2 2次,其方法:次,其方法:次,其方法:次,其方法: 使用装入关键字设置装入地址;使用装入关键字设置装入地址;使用装入关键字设置装入地址;使用装入关键字设置装入地址; 使用运行关键字设置它的运行地址。使用运行关键字设置它的运行

139、地址。使用运行关键字设置它的运行地址。使用运行关键字设置它的运行地址。2024/9/222024/9/225656第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器对程序的重新定位链接器对程序的重新定位链接器对程序的重新定位链接器对程序的重新定位 2.2.2.2. 运行时间重新定位运行时间重新定位运行时间重新定位运行时间重新定位 装入地址确定段的原始数据或代码装入的位置,装入地址确定段的原始数据或代码装入的位置,装入地址确定段的原始数据或代码装入的位置,装入地址确定段的

140、原始数据或代码装入的位置,而任何对段的使用(例如其中的标号),则参考它的而任何对段的使用(例如其中的标号),则参考它的而任何对段的使用(例如其中的标号),则参考它的而任何对段的使用(例如其中的标号),则参考它的运行地址。在应用中必须将该段从装入地址复制到运运行地址。在应用中必须将该段从装入地址复制到运运行地址。在应用中必须将该段从装入地址复制到运运行地址。在应用中必须将该段从装入地址复制到运行地址。行地址。行地址。行地址。 如果只为段提供了一次定位(装入或运行),则如果只为段提供了一次定位(装入或运行),则如果只为段提供了一次定位(装入或运行),则如果只为段提供了一次定位(装入或运行),则该段

141、将只定位一次,并且装入和运行地址相同。如果该段将只定位一次,并且装入和运行地址相同。如果该段将只定位一次,并且装入和运行地址相同。如果该段将只定位一次,并且装入和运行地址相同。如果提供了提供了提供了提供了2 2 2 2个地址,则段将被自动定位。个地址,则段将被自动定位。个地址,则段将被自动定位。个地址,则段将被自动定位。 2024/9/222024/9/225757第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 程序装入程序装入程序装入程序装入 链接器产生可执行的链接器产生

142、可执行的链接器产生可执行的链接器产生可执行的COFFCOFFCOFFCOFF目标文件。可执行的目标文件。可执行的目标文件。可执行的目标文件。可执行的目标文件模块与链接器输入的目标文件具有相同的目标文件模块与链接器输入的目标文件具有相同的目标文件模块与链接器输入的目标文件具有相同的目标文件模块与链接器输入的目标文件具有相同的COFFCOFFCOFFCOFF格式。为了运行程序,在可执行模块中的数据格式。为了运行程序,在可执行模块中的数据格式。为了运行程序,在可执行模块中的数据格式。为了运行程序,在可执行模块中的数据必须传输或装入目标系统存储器中。必须传输或装入目标系统存储器中。必须传输或装入目标系

143、统存储器中。必须传输或装入目标系统存储器中。 可以采用以下方法装入程序:可以采用以下方法装入程序:可以采用以下方法装入程序:可以采用以下方法装入程序: 使用调试工具转入程序使用调试工具转入程序使用调试工具转入程序使用调试工具转入程序 C54xC54xC54xC54x的调试工具包括软件模拟器,的调试工具包括软件模拟器,的调试工具包括软件模拟器,的调试工具包括软件模拟器,XDSXDSXDSXDS仿真器仿真器仿真器仿真器和集成系统和集成系统和集成系统和集成系统CCSCCSCCSCCS。它们都具有内部的装入器,调用装它们都具有内部的装入器,调用装它们都具有内部的装入器,调用装它们都具有内部的装入器,调

144、用装入器的入器的入器的入器的LOADLOADLOADLOAD命令,装入器将程序复制到目标系统的命令,装入器将程序复制到目标系统的命令,装入器将程序复制到目标系统的命令,装入器将程序复制到目标系统的存储器中。存储器中。存储器中。存储器中。 采用采用采用采用HexHexHexHex转换工具转入程序转换工具转入程序转换工具转入程序转换工具转入程序 可以使用转换工具可以使用转换工具可以使用转换工具可以使用转换工具Hex500Hex500Hex500Hex500,将可执行将可执行将可执行将可执行COFFCOFFCOFFCOFF目标目标目标目标模块转换成几种其他目标格式文件,然后将转换后模块转换成几种其他

145、目标格式文件,然后将转换后模块转换成几种其他目标格式文件,然后将转换后模块转换成几种其他目标格式文件,然后将转换后的文件通过编程器将程序装(烧)进的文件通过编程器将程序装(烧)进的文件通过编程器将程序装(烧)进的文件通过编程器将程序装(烧)进EPROMEPROMEPROMEPROM。 2024/9/222024/9/225858第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 COFFCOFFCOFFCOFF文件中的符号文件中的符号文件中的符号文件中的符号 COFFCOFFC

146、OFFCOFF文件中有一个符号表,主要用来存储程序文件中有一个符号表,主要用来存储程序文件中有一个符号表,主要用来存储程序文件中有一个符号表,主要用来存储程序中有关符号的信息。链接器在执行程序定位时,要中有关符号的信息。链接器在执行程序定位时,要中有关符号的信息。链接器在执行程序定位时,要中有关符号的信息。链接器在执行程序定位时,要使用符号表提供的信息,而调试工具也要使用该表使用符号表提供的信息,而调试工具也要使用该表使用符号表提供的信息,而调试工具也要使用该表使用符号表提供的信息,而调试工具也要使用该表来提供符号调试。来提供符号调试。来提供符号调试。来提供符号调试。 1.1.1.1. 外部符

147、号外部符号外部符号外部符号 是指在一个模块中定义、而在另一个模块中引是指在一个模块中定义、而在另一个模块中引是指在一个模块中定义、而在另一个模块中引是指在一个模块中定义、而在另一个模块中引用的符号。它可以用伪指令用的符号。它可以用伪指令用的符号。它可以用伪指令用的符号。它可以用伪指令. . . .defdefdefdef、. . . .refrefrefref或或或或. . . .globalglobalglobalglobal来来来来定义。定义。定义。定义。 . . . .defdefdefdef在当前模块中定义,并可在别的模块中使在当前模块中定义,并可在别的模块中使在当前模块中定义,并可在

148、别的模块中使在当前模块中定义,并可在别的模块中使用的符号;用的符号;用的符号;用的符号; . . . .ref ref ref ref 在当前模块中使用,但在别的模块中定义在当前模块中使用,但在别的模块中定义在当前模块中使用,但在别的模块中定义在当前模块中使用,但在别的模块中定义的符号;的符号;的符号;的符号; . . . .globalglobalglobalglobal可以是上面的任何一种情况。可以是上面的任何一种情况。可以是上面的任何一种情况。可以是上面的任何一种情况。 2024/9/222024/9/225959第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语

149、言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 外部符号外部符号外部符号外部符号【例】【例】【例】【例】说明代码段中外部符号的定义。说明代码段中外部符号的定义。说明代码段中外部符号的定义。说明代码段中外部符号的定义。 x x x x: ADD #56h ADD #56h ADD #56h ADD #56h,A A A A B y B y B y B y .def x .def x .def x .def x . . . .ref yref yref yref y ; ;定义定义定义定义x x x x ; ;引用引用引用引用y y

150、y y ; ;x x x x在此模块中定义,可为别在此模块中定义,可为别在此模块中定义,可为别在此模块中定义,可为别 的模块引用的模块引用的模块引用的模块引用 ; ;y y y y在这里引用,它在别的模在这里引用,它在别的模在这里引用,它在别的模在这里引用,它在别的模 块中定义块中定义块中定义块中定义 2024/9/222024/9/226060第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 COFFCOFFCOFFCOFF文件中的符号文件中的符号文件中的符号文件中的符号

151、2.2.2.2. 符号表符号表符号表符号表 每当遇到一个外部符号,无论是定义的还是引每当遇到一个外部符号,无论是定义的还是引每当遇到一个外部符号,无论是定义的还是引每当遇到一个外部符号,无论是定义的还是引用的,汇编器都将在符号表中产生一个条目。用的,汇编器都将在符号表中产生一个条目。用的,汇编器都将在符号表中产生一个条目。用的,汇编器都将在符号表中产生一个条目。 汇编器还产生一个指到每段的专门符号,链接汇编器还产生一个指到每段的专门符号,链接汇编器还产生一个指到每段的专门符号,链接汇编器还产生一个指到每段的专门符号,链接器使用这些符号将其他引用符号重新定位。器使用这些符号将其他引用符号重新定位

152、。器使用这些符号将其他引用符号重新定位。器使用这些符号将其他引用符号重新定位。 2024/9/222024/9/226161第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.4 4.4 源程序的源程序的汇编 汇编器的作用是将汇编语言源程序转换成机器汇编器的作用是将汇编语言源程序转换成机器汇编器的作用是将汇编语言源程序转换成机器汇编器的作用是将汇编语言源程序转换成机器语言目标文件。这些目标文件都是公共目标文件格语言目标文件。这些目标文件都是公共目标文件格语言目标文件。这些目标

153、文件都是公共目标文件格语言目标文件。这些目标文件都是公共目标文件格式式式式( ( ( (COFF)COFF)COFF)COFF)。 汇编语言源程序文件可以包含汇编命令汇编语言源程序文件可以包含汇编命令汇编语言源程序文件可以包含汇编命令汇编语言源程序文件可以包含汇编命令、汇编汇编汇编汇编语言指令和宏指令语言指令和宏指令语言指令和宏指令语言指令和宏指令。 汇编命令用来控制汇编的过程,包括列表格式、汇编命令用来控制汇编的过程,包括列表格式、汇编命令用来控制汇编的过程,包括列表格式、汇编命令用来控制汇编的过程,包括列表格式、符号定义和将源代码放入块的方式等。符号定义和将源代码放入块的方式等。符号定义和

154、将源代码放入块的方式等。符号定义和将源代码放入块的方式等。 2024/9/222024/9/226262第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.4 4.4 源程序的源程序的汇编 汇编器包括如下功能:汇编器包括如下功能:汇编器包括如下功能:汇编器包括如下功能: 将汇编语言源程序汇编成一个可重新定位的将汇编语言源程序汇编成一个可重新定位的将汇编语言源程序汇编成一个可重新定位的将汇编语言源程序汇编成一个可重新定位的目标文件目标文件目标文件目标文件(.(.(.(.objo

155、bjobjobj文件文件文件文件) ) ) )。 根据需要,可以生成一个列表文件根据需要,可以生成一个列表文件根据需要,可以生成一个列表文件根据需要,可以生成一个列表文件(.(.(.(.lstlstlstlst文文文文件件件件) ) ) ),并对该列表进行控制。,并对该列表进行控制。,并对该列表进行控制。,并对该列表进行控制。 将程序代码分成若干个段,每个段的目标代将程序代码分成若干个段,每个段的目标代将程序代码分成若干个段,每个段的目标代将程序代码分成若干个段,每个段的目标代码都有一个码都有一个码都有一个码都有一个SPC(SPC(SPC(SPC(段程序计数器段程序计数器段程序计数器段程序计数

156、器) ) ) )管理。管理。管理。管理。 2024/9/222024/9/226363第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.4 4.4 源程序的源程序的汇编 汇编器包括如下功能:汇编器包括如下功能:汇编器包括如下功能:汇编器包括如下功能: 定义和引用全局符号,如果需要可以在列表定义和引用全局符号,如果需要可以在列表定义和引用全局符号,如果需要可以在列表定义和引用全局符号,如果需要可以在列表文件后面附加一张交叉引用表。文件后面附加一张交叉引用表。文件后面附加一张交

157、叉引用表。文件后面附加一张交叉引用表。 对条件程序块进行汇编。对条件程序块进行汇编。对条件程序块进行汇编。对条件程序块进行汇编。 支持宏功能,允许定义宏命令。支持宏功能,允许定义宏命令。支持宏功能,允许定义宏命令。支持宏功能,允许定义宏命令。 为每个目标代码块设置一个程序计数器为每个目标代码块设置一个程序计数器为每个目标代码块设置一个程序计数器为每个目标代码块设置一个程序计数器SPCSPCSPCSPC。 2024/9/222024/9/226464第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具

158、汇编语言程序开发工具4.4 4.4 源程序的源程序的汇编 汇编程序的运行汇编程序的运行汇编程序的运行汇编程序的运行 C54xC54xC54xC54x的汇编程序名为的汇编程序名为的汇编程序名为的汇编程序名为asm500asm500asm500asm500. . . .exeexeexeexe。要运行汇编要运行汇编要运行汇编要运行汇编程序,可键入如下命令:程序,可键入如下命令:程序,可键入如下命令:程序,可键入如下命令: asm500asm500 input fileinput file object fileobject file listing filelisting file -option

159、s-options Asm500Asm500 : : 运行汇编程序运行汇编程序运行汇编程序运行汇编程序asmasmasmasm 的命令的命令的命令的命令。 input fileinput file : : 汇编源文件名,默认扩展名为汇编源文件名,默认扩展名为汇编源文件名,默认扩展名为汇编源文件名,默认扩展名为. . . .asmasmasmasm。 object fileobject file : : 汇编程序生成的汇编程序生成的汇编程序生成的汇编程序生成的C54xC54xC54xC54x目标文件,扩展名为目标文件,扩展名为目标文件,扩展名为目标文件,扩展名为. . . .objobjobjo

160、bj。 若不提供目标文件名,则汇编程序就用输入文件若不提供目标文件名,则汇编程序就用输入文件若不提供目标文件名,则汇编程序就用输入文件若不提供目标文件名,则汇编程序就用输入文件 或目标文件名。或目标文件名。或目标文件名。或目标文件名。listing filelisting file : : 汇编器产生的列表文件名,默认扩展名为汇编器产生的列表文件名,默认扩展名为汇编器产生的列表文件名,默认扩展名为汇编器产生的列表文件名,默认扩展名为. . . .lstlstlstlst。 -options-options : : 汇编器的选项,为汇编器的使用提供各种选择。汇编器的选项,为汇编器的使用提供各种选

161、择。汇编器的选项,为汇编器的使用提供各种选择。汇编器的选项,为汇编器的使用提供各种选择。 2024/9/222024/9/226565第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编器汇编器汇编器汇编器asmasm500500的选项及其功能的选项及其功能的选项及其功能的选项及其功能 选选选选 项项项项功功功功 能能能能- - - - - - - -filemane(filemane(文件名文件名文件名文件名) )可以将文件名的内容附加到命令行上。可以将文件名的内容附加到命

162、令行上。可以将文件名的内容附加到命令行上。可以将文件名的内容附加到命令行上。 使用该选项可以避免命令行长度的限制。如果在一个命令文件、使用该选项可以避免命令行长度的限制。如果在一个命令文件、使用该选项可以避免命令行长度的限制。如果在一个命令文件、使用该选项可以避免命令行长度的限制。如果在一个命令文件、 文件名或选项参数中包含了嵌入的空格或连字号,则必须使用文件名或选项参数中包含了嵌入的空格或连字号,则必须使用文件名或选项参数中包含了嵌入的空格或连字号,则必须使用文件名或选项参数中包含了嵌入的空格或连字号,则必须使用 引号括起来,例如:引号括起来,例如:引号括起来,例如:引号括起来,例如:“th

163、is-file.asmthis-file.asm”。 - - - -a a 建立一个绝对列表文件。建立一个绝对列表文件。建立一个绝对列表文件。建立一个绝对列表文件。 当选用当选用当选用当选用- - - -a a时,汇编器不产生目标文件时,汇编器不产生目标文件时,汇编器不产生目标文件时,汇编器不产生目标文件。- - - -c c 使汇编语言文件中大小写没有区别使汇编语言文件中大小写没有区别使汇编语言文件中大小写没有区别使汇编语言文件中大小写没有区别。- - - -d d 为名字符号设置初值。格式为为名字符号设置初值。格式为为名字符号设置初值。格式为为名字符号设置初值。格式为- - - -d na

164、me=valued name=value时,时,时,时,与汇编文件与汇编文件与汇编文件与汇编文件 被插入被插入被插入被插入name .set=valuename .set=value是等效的。是等效的。是等效的。是等效的。 如果如果如果如果valuevalue被省略被省略被省略被省略,则此名字符号被置为,则此名字符号被置为,则此名字符号被置为,则此名字符号被置为1 1。 - - - -f f 抑制汇编器给没有抑制汇编器给没有抑制汇编器给没有抑制汇编器给没有. .asmasm扩展名的文件添加扩展名的默认行为。扩展名的文件添加扩展名的默认行为。扩展名的文件添加扩展名的默认行为。扩展名的文件添加扩展

165、名的默认行为。 2024/9/222024/9/226666第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编器汇编器汇编器汇编器asmasm500500的选项及其功能的选项及其功能的选项及其功能的选项及其功能 选选选选 项项项项功功功功 能能能能- - - -g g 允许汇编器在源代码中进行代码调试。汇编语言源文件允许汇编器在源代码中进行代码调试。汇编语言源文件允许汇编器在源代码中进行代码调试。汇编语言源文件允许汇编器在源代码中进行代码调试。汇编语言源文件 中每行的信息输

166、出到中每行的信息输出到中每行的信息输出到中每行的信息输出到COFFCOFF文件中。文件中。文件中。文件中。 注意:用户不能对已经包含注意:用户不能对已经包含注意:用户不能对已经包含注意:用户不能对已经包含. .lineline伪指令的汇编代码使用伪指令的汇编代码使用伪指令的汇编代码使用伪指令的汇编代码使用- -g g 选项。例如由选项。例如由选项。例如由选项。例如由C/C+C/C+编译器运行编译器运行编译器运行编译器运行- -g g选项产生的代码选项产生的代码选项产生的代码选项产生的代码。 - - - -h, h, - - - -help, help, - - - -? ? 这些选项的任一个将

167、显示可供使用的汇编器选项的清单。这些选项的任一个将显示可供使用的汇编器选项的清单。这些选项的任一个将显示可供使用的汇编器选项的清单。这些选项的任一个将显示可供使用的汇编器选项的清单。 - - - -hchc 将选定的文件复制到汇编模块。格式为将选定的文件复制到汇编模块。格式为将选定的文件复制到汇编模块。格式为将选定的文件复制到汇编模块。格式为- - - -hc filenamehc filename 所选定的文件包含到源文件语句的前面,复制的文件将所选定的文件包含到源文件语句的前面,复制的文件将所选定的文件包含到源文件语句的前面,复制的文件将所选定的文件包含到源文件语句的前面,复制的文件将 出

168、现在汇编列表文件中。出现在汇编列表文件中。出现在汇编列表文件中。出现在汇编列表文件中。 - - - -hihi 将选定的文件包含到汇编模块。格式为将选定的文件包含到汇编模块。格式为将选定的文件包含到汇编模块。格式为将选定的文件包含到汇编模块。格式为- - - -hi filenamehi filename 所选定的文件包含到源文件语句的前面,所包含的文件所选定的文件包含到源文件语句的前面,所包含的文件所选定的文件包含到源文件语句的前面,所包含的文件所选定的文件包含到源文件语句的前面,所包含的文件 不出现在汇编列表文件中。不出现在汇编列表文件中。不出现在汇编列表文件中。不出现在汇编列表文件中。

169、2024/9/222024/9/226767第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编器汇编器汇编器汇编器asmasm500500的选项及其功能的选项及其功能的选项及其功能的选项及其功能 选选选选 项项项项功功功功 能能能能- - - -i i 规定一个目录。汇编器可以在这个目录下找到规定一个目录。汇编器可以在这个目录下找到规定一个目录。汇编器可以在这个目录下找到规定一个目录。汇编器可以在这个目录下找到. .copycopy、 .include.include或或或

170、或. .mlibmlib命令所命名的文件。命令所命名的文件。命令所命名的文件。命令所命名的文件。 格式为格式为格式为格式为- - - -i pathnamei pathname,最多可规定最多可规定最多可规定最多可规定1010个目录,每一条路径个目录,每一条路径个目录,每一条路径个目录,每一条路径 名的前面都必须加上名的前面都必须加上名的前面都必须加上名的前面都必须加上- - - -i i选项。选项。选项。选项。 - - - -l l (小写(小写(小写(小写L L)生成一个列表文件。生成一个列表文件。生成一个列表文件。生成一个列表文件。 - - - -mfmf 指定汇编调用扩展寻址方式指定汇

171、编调用扩展寻址方式指定汇编调用扩展寻址方式指定汇编调用扩展寻址方式 - - - -mgmg 源文件是代数式指令。源文件是代数式指令。源文件是代数式指令。源文件是代数式指令。 - - - -q q 抑制汇编的标题以及所有的进展信息。抑制汇编的标题以及所有的进展信息。抑制汇编的标题以及所有的进展信息。抑制汇编的标题以及所有的进展信息。 - - - -r, r, - - - -rnumrnum 压缩汇编器由压缩汇编器由压缩汇编器由压缩汇编器由numnum标识的标志。该标志是报告给汇编器标识的标志。该标志是报告给汇编器标识的标志。该标志是报告给汇编器标识的标志。该标志是报告给汇编器 的消息,这种消息不

172、如警告严重。若不对的消息,这种消息不如警告严重。若不对的消息,这种消息不如警告严重。若不对的消息,这种消息不如警告严重。若不对numnum指定值,指定值,指定值,指定值, 则所有标志都将被压缩。则所有标志都将被压缩。则所有标志都将被压缩。则所有标志都将被压缩。2024/9/222024/9/226868第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编器汇编器汇编器汇编器asmasm500500的选项及其功能的选项及其功能的选项及其功能的选项及其功能 选选选选 项项项项功功

173、功功 能能能能- - - -pw pw 对某些汇编代码的流水线冲突发出警告。对某些汇编代码的流水线冲突发出警告。对某些汇编代码的流水线冲突发出警告。对某些汇编代码的流水线冲突发出警告。 - - - -u u - - - -u nameu name取消预先定义的常数名,从而不考虑由任何取消预先定义的常数名,从而不考虑由任何取消预先定义的常数名,从而不考虑由任何取消预先定义的常数名,从而不考虑由任何- - - -d d 选项所指定的常数。选项所指定的常数。选项所指定的常数。选项所指定的常数。 - - - -v v - - - -v valuev value确定使用的处理器,可用确定使用的处理器,可

174、用确定使用的处理器,可用确定使用的处理器,可用541,542,543, 545, 5451541,542,543, 545, 5451p,p, 5461p 5461p, ,548,549548,549值中的一个。值中的一个。值中的一个。值中的一个。 - - - -s s 把所有定义的符号放进目标文件的符号表中。把所有定义的符号放进目标文件的符号表中。把所有定义的符号放进目标文件的符号表中。把所有定义的符号放进目标文件的符号表中。 汇编程序通常只将全局符号放进符号表。当利用汇编程序通常只将全局符号放进符号表。当利用汇编程序通常只将全局符号放进符号表。当利用汇编程序通常只将全局符号放进符号表。当利

175、用- - - -s s选项时选项时选项时选项时, , , , 所定义的标号以及汇编时定义的常数也都放进符号表内。所定义的标号以及汇编时定义的常数也都放进符号表内。所定义的标号以及汇编时定义的常数也都放进符号表内。所定义的标号以及汇编时定义的常数也都放进符号表内。 - - - -x x 产生一个交叉引用表,并将它附加到列表文件的最后,产生一个交叉引用表,并将它附加到列表文件的最后,产生一个交叉引用表,并将它附加到列表文件的最后,产生一个交叉引用表,并将它附加到列表文件的最后, 还在目标文件上加上交叉引用信息。即使没有要求生成还在目标文件上加上交叉引用信息。即使没有要求生成还在目标文件上加上交叉引

176、用信息。即使没有要求生成还在目标文件上加上交叉引用信息。即使没有要求生成 列表文件,汇编程序总还是要建立列表文件的。列表文件,汇编程序总还是要建立列表文件的。列表文件,汇编程序总还是要建立列表文件的。列表文件,汇编程序总还是要建立列表文件的。 2024/9/222024/9/226969第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编时的列表文件汇编时的列表文件汇编时的列表文件汇编时的列表文件 汇编器对源程序汇编时,如果采用汇编器对源程序汇编时,如果采用汇编器对源程序汇

177、编时,如果采用汇编器对源程序汇编时,如果采用- - - -l l l l选项,汇编后将生成选项,汇编后将生成选项,汇编后将生成选项,汇编后将生成一个列表文件。列表文件中包括源程序语句和目标代码。一个列表文件。列表文件中包括源程序语句和目标代码。一个列表文件。列表文件中包括源程序语句和目标代码。一个列表文件。列表文件中包括源程序语句和目标代码。 每个列表文件的顶部有两行汇编程序的标题、一行空行以每个列表文件的顶部有两行汇编程序的标题、一行空行以每个列表文件的顶部有两行汇编程序的标题、一行空行以每个列表文件的顶部有两行汇编程序的标题、一行空行以及页号行。及页号行。及页号行。及页号行。. . . .

178、titletitle命令提供的文件名打印在页号行左侧;页号命令提供的文件名打印在页号行左侧;页号命令提供的文件名打印在页号行左侧;页号命令提供的文件名打印在页号行左侧;页号打印在此行的右侧。打印在此行的右侧。打印在此行的右侧。打印在此行的右侧。 源文件的每一行都会在列表文件中生成一行。其内容包括源文件的每一行都会在列表文件中生成一行。其内容包括源文件的每一行都会在列表文件中生成一行。其内容包括源文件的每一行都会在列表文件中生成一行。其内容包括行号、段程序计数器行号、段程序计数器行号、段程序计数器行号、段程序计数器SPCSPCSPCSPC的数值、汇编后的目标代码,以及源的数值、汇编后的目标代码,

179、以及源的数值、汇编后的目标代码,以及源的数值、汇编后的目标代码,以及源程序语句。一条指令可以生成程序语句。一条指令可以生成程序语句。一条指令可以生成程序语句。一条指令可以生成1 1 1 1或或或或2 2 2 2个字的目标代码。汇编器为个字的目标代码。汇编器为个字的目标代码。汇编器为个字的目标代码。汇编器为第第第第2 2 2 2字单独列一行,并列出了字单独列一行,并列出了字单独列一行,并列出了字单独列一行,并列出了SPCSPCSPCSPC的数值和目标代码。的数值和目标代码。的数值和目标代码。的数值和目标代码。 2024/9/222024/9/227070第第第第第第4 4 4 4 4 4章章章章

180、章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编时的列表文件汇编时的列表文件汇编时的列表文件汇编时的列表文件 可以看出,列表文件包括可以看出,列表文件包括可以看出,列表文件包括可以看出,列表文件包括4 4 4 4个部分:个部分:个部分:个部分: 源程序语句编号源程序语句编号源程序语句编号源程序语句编号 段程序计数器段程序计数器段程序计数器段程序计数器 目标代码目标代码目标代码目标代码 源程序语句源程序语句源程序语句源程序语句2024/9/222024/9/227171第第第第第第4 4 4 4 4 4章章章章章

181、章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 源程序语句的行号源程序语句的行号源程序语句的行号源程序语句的行号 源程序语句的行号,用十进制数表示。汇编器在源程序语句的行号,用十进制数表示。汇编器在源程序语句的行号,用十进制数表示。汇编器在源程序语句的行号,用十进制数表示。汇编器在汇编时将源程序的行进行编号,有些语句汇编时将源程序的行进行编号,有些语句汇编时将源程序的行进行编号,有些语句汇编时将源程序的行进行编号,有些语句( ( ( (如如如如. . . .title)title)title)titl

182、e)只只只只列行号,不列语句。列行号,不列语句。列行号,不列语句。列行号,不列语句。 汇编器还可能在一行的左边加一个字母,用来表汇编器还可能在一行的左边加一个字母,用来表汇编器还可能在一行的左边加一个字母,用来表汇编器还可能在一行的左边加一个字母,用来表示该行是从一个包含文件汇编的。示该行是从一个包含文件汇编的。示该行是从一个包含文件汇编的。示该行是从一个包含文件汇编的。 汇编器还可能在一行的左边加一个数字,表示嵌汇编器还可能在一行的左边加一个数字,表示嵌汇编器还可能在一行的左边加一个数字,表示嵌汇编器还可能在一行的左边加一个数字,表示嵌入的宏展开或循环程序块的等级。入的宏展开或循环程序块的等

183、级。入的宏展开或循环程序块的等级。入的宏展开或循环程序块的等级。 2.2.2.2. 段程序计数器段程序计数器段程序计数器段程序计数器 用十六进制数表示。所有的段都有用十六进制数表示。所有的段都有用十六进制数表示。所有的段都有用十六进制数表示。所有的段都有SPCSPCSPCSPC。有些伪有些伪有些伪有些伪指令对指令对指令对指令对SPCSPCSPCSPC不发生影响,此时这部分为空格。不发生影响,此时这部分为空格。不发生影响,此时这部分为空格。不发生影响,此时这部分为空格。 2024/9/222024/9/227272第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开

184、发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具3.3.3.3. 目标代码目标代码目标代码目标代码 用十六进制数表示。所有指令经汇编都会产生目用十六进制数表示。所有指令经汇编都会产生目用十六进制数表示。所有指令经汇编都会产生目用十六进制数表示。所有指令经汇编都会产生目标代码。目标代码后面的一些记号表示在链接时需要标代码。目标代码后面的一些记号表示在链接时需要标代码。目标代码后面的一些记号表示在链接时需要标代码。目标代码后面的一些记号表示在链接时需要重新定位。重新定位。重新定位。重新定位。 ! 未定义的外部引用;未定义的外部引用;未定义的外部引用;未定义的外

185、部引用; , 可重新定位的文本段;可重新定位的文本段;可重新定位的文本段;可重新定位的文本段; ” ” 可重新定位的数据段;可重新定位的数据段;可重新定位的数据段;可重新定位的数据段; + + + + 可可可可重新定位的初始化命名段;重新定位的初始化命名段;重新定位的初始化命名段;重新定位的初始化命名段; - - - - 可重新定位的未初始化段;可重新定位的未初始化段;可重新定位的未初始化段;可重新定位的未初始化段; % % % % 复杂的重新定位的表达式。复杂的重新定位的表达式。复杂的重新定位的表达式。复杂的重新定位的表达式。 4.4.4.4. 源程序语句源程序语句源程序语句源程序语句 这一

186、部分包含被汇编器搜索到的源程序的所有字这一部分包含被汇编器搜索到的源程序的所有字这一部分包含被汇编器搜索到的源程序的所有字这一部分包含被汇编器搜索到的源程序的所有字符。汇编器可以接受的每行字符数为符。汇编器可以接受的每行字符数为符。汇编器可以接受的每行字符数为符。汇编器可以接受的每行字符数为200200200200个。个。个。个。 2024/9/222024/9/227373第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 汇编器伪指

187、令是汇编语言程序的一个重要内容。汇编器伪指令是汇编语言程序的一个重要内容。汇编器伪指令是汇编语言程序的一个重要内容。汇编器伪指令是汇编语言程序的一个重要内容。用于为程序提供数据,并控制汇编程序如何汇编源程用于为程序提供数据,并控制汇编程序如何汇编源程用于为程序提供数据,并控制汇编程序如何汇编源程用于为程序提供数据,并控制汇编程序如何汇编源程序。序。序。序。 将代码和数据汇编进指定的段将代码和数据汇编进指定的段将代码和数据汇编进指定的段将代码和数据汇编进指定的段 为未初始化的变量在存储器中保留空间为未初始化的变量在存储器中保留空间为未初始化的变量在存储器中保留空间为未初始化的变量在存储器中保留空

188、间 控制清单文件是否产生控制清单文件是否产生控制清单文件是否产生控制清单文件是否产生 初始化存储器初始化存储器初始化存储器初始化存储器 汇编条件代码块汇编条件代码块汇编条件代码块汇编条件代码块 定义全局变量定义全局变量定义全局变量定义全局变量 为汇编器指定从中可以获得宏的库为汇编器指定从中可以获得宏的库为汇编器指定从中可以获得宏的库为汇编器指定从中可以获得宏的库 考察符号调试信息考察符号调试信息考察符号调试信息考察符号调试信息 汇编器伪指令可完成以下工作:汇编器伪指令可完成以下工作:汇编器伪指令可完成以下工作:汇编器伪指令可完成以下工作: 2024/9/222024/9/227474第第第第第

189、第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 伪指令和它所带的参数必须书写在一行。在包伪指令和它所带的参数必须书写在一行。在包伪指令和它所带的参数必须书写在一行。在包伪指令和它所带的参数必须书写在一行。在包含汇编伪指令的源程序中,伪指令可以带有标号和含汇编伪指令的源程序中,伪指令可以带有标号和含汇编伪指令的源程序中,伪指令可以带有标号和含汇编伪指令的源程序中,伪指令可以带有标号和注释。虽然标号一般不作为伪指令语法的一部分列注释。虽然标号一般

190、不作为伪指令语法的一部分列注释。虽然标号一般不作为伪指令语法的一部分列注释。虽然标号一般不作为伪指令语法的一部分列出,但是有些伪指令必须带有标号,此时,标号将出,但是有些伪指令必须带有标号,此时,标号将出,但是有些伪指令必须带有标号,此时,标号将出,但是有些伪指令必须带有标号,此时,标号将作为伪指令的一部分出现。作为伪指令的一部分出现。作为伪指令的一部分出现。作为伪指令的一部分出现。 2024/9/222024/9/227575第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具

191、 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 C54xC54xC54xC54x汇编器共有汇编器共有汇编器共有汇编器共有64646464条汇编伪指令,根据它们条汇编伪指令,根据它们条汇编伪指令,根据它们条汇编伪指令,根据它们的功能,可以将其分成的功能,可以将其分成的功能,可以将其分成的功能,可以将其分成8 8 8 8类:类:类:类: 对各种段进行定义的命令对各种段进行定义的命令对各种段进行定义的命令对各种段进行定义的命令 如如如如. . . .bssbssbssbss、.data.data.data.data、.sect.sect.sect.sect、.text.text.text.text、.u

192、sect.usect.usect.usect等。等。等。等。 对常数对常数对常数对常数( ( ( (数据和存储器数据和存储器数据和存储器数据和存储器) ) ) )进行初始化的命令进行初始化的命令进行初始化的命令进行初始化的命令 如如如如. . . .besbesbesbes、.byte.byte.byte.byte、.field.field.field.field、.float.float.float.float、.int.int.int.int、.log.log.log.log、.space.space.space.space、.string.string.string.string、.ps

193、tring.pstring.pstring.pstring、.xfloat.xfloat.xfloat.xfloat、.xlong.xlong.xlong.xlong、.word.word.word.word等。等。等。等。 2024/9/222024/9/227676第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 调整调整调整调整SPCSPCSPCSPC的指令的指令的指令的指令 如如如如. . . .alignalignalign

194、align等。等。等。等。 对输出列表文件格式化的命令对输出列表文件格式化的命令对输出列表文件格式化的命令对输出列表文件格式化的命令 如如如如. . . .drlistdrlistdrlistdrlist、.drnolist.drnolist.drnolist.drnolist等。等。等。等。 引用其他文件的命令引用其他文件的命令引用其他文件的命令引用其他文件的命令 如如如如copycopycopycopy、.def.def.def.def、.global.global.global.global、.include.include.include.include、.mlib.mlib.mlib

195、.mlib、.ref.ref.ref.ref等。等。等。等。 2024/9/222024/9/227777第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 控制条件汇编的命令控制条件汇编的命令控制条件汇编的命令控制条件汇编的命令 如如如如. . . .breakbreakbreakbreak、. . . .elseelseelseelse、. . . .elseifelseifelseifelseif、. . . .endifendi

196、fendifendif、. . . .endloopendloopendloopendloop、. . . .ifififif、. . . .looplooplooploop等。等。等。等。 在汇编时定义符号的命令在汇编时定义符号的命令在汇编时定义符号的命令在汇编时定义符号的命令 如如如如. . . .asgasgasgasg、. . . .endstructendstructendstructendstruct、. . . .equequequequ、. . . .evalevalevaleval、. . . .labellabellabellabel、. . . .setsetsetset

197、、. . . .sructsructsructsruct等。等。等。等。 执行其他功能的命令执行其他功能的命令执行其他功能的命令执行其他功能的命令 如如如如. . . .algebraicalgebraicalgebraicalgebraic、.emsg.emsg.emsg.emsg、.end.end.end.end、.mmregs.mmregs.mmregs.mmregs、.mmsg.mmsg.mmsg.mmsg、.newblock.newblock.newblock.newblock、. . . .sblocksblocksblocksblock、. . . .versionversion

198、versionversion、. . . .vmsgvmsgvmsgvmsg等。等。等。等。 2024/9/222024/9/227878第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 1 1 1 1定义段的伪指令定义段的伪指令定义段的伪指令定义段的伪指令 用于定义相应的汇编语言程序的段。用于定义相应的汇编语言程序的段。用于定义相应的汇编语言程序的段。用于定义相应的汇编语言程序的段。 助记符及语法格式助记符及语法格式助记符及语法格式

199、助记符及语法格式 说说说说 明明明明 . .bss symbol, size in words ,blocking , alignmentbss symbol, size in words ,blocking , alignment 为未初始化的数据段为未初始化的数据段为未初始化的数据段为未初始化的数据段. .bssbss保留存储空间。保留存储空间。保留存储空间。保留存储空间。 . .datadata 指定指定指定指定. .datadata后面的代码为数据段,通常包含后面的代码为数据段,通常包含后面的代码为数据段,通常包含后面的代码为数据段,通常包含初始化的数据。初始化的数据。初始化的数据。初

200、始化的数据。 . .sect sect “section namesection name” 定义初始化的命名段定义初始化的命名段定义初始化的命名段定义初始化的命名段,可以包含可执行代可以包含可执行代可以包含可执行代可以包含可执行代码或数据。码或数据。码或数据。码或数据。 . .texttext 指定指定指定指定. .texttext后面的代码为文本段后面的代码为文本段后面的代码为文本段后面的代码为文本段,通常包含通常包含通常包含通常包含可执行的代码。可执行的代码。可执行的代码。可执行的代码。 symbol .usect symbol .usect “section namesection n

201、ame”, size in words , size in words ,blocking ,alignment flag,blocking ,alignment flag 为未初始化的命名段保留空间。类似为未初始化的命名段保留空间。类似为未初始化的命名段保留空间。类似为未初始化的命名段保留空间。类似. .bssbss伪指令,但允许保留与伪指令,但允许保留与伪指令,但允许保留与伪指令,但允许保留与. .bssbss段不同的空间。段不同的空间。段不同的空间。段不同的空间。 2024/9/222024/9/227979第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序

202、开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】 段伪指令的使用。段伪指令的使用。段伪指令的使用。段伪指令的使用。 1 1 * 2 2 * * 开始汇编到开始汇编到开始汇编到开始汇编到. .texttexttexttext段段段段 * * 3 3 * 4 4 000000000000 .text.text 5 5 000000000000 00010001 .word 1,2.word 1,2 000001000001 00020002 6 6 000002000002 00030003 .word 3,4.word 3,4 00000

203、3000003 0004 0004 7 7 1 1 1 1定义段的伪指令定义段的伪指令定义段的伪指令定义段的伪指令 ; ;定义文本段定义文本段定义文本段定义文本段 ; ;初始化值为初始化值为初始化值为初始化值为1 1,2 2 ; ;初始化值为初始化值为初始化值为初始化值为3 3,4 42024/9/222024/9/228080第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】 段伪指令的使用。段伪指令的使用。段伪指令的使用。段伪指令的使用。 8 8 * 9

204、9 * * 开始汇编到开始汇编到开始汇编到开始汇编到. . . .datadatadatadata段段段段 * * 1010 * 1111 000000000000 .data.data 1212 000000000000 00090009 .word 9,10.word 9,10 000001000001 000A000A 1313 000002000002 000B000B .word 11,12.word 11,12 000003000003 000C 000C 14 14 1 1 1 1定义段的伪指令定义段的伪指令定义段的伪指令定义段的伪指令 ; ;定义数据段定义数据段定义数据段定义数

205、据段 ; ;初始化值为初始化值为初始化值为初始化值为9 9,1010 ; ;初始化值为初始化值为初始化值为初始化值为1111,12122024/9/222024/9/228181第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】 段伪指令的使用。段伪指令的使用。段伪指令的使用。段伪指令的使用。 1515 * 1616 * * 开始汇编到命名的初始化段开始汇编到命名的初始化段开始汇编到命名的初始化段开始汇编到命名的初始化段 * * 1717 * * var_de

206、fsvar_defs * * 1818 * 1919 000000000000 .sect .sect “var_defsvar_defs” 2020 000000000000 00110011 .word 17,18.word 17,18 000001000001 00120012 2121 1 1 1 1定义段的伪指令定义段的伪指令定义段的伪指令定义段的伪指令 ; ;定义命名段定义命名段定义命名段定义命名段 ; ;初始化值为初始化值为初始化值为初始化值为1717,18182024/9/222024/9/228282第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言

207、程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】 段伪指令的使用。段伪指令的使用。段伪指令的使用。段伪指令的使用。 2222 * 2323 * * 再继续汇编到再继续汇编到再继续汇编到再继续汇编到. .datadatadatadata段段段段 * * 2 2 2 24 4 * 2525 000004000004 .data.data 2626 000004000004 000D000D .word 13,14.word 13,14 000005000005 000E000E 2727 000000000000 .bss sym,19

208、.bss sym,192828 000006000006 000F000F .word 15,16.word 15,16 000007000007 0010001029 29 1 1 1 1定义段的伪指令定义段的伪指令定义段的伪指令定义段的伪指令 ; ;继续汇编数据段继续汇编数据段继续汇编数据段继续汇编数据段 ; ;初始化值为初始化值为初始化值为初始化值为1313,1414 ; ;定义未初始化段定义未初始化段定义未初始化段定义未初始化段, ,保留保留保留保留1919个个个个空空空空间间 ; ;仍然在仍然在仍然在仍然在. .datadata段中段中段中段中 ; ;初始化值为初始化值为初始化值为初

209、始化值为1515,16162024/9/222024/9/228383第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】 段伪指令的使用。段伪指令的使用。段伪指令的使用。段伪指令的使用。 3030 * 3131 * * 再继续汇编到再继续汇编到再继续汇编到再继续汇编到. .texttext段段段段 * * 32323232 * 3333 000004 000004 .text.text 3434 000004 000004 00050005 .word 5,6

210、.word 5,6 000005 000005 00060006 3535 000000 000000 usymusym .usect.usect “ “xy”,20xy”,203636 000006 000006 00070007 . .word 7,8word 7,8 000007 000007 0008 0008 1 1 1 1定义段的伪指令定义段的伪指令定义段的伪指令定义段的伪指令 ; ;继续汇编文本段继续汇编文本段继续汇编文本段继续汇编文本段 ; ;初始化值为初始化值为初始化值为初始化值为5 5,6 6 ; ;定义定义定义定义xyxy段,保留段,保留段,保留段,保留2020个个个个空

211、空空空间间 ; ;仍然在仍然在仍然在仍然在. .texttext段中段中段中段中 ; ;初始化值为初始化值为初始化值为初始化值为7 7,8 82024/9/222024/9/228484第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】 段伪指令的使用。段伪指令的使用。段伪指令的使用。段伪指令的使用。 . . . .texttext初始化值为初始化值为初始化值为初始化值为1 1 1 1,2 2 2 2,3 3 3 3,4 4 4 4,5 5 5 5,6 6 6

212、 6,7 7 7 7,8 8 8 8的字;的字;的字;的字; . . . .datadata初始化值为初始化值为初始化值为初始化值为9 9 9 9,10101010,11111111,12121212,13131313,14141414,15151515,16161616的字;的字;的字;的字; var_defsvar_defs初始化值为初始化值为初始化值为初始化值为17171717,18181818的字;的字;的字;的字; . . . .bssbss保留保留保留保留19191919个字的空间;个字的空间;个字的空间;个字的空间; . . . .usectusect保留保留保留保留202020

213、20个字的空间。个字的空间。个字的空间。个字的空间。1 1 1 1定义段的伪指令定义段的伪指令定义段的伪指令定义段的伪指令 . . . .bssbss和和和和. . . .usectusect伪伪伪伪指指指指令令令令既既既既不不不不结结结结束束束束当当当当前前前前的的的的段段段段也也也也不不不不开开开开始始始始新新新新段段段段,它它它它们们们们保保保保留留留留指指指指定定定定数数数数量量量量的的的的空空空空间间间间,然然然然后后后后汇汇汇汇编编编编器器器器开开开开始始始始将将将将代代代代码码码码或或或或数数数数据据据据汇汇汇汇编进当前的段。编进当前的段。编进当前的段。编进当前的段。 2024/

214、9/222024/9/228585第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 2 2 2 2初始化常数的伪指令初始化常数的伪指令初始化常数的伪指令初始化常数的伪指令 用于为当前的段汇编常数值。用于为当前的段汇编常数值。用于为当前的段汇编常数值。用于为当前的段汇编常数值。 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 . .byte value ,byte value , value, va

215、lue 初始化当前段里的一个或多个连续字。每个值的宽度被限制为初始化当前段里的一个或多个连续字。每个值的宽度被限制为初始化当前段里的一个或多个连续字。每个值的宽度被限制为初始化当前段里的一个或多个连续字。每个值的宽度被限制为8 8位。位。位。位。 即把即把即把即把8 8位的值放入当前段的连续字。位的值放入当前段的连续字。位的值放入当前段的连续字。位的值放入当前段的连续字。 . .char value ,char value , value, value 初始化当前段里的一个或多个连续字。每个值的宽度被限制为初始化当前段里的一个或多个连续字。每个值的宽度被限制为初始化当前段里的一个或多个连续字。

216、每个值的宽度被限制为初始化当前段里的一个或多个连续字。每个值的宽度被限制为8 8位。位。位。位。 即把即把即把即把8 8位的值放入当前段的连续字。位的值放入当前段的连续字。位的值放入当前段的连续字。位的值放入当前段的连续字。 . .field field value ,size in bitsvalue ,size in bits 初始化一个可变长度的域。将单个值放入当前字的指定位域中。初始化一个可变长度的域。将单个值放入当前字的指定位域中。初始化一个可变长度的域。将单个值放入当前字的指定位域中。初始化一个可变长度的域。将单个值放入当前字的指定位域中。 . .float value ,floa

217、t value , value, value 初始化一个或多个初始化一个或多个初始化一个或多个初始化一个或多个IEEEIEEE的单精度的单精度的单精度的单精度(32(32位位位位) ) 浮点数,即计算浮点数的浮点数,即计算浮点数的浮点数,即计算浮点数的浮点数,即计算浮点数的 单精度单精度单精度单精度(32(32位位位位) )IEEEIEEE浮浮浮浮 . .xfloat value ,xfloat value , , valuevalue 初始化一个或多个初始化一个或多个初始化一个或多个初始化一个或多个IEEEIEEE的单精度的单精度的单精度的单精度(32(32位位位位) ) 浮点数,即计算浮点

218、数的浮点数,即计算浮点数的浮点数,即计算浮点数的浮点数,即计算浮点数的 单精度单精度单精度单精度(32(32位位位位) )IEEEIEEE浮点表示,并将它保存在当前段的两个连续的浮点表示,并将它保存在当前段的两个连续的浮点表示,并将它保存在当前段的两个连续的浮点表示,并将它保存在当前段的两个连续的 字中。不自动对准最接近的长字边界。字中。不自动对准最接近的长字边界。字中。不自动对准最接近的长字边界。字中。不自动对准最接近的长字边界。 2024/9/222024/9/228686第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程

219、序开发工具汇编语言程序开发工具汇编语言程序开发工具2 2 2 2初始化常数的伪指令初始化常数的伪指令初始化常数的伪指令初始化常数的伪指令 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 . .int value ,int value ,value,value 初始化一个或多个初始化一个或多个初始化一个或多个初始化一个或多个1616位整数。位整数。位整数。位整数。 即把即把即把即把1616位的值放到当前段的位的值放到当前段的位的值放到当前段的位的值放到当前段的 连续的字中。连续的字中。连续的字中。连续的字中。 . .short value ,short va

220、lue ,value ,value 初始化一个或多个初始化一个或多个初始化一个或多个初始化一个或多个1616位整数。位整数。位整数。位整数。 即把即把即把即把1616位的值放到当前段的连续的字中。位的值放到当前段的连续的字中。位的值放到当前段的连续的字中。位的值放到当前段的连续的字中。 . .word value ,word value ,value,value 初始化一个或多个初始化一个或多个初始化一个或多个初始化一个或多个1616位整数。位整数。位整数。位整数。 即把即把即把即把1616位的值放到当前段的连续的字中。位的值放到当前段的连续的字中。位的值放到当前段的连续的字中。位的值放到当前

221、段的连续的字中。 . .double value ,double value ,value,value 初始化一个或多个双精度初始化一个或多个双精度初始化一个或多个双精度初始化一个或多个双精度(64(64位位位位) ) 浮点数。浮点数。浮点数。浮点数。 即计算浮点数的单精度即计算浮点数的单精度即计算浮点数的单精度即计算浮点数的单精度(32(32位位位位) ) 浮点表示,浮点表示,浮点表示,浮点表示, 并将它存储在当前段的并将它存储在当前段的并将它存储在当前段的并将它存储在当前段的2 2个连续的字中。个连续的字中。个连续的字中。个连续的字中。 该伪指令自动对准长字边界。该伪指令自动对准长字边界。

222、该伪指令自动对准长字边界。该伪指令自动对准长字边界。 . .long value ,long value ,value ,value 初始化一个或多个初始化一个或多个初始化一个或多个初始化一个或多个3232位整数。位整数。位整数。位整数。 即把即把即把即把3232位的值放到当前段的位的值放到当前段的位的值放到当前段的位的值放到当前段的2 2个连续的字中。个连续的字中。个连续的字中。个连续的字中。 . .string “string ,“string”string “string ,“string” 初始化一个或多个字符串。初始化一个或多个字符串。初始化一个或多个字符串。初始化一个或多个字符串。

223、 把把把把8 8位字符从一个或多个字符串放进当前段。位字符从一个或多个字符串放进当前段。位字符从一个或多个字符串放进当前段。位字符从一个或多个字符串放进当前段。 2024/9/222024/9/228787第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例例例例】比比比比较较较较. .bytebyte,. .intint,. .longlong,. .xlongxlong,. .floatfloat,. .xfloatxfloat,. .wordword和和和和. .str

224、ingstring伪指令。伪指令。伪指令。伪指令。 源程序:源程序:源程序:源程序: .byte.byte.byte.byte 0AAh0AAh0AAh0AAh,0BBh0BBh0BBh0BBh .word.word.word.word 0CCCh0CCCh0CCCh0CCCh .xlong.xlong.xlong.xlong 0EEEEFFFh0EEEEFFFh0EEEEFFFh0EEEEFFFh .long.long.long.long 0EEEEFFFFh0EEEEFFFFh0EEEEFFFFh0EEEEFFFFh .int.int.int.int 0DDDDh0DDDDh0DDDDh0

225、DDDDh .xfloat.xfloat.xfloat.xfloat .float.float.float.float .string.string.string.string “help”“help”“help”“help” .byte:.byte:将将将将一一一一个个个个或或或或多多多多个个个个8 8位位位位值值值值放放放放入入入入当当当当前前前前段的连续字中。段的连续字中。段的连续字中。段的连续字中。wordword 15 15 0 0 15 0 15 00,10,1 0 0 0 0 A AA A 0 0 0 0 B BB B .word:.word:将将将将一一一一个个个个或或或或多多

226、多多个个个个1616位位位位值值值值放放放放入入入入当当当当前段的连续字中。前段的连续字中。前段的连续字中。前段的连续字中。2 2 0 0 C C CC C C .xlong:.xlong:将将将将3232位位位位值值值值放放放放入入入入当当当当前前前前段段段段的的的的2 2个个个个连续的字中,先存最高有效位。连续的字中,先存最高有效位。连续的字中,先存最高有效位。连续的字中,先存最高有效位。3,43,4 0 0 E E EE E E E F F FE F F F .long:.long:将将将将3232位位位位值值值值放放放放入入入入当当当当前前前前段段段段的的的的2 2个个个个连连连连续的

227、字中,先存最高有效位。续的字中,先存最高有效位。续的字中,先存最高有效位。续的字中,先存最高有效位。6,76,7 E E E EE E E E F F F FF F F F .int:.int:将将将将一一一一个个个个或或或或多多多多个个个个1616位位位位值值值值放放放放入入入入当当当当前前前前段的连续的字中。段的连续的字中。段的连续的字中。段的连续的字中。8 8 D D D DD D D D .xfloat:.xfloat:初初初初始始始始化化化化单单单单精精精精度度度度(32(32位位位位) ) 浮浮浮浮点点点点数数数数,并保存在当前段的两个连续的字中。并保存在当前段的两个连续的字中。并

228、保存在当前段的两个连续的字中。并保存在当前段的两个连续的字中。9,9,A A 3 3 F F FF F F F F A CF F A C .float:.float:初初初初始始始始化化化化单单单单精精精精度度度度(32(32位位位位) ) 浮浮浮浮点点点点数数数数,并保存在当前段的两个连续的字中。并保存在当前段的两个连续的字中。并保存在当前段的两个连续的字中。并保存在当前段的两个连续的字中。C,DC,D 3 3 F F FF F F F F A CF F A C .string:.string:将将将将一一一一个个个个或或或或多多多多个个个个字字字字符符符符串串串串中中中中的的的的8 8位位

229、位位字符放入字符放入字符放入字符放入当前段中。当前段中。当前段中。当前段中。h he eE,FE,F 0 0 0 0 6 8 6 8 0 0 0 6 5 0 6 5l lp p10,1110,11 0 0 0 0 6 C 6 C 0 0 0 7 0 0 7 02024/9/222024/9/228888第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具列表文件:列表文件:列表文件:列表文件:1 1 1 1 000000000000000000000000 00aa00aa00a

230、a00aa .byte 0AAh.byte 0AAh.byte 0AAh.byte 0AAh,0BBh0BBh0BBh0BBh 000001000001000001000001 00bb00bb00bb00bb2 2 2 2 000002000002000002000002 0ccc0ccc0ccc0ccc .word 0CCCh.word 0CCCh.word 0CCCh.word 0CCCh3 3 3 3 000003000003000003000003 0eee0eee0eee0eee .xlong 0EEEEFFFh.xlong 0EEEEFFFh.xlong 0EEEEFFFh.xl

231、ong 0EEEEFFFh 000004000004000004000004 efffefffefffefff4 4 4 4 000006000006000006000006 eeeeeeeeeeeeeeee .long 0EEEEFFFFh.long 0EEEEFFFFh.long 0EEEEFFFFh.long 0EEEEFFFFh 000007000007000007000007 ffffffffffffffff5 5 5 5 000008000008000008000008 dddddddddddddddd .int 0DDDDh.int 0DDDDh.int 0DDDDh.int 0

232、DDDDh6 6 6 6 000009000009000009000009 3fff3fff3fff3fff .xfloat.xfloat.xfloat.xfloat 00000a00000a00000a00000a ffacffacffacffac7 7 7 7 00000c00000c00000c00000c 3fff3fff3fff3fff .float.float.float.float 00000d00000d00000d00000d ffacffacffacffac8 8 8 8 00000e00000e00000e00000e 0068006800680068 .string .

233、string .string .string “ “helphelphelphelp” ” 00000f00000f00000f00000f 0065006500650065 000010000010000010000010 006c006c006c006c 000011000011000011000011 0070007000700070 .long:.long:自动对准最近长字边界自动对准最近长字边界自动对准最近长字边界自动对准最近长字边界 .xlong:.xlong:不自动对准长字边界不自动对准长字边界不自动对准长字边界不自动对准长字边界.float:.float:自动对准最近长字边界自

234、动对准最近长字边界自动对准最近长字边界自动对准最近长字边界 .xfloat:.xfloat:不自动对准长字边界不自动对准长字边界不自动对准长字边界不自动对准长字边界2024/9/222024/9/228989第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2 2 2 2初始化常数的伪指令初始化常数的伪指令初始化常数的伪指令初始化常数的伪指令. . . .fieldfield伪指令:伪指令:伪指令:伪指令: 功能:功能:功能:功能:将单个数值放进当前字的指定位域中。将单个数值放

235、进当前字的指定位域中。将单个数值放进当前字的指定位域中。将单个数值放进当前字的指定位域中。 采采采采用用用用. . . .fieldfieldfieldfield伪伪伪伪指指指指令令令令,可可可可以以以以将将将将多多多多个个个个字字字字段段段段或或或或域域域域打打打打包包包包成成成成单个字,直到字被填满为止,汇编器不增加单个字,直到字被填满为止,汇编器不增加单个字,直到字被填满为止,汇编器不增加单个字,直到字被填满为止,汇编器不增加SPCSPCSPCSPC。 指令格式:指令格式:指令格式:指令格式: . . fieldfield valuevalue , , , ,size in bitssi

236、ze in bits 单个数值单个数值单个数值单个数值当前字的指定位域当前字的指定位域当前字的指定位域当前字的指定位域2024/9/222024/9/229090第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2 2 2 2初始化常数的伪指令初始化常数的伪指令初始化常数的伪指令初始化常数的伪指令 . . . .fieldfield伪指令的使用。伪指令的使用。伪指令的使用。伪指令的使用。 源程序:源程序:源程序:源程序: .field 5,3.field 5,3.field 5

237、,3.field 5,3 . . . .field 9,6field 9,6field 9,6field 9,6 .field 16,5 .field 16,5 .field 16,5 .field 16,5 . . . .field 01234h,20field 01234h,20field 01234h,20field 01234h,20 . . . .field 01234h,32field 01234h,32field 01234h,32field 01234h,32 .field 5,3.field 5,3.field 5,3.field 5,3 .field 9,6.field 9

238、,6.field 9,6.field 9,6 .field 16,5.field 16,5.field 16,5.field 16,5 .field 01234h,20.field 01234h,20.field 01234h,20.field 01234h,20 1515 1414 1313 1212 1111 1010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 01 0 11 0 10 0 1 0 0 10 0 1 0 0 11 0 0 0 01 0 0 0 0 1515 1414 1313 1212 1111 1010 9 9 8 8 7 7 6 6 5

239、 5 4 4 3 3 2 2 1 1 0 00 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 1515 1414 1313 1212 1111 1010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 00123h0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 10 0 0 0 0 0 0 1 0 0 1 0 0 0 1 14h0 1 0 00 1 0 0 .field 01234h,32.field 01234h,32.field 01234h,32.field 01234h,320 0 0 0 0 0 0 1 0 0 1

240、 0 0 0 1 1 0 1 0 0 1515 1414 1313 1212 1111 1010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0 1515 1414 1313 1212 1111 1010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 00 0 0 1 0 0 1 0 0 0 1 1 0 1 0 00 0 0 1 0 0 1 0 0 0 1 1 0 1 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0A000hA000hA000hA00

241、0hA480hA480hA480hA480hA4C0hA4C0hA4C0hA4C0h0123h0123h0123h0123h4000h4000h4000h4000h0000h0000h0000h0000h1234h1234h1234h1234h2024/9/222024/9/229191第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】 . . . .fieldfield伪指令的使用。伪指令的使用。伪指令的使用。伪指令的使用。 汇编后的列表文件:汇编后的列表文

242、件:汇编后的列表文件:汇编后的列表文件: 4 4 4 4 000000000000000000000000 A000A000A000A000 .field 5,3.field 5,3.field 5,3.field 5,3 5 5 5 5 000000000000000000000000 A480A480A480A480 .field 9,6.field 9,6.field 9,6.field 9,6 6 6 6 6 000000000000000000000000 A4C0A4C0A4C0A4C0 .field 16,5.field 16,5.field 16,5.field 16,5 7

243、7 7 7 000001000001000001000001 0123012301230123 . . . .field 01234h,20field 01234h,20field 01234h,20field 01234h,20 000002000002000002000002 4000400040004000 8 8 8 8 000003000003000003000003 0000000000000000 . . . .field 01234h,32field 01234h,32field 01234h,32field 01234h,32 000004000004000004000004

244、 1234123412341234组成一个字组成一个字组成一个字组成一个字, , , ,不改变不改变不改变不改变SPCSPCSPCSPC。2024/9/222024/9/229292第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 3 3 3 3对准段程序计数器的伪指令对准段程序计数器的伪指令对准段程序计数器的伪指令对准段程序计数器的伪指令 对对对对准准准准段段段段程程程程序序序序计计计计数数数数器器器器的的的的伪伪伪伪指指指指令令令

245、令包包包包括括括括:. .alignalignalignalign伪伪伪伪指指指指令令令令和和和和. .eveneveneveneven伪指令。伪指令。伪指令。伪指令。 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 . .align size in wordsalign size in words 用于将段程序计数器用于将段程序计数器用于将段程序计数器用于将段程序计数器( (SPC)SPC)对准在对准在对准在对准在1 1128128字的边界。字的边界。字的边界。字的边界。 . .eveneven 用于使用于使用于使用于使SPCSPC指到下一个字的边界指到

246、下一个字的边界指到下一个字的边界指到下一个字的边界( ( ( (偶字边界偶字边界偶字边界偶字边界) ) ) )。 2024/9/222024/9/229393第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具3 3 3 3对准段程序计数器的伪指令对准段程序计数器的伪指令对准段程序计数器的伪指令对准段程序计数器的伪指令 ( ( ( (1 1) ) ) ) . .alignalignalignalign伪指令的操作数必须是在伪指令的操作数必须是在伪指令的操作数必须是在伪指令的操作数

247、必须是在2 20 0 2 21616之间且等之间且等之间且等之间且等 于于于于2 2的幂。的幂。的幂。的幂。 例如:例如:例如:例如:操作数为操作数为操作数为操作数为1 1时,对准时,对准时,对准时,对准SPCSPCSPCSPC到字的边界;到字的边界;到字的边界;到字的边界; 操作数为操作数为操作数为操作数为2 2时,对准时,对准时,对准时,对准SPCSPCSPCSPC到长字到长字到长字到长字/ / / /偶字的边界;偶字的边界;偶字的边界;偶字的边界; 操作数为操作数为操作数为操作数为128128时,对准时,对准时,对准时,对准SPCSPCSPCSPC到页面的边界;到页面的边界;到页面的边界

248、;到页面的边界; 没有操作数时,没有操作数时,没有操作数时,没有操作数时,. .alignalign伪指令默认为页面边界。伪指令默认为页面边界。伪指令默认为页面边界。伪指令默认为页面边界。( ( ( (2 2) ) ) ) . .eveneveneveneven伪指令等效于指定伪指令等效于指定伪指令等效于指定伪指令等效于指定. .alignalignalignalign伪指令的操作数伪指令的操作数伪指令的操作数伪指令的操作数 为为为为1 1的情形。的情形。的情形。的情形。 当当当当. .eveneveneveneven操操操操作作作作数数数数为为为为2 2时时时时,将将将将SPCSPCSPCS

249、PC对对对对准准准准到到到到下下下下一一一一个个个个长长长长字字字字的边界。任何在当前字中没有使用的位都填充的边界。任何在当前字中没有使用的位都填充的边界。任何在当前字中没有使用的位都填充的边界。任何在当前字中没有使用的位都填充0 0。 2024/9/222024/9/229494第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具3 3 3 3对准段程序计数器的伪指令对准段程序计数器的伪指令对准段程序计数器的伪指令对准段程序计数器的伪指令 【例】【例】【例】【例】 . .ali

250、gnalignalignalign伪指令的使用。伪指令的使用。伪指令的使用。伪指令的使用。 源程序:源程序:源程序:源程序: . . . .fieldfieldfieldfield 2,32,32,32,3 .field.field.field.field 11,811,811,811,8 .align.align.align.align 2 2 2 2 .string.string.string.string “ “Errorcnt”Errorcnt”Errorcnt”Errorcnt” .align.align.align.align .byte.byte.byte.byte 4 4 4

251、4 ; ; 将数值将数值将数值将数值2 2放入字指定域中放入字指定域中放入字指定域中放入字指定域中 ; ; 打包组成单字打包组成单字打包组成单字打包组成单字6400640064006400h h h h ; ; 对准长字边界对准长字边界对准长字边界对准长字边界, , , ,SPC=02hSPC=02hSPC=02hSPC=02h ; ; 初始化字符串初始化字符串初始化字符串初始化字符串 ; ; 对准页边界对准页边界对准页边界对准页边界, ,SPC=80hSPC=80hSPC=80hSPC=80h ; ; 在当前段中在当前段中在当前段中在当前段中, ,放入放入放入放入8 8 8 8位数位数位数位

252、数04h04h04h04h2024/9/222024/9/229595第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具列表文件:列表文件:列表文件:列表文件: 1 1 1 1 000000000000000000000000 4000400040004000 .field 2,3.field 2,3.field 2,3.field 2,3 2 2 2 2 000000000000000000000000 4160416041604160 .field 11,8.field 1

253、1,8.field 11,8.field 11,8 3 3 3 3 .align 2.align 2.align 2.align 2 4 4 4 4 000002000002000002000002 0045004500450045 .string .string .string .string “ “ErrorcntErrorcntErrorcntErrorcnt” ” 000003000003000003000003 0072007200720072 000004000004000004000004 0072007200720072 000005000005000005000005 006

254、f006f006f006f 000006000006000006000006 0072007200720072 000007000007000007000007 0063006300630063 000008000008000008000008 006e006e006e006e 000009000009000009000009 0074007400740074 5 5 5 5 .align.align.align.align 6 6 6 6 000080000080000080000080 0004000400040004 .byte 4.byte 4.byte 4.byte 4 000000

255、000000000000000000SPC4000400040004000000000000000000000000000SPC4160416041604160000002000002000002000002SPC4160416041604160000002000002000002000002SPC0045004500450045000003000003000003000003SPC0072007200720072000004000004000004000004SPC0072007200720072000005000005000005000005SPC006F006F006F006F00000

256、6000006000006000006SPC0072007200720072000007000007000007000007SPC0063006300630063000008000008000008000008SPC006E006E006E006E000009000009000009000009SPC0074007400740074000080000080000080000080SPC0074007400740074000080000080000080000080SPC0040040040042024/9/222024/9/229696第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程

257、序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 4 4 4 4格式化输出清单文件的伪指令格式化输出清单文件的伪指令格式化输出清单文件的伪指令格式化输出清单文件的伪指令 用于格式化输出清单文件。用于格式化输出清单文件。用于格式化输出清单文件。用于格式化输出清单文件。 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 . .drnolist drnolist 用于抑制某些伪指令在清单文件中的出现。用于抑制某些伪指令在清单文件中的出现。用于抑制某些伪指令在清单

258、文件中的出现。用于抑制某些伪指令在清单文件中的出现。 . .drlist drlist 允许允许允许允许. .drnolistdrnolist抑制的伪指令在清单文件中重新出现。抑制的伪指令在清单文件中重新出现。抑制的伪指令在清单文件中重新出现。抑制的伪指令在清单文件中重新出现。 . .fclist fclist 允许按源代码在清单文件中列出条件为假的代码块。允许按源代码在清单文件中列出条件为假的代码块。允许按源代码在清单文件中列出条件为假的代码块。允许按源代码在清单文件中列出条件为假的代码块。 汇编器默认状态。汇编器默认状态。汇编器默认状态。汇编器默认状态。 . .fcnolist fcnol

259、ist 只列出实际汇编的条件为真的代码块。只列出实际汇编的条件为真的代码块。只列出实际汇编的条件为真的代码块。只列出实际汇编的条件为真的代码块。 . .length page length length page length 调节清单文件输出页面的长度。可针对不同的输出调节清单文件输出页面的长度。可针对不同的输出调节清单文件输出页面的长度。可针对不同的输出调节清单文件输出页面的长度。可针对不同的输出 设备灵活调节输出页面的长度。设备灵活调节输出页面的长度。设备灵活调节输出页面的长度。设备灵活调节输出页面的长度。 . .list list 允许汇编器将所选择的源语句输出到清单文件。允许汇编器将

260、所选择的源语句输出到清单文件。允许汇编器将所选择的源语句输出到清单文件。允许汇编器将所选择的源语句输出到清单文件。 2024/9/222024/9/229797第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4 4 4 4格式化输出清单文件的伪指令格式化输出清单文件的伪指令格式化输出清单文件的伪指令格式化输出清单文件的伪指令 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 . .nolist nolist 禁止汇编器将所选择的源语句输出到

261、清单文件。禁止汇编器将所选择的源语句输出到清单文件。禁止汇编器将所选择的源语句输出到清单文件。禁止汇编器将所选择的源语句输出到清单文件。 . .mlist mlist 允许列出所有的宏扩展和循环块。允许列出所有的宏扩展和循环块。允许列出所有的宏扩展和循环块。允许列出所有的宏扩展和循环块。 . .mnolist mnolist 禁止列出所有的宏扩展和循环块。禁止列出所有的宏扩展和循环块。禁止列出所有的宏扩展和循环块。禁止列出所有的宏扩展和循环块。 . .optionoption BLMRTWXBLMRTWXBLMRTWXBLMRTWX 用于控制清单文件的某些功能。用于控制清单文件的某些功能。用于

262、控制清单文件的某些功能。用于控制清单文件的某些功能。 . .page page 把新页列在输出清单文件中。把新页列在输出清单文件中。把新页列在输出清单文件中。把新页列在输出清单文件中。 . .sslist sslist 允许列出替代符号扩展。允许列出替代符号扩展。允许列出替代符号扩展。允许列出替代符号扩展。 . .ssnolist ssnolist 禁止列出替代符号扩展。禁止列出替代符号扩展。禁止列出替代符号扩展。禁止列出替代符号扩展。 .title .title “ “stringstring” ” 在每页的顶部打印文件标题。在每页的顶部打印文件标题。在每页的顶部打印文件标题。在每页的顶部打

263、印文件标题。 . .width page width width page width 调节清单文件页面的宽度。调节清单文件页面的宽度。调节清单文件页面的宽度。调节清单文件页面的宽度。 2024/9/222024/9/229898第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 5 5 5 5引用其他文件的伪指令引用其他文件的伪指令引用其他文件的伪指令引用其他文件的伪指令 该指令主要为引用其他文件提供信息。该指令主要为引用其他文件提供

264、信息。该指令主要为引用其他文件提供信息。该指令主要为引用其他文件提供信息。 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 . .copy copy ”filenamefilename” 通知汇编器开始从其他文件读取源程序语句。通知汇编器开始从其他文件读取源程序语句。通知汇编器开始从其他文件读取源程序语句。通知汇编器开始从其他文件读取源程序语句。 . .include include ”filenamefilename” 通知汇编器开始从其他文件读取源程序语句。通知汇编器开始从其他文件读取源程序语句。通知汇编器开始从其他文件读取源程序语句。通知汇编器开始从

265、其他文件读取源程序语句。 . .def symbil def symbil ,symbilsymbil 识别识别定定定定义义在当前模在当前模在当前模在当前模块块中中中中,但可被其他模但可被其他模但可被其他模但可被其他模块块使使使使 用的符号。用的符号。用的符号。用的符号。 . .global symbilglobal symbil ,symbilsymbil 声明当前符号声明当前符号声明当前符号声明当前符号为为全局符号。全局符号。全局符号。全局符号。 对对定定定定义义了的符号,其作用相当于了的符号,其作用相当于了的符号,其作用相当于了的符号,其作用相当于. . . .defdef; 对对没有定

266、没有定没有定没有定义义的符号,其作用相当于的符号,其作用相当于的符号,其作用相当于的符号,其作用相当于. . . .refref。 . .ref symbilref symbil,symbilsymbil 识别识别在当前模在当前模在当前模在当前模块块中使用的中使用的中使用的中使用的,但在其他模但在其他模但在其他模但在其他模块块中中中中 定定定定义义的符号。的符号。的符号。的符号。2024/9/222024/9/229999第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编

267、伪指令汇编伪指令汇编伪指令汇编伪指令 6 6 6 6条件汇编伪指令条件汇编伪指令条件汇编伪指令条件汇编伪指令 用用用用来来来来通通通通知知知知汇汇汇汇编编编编器器器器按按按按照照照照表表表表达达达达式式式式计计计计算算算算出出出出的的的的结结结结果果果果的的的的真真真真假,决定是否对某段代码进行汇编。假,决定是否对某段代码进行汇编。假,决定是否对某段代码进行汇编。假,决定是否对某段代码进行汇编。 有两组伪指令用于条件代码块的汇编:有两组伪指令用于条件代码块的汇编:有两组伪指令用于条件代码块的汇编:有两组伪指令用于条件代码块的汇编: ( ( ( (1 1) ) ) ) . .if/if/if/i

268、f/. .elseif/elseif/elseif/elseif/. .else/else/else/else/. .endifendifendifendif伪指令伪指令伪指令伪指令 用用用用于于于于通通通通知知知知汇汇汇汇编编编编器器器器按按按按照照照照表表表表达达达达式式式式的的的的计计计计算算算算结结结结果果果果, , , ,对对对对某某某某段段段段代代代代码码码码块块块块进进进进行条件汇编。要求表达式和伪指令必须完全在同一行指定。行条件汇编。要求表达式和伪指令必须完全在同一行指定。行条件汇编。要求表达式和伪指令必须完全在同一行指定。行条件汇编。要求表达式和伪指令必须完全在同一行指定。

269、( ( ( (2 2) ) ) ) . .loop/loop/loop/loop/. .break/break/break/break/. .endloopendloopendloopendloop伪指令伪指令伪指令伪指令 用用用用于于于于通通通通知知知知汇汇汇汇编编编编器器器器按按按按照照照照表表表表达达达达式式式式的的的的计计计计算算算算结结结结果果果果重重重重复复复复汇汇汇汇编编编编一一一一个个个个代代代代码块。要求表达式和伪指令必须完全在同一行指定。码块。要求表达式和伪指令必须完全在同一行指定。码块。要求表达式和伪指令必须完全在同一行指定。码块。要求表达式和伪指令必须完全在同一行指定。

270、 2024/9/222024/9/22100100第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具6 6 6 6条件汇编伪指令条件汇编伪指令条件汇编伪指令条件汇编伪指令 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 . .if well-defined expression if well-defined expression 标记条件块的开始。仅当标记条件块的开始。仅当标记条件块的开始。仅当标记条件块的开始。仅当. .if if条件为

271、真时,条件为真时,条件为真时,条件为真时, 对紧接着的代码块进行汇编。对紧接着的代码块进行汇编。对紧接着的代码块进行汇编。对紧接着的代码块进行汇编。 . .elseif well-defined expression elseif well-defined expression 若若若若. .if if条件条件条件条件为为假,而假,而假,而假,而. .elseifelseif条件条件条件条件为为真真真真时时, 对紧对紧接着的代接着的代接着的代接着的代码块进码块进行行行行汇编汇编。 . .else well-defined expression else well-defined express

272、ion 若若若若. .if if条件条件条件条件为为假假假假, ,对紧对紧接着的代接着的代接着的代接着的代码块进码块进行行行行汇编汇编。 . .endifendif 标记条件代码块的结束,并终止该条件标记条件代码块的结束,并终止该条件标记条件代码块的结束,并终止该条件标记条件代码块的结束,并终止该条件 代码块。代码块。代码块。代码块。 . .looploop wellwell- - - -defined defined expressionexpression 按照表达式确定的次数按照表达式确定的次数按照表达式确定的次数按照表达式确定的次数进进行重复行重复行重复行重复汇编汇编的代的代的代的代

273、码块码块的开始。表达式是循的开始。表达式是循的开始。表达式是循的开始。表达式是循环环的次数。的次数。的次数。的次数。 . .break well-defined break well-defined expressionexpression 若若若若. .breakbreak表达式表达式表达式表达式为为假,通知假,通知假,通知假,通知汇编汇编器器器器继续继续重重重重 复复复复汇编汇编;而当表达式;而当表达式;而当表达式;而当表达式为为真真真真时时,跳到,跳到,跳到,跳到紧紧接着接着接着接着 . .endloopendloop后面的代后面的代后面的代后面的代码码。 . .endloopendlo

274、op 标记标记代代代代码块码块的的的的结结束。束。束。束。 2024/9/222024/9/22101101第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 7 7 7 7定义宏的伪指令定义宏的伪指令定义宏的伪指令定义宏的伪指令 常用的定义宏的伪指令常用的定义宏的伪指令常用的定义宏的伪指令常用的定义宏的伪指令: : : : 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 macnamemacnam

275、e . . . .macromacro parameterparameter,.,.,.,.parameterparameter model statements or macro directives model statements or macro directives . endm . endm 定义宏定义宏定义宏定义宏 . . . .endmendm 中止宏中止宏中止宏中止宏 . . . .var symvar sym ,symsym2 2,.,.,.,., sym sym 定定定定义义宏替代符号宏替代符号宏替代符号宏替代符号2024/9/222024/9/22102102第第第第第

276、第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 8 8 8 8汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令 用于使符号名与常数值或字符串等价。用于使符号名与常数值或字符串等价。用于使符号名与常数值或字符串等价。用于使符号名与常数值或字符串等价。 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 . . . .asgasg ” ” ” ”character stringcharac

277、ter string”,”,”,”, substitution symbol substitution symbol 把一个字符串赋给一个替代符号。把一个字符串赋给一个替代符号。把一个字符串赋给一个替代符号。把一个字符串赋给一个替代符号。 替代符号也可以重新被定义。替代符号也可以重新被定义。替代符号也可以重新被定义。替代符号也可以重新被定义。 . . . .eval welleval well- - - -defined expresiondefined expresion, , , , substitution symbol substitution symbol 计计算一个表达式,将其算一

278、个表达式,将其算一个表达式,将其算一个表达式,将其结结果果果果转换转换成字成字成字成字 符,并将字符串符,并将字符串符,并将字符串符,并将字符串赋给赋给替代符号。替代符号。替代符号。替代符号。 用于操作用于操作用于操作用于操作计计数器。数器。数器。数器。 . .label symbol label symbol 定定定定义义一个特殊的符号,一个特殊的符号,一个特殊的符号,一个特殊的符号, 用来指向在当前段内的装用来指向在当前段内的装用来指向在当前段内的装用来指向在当前段内的装载时间载时间地址。地址。地址。地址。 symbol .set value symbol .set value 用于用于用

279、于用于给给符号符号符号符号赋值赋值。符号被存。符号被存。符号被存。符号被存放放放放在符号在符号在符号在符号 表中,而且不能被重新定表中,而且不能被重新定表中,而且不能被重新定表中,而且不能被重新定义义。 2024/9/222024/9/22103103第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具8 8 8 8汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 .st

280、ruct.struct 设置类似设置类似设置类似设置类似C C语言的结构体。语言的结构体。语言的结构体。语言的结构体。 . .tagtag伪指令把结构体赋给一个标号。伪指令把结构体赋给一个标号。伪指令把结构体赋给一个标号。伪指令把结构体赋给一个标号。 .endstruct.endstruct 结结束束束束结结构体。构体。构体。构体。 . .union union 建立类似建立类似建立类似建立类似C C语言的语言的语言的语言的unionunion( ( ( (联合联合联合联合) ) ) )定义定义定义定义 . .endunion endunion 结束结束结束结束unionunion( ( (

281、(联合联合联合联合) ) ) ) .struct.struct/ / / /.endstruct.endstruct伪伪指令允指令允指令允指令允许许将信息将信息将信息将信息组织组织到到到到结结构构构构体中,以便将同体中,以便将同体中,以便将同体中,以便将同类类的元素分在一的元素分在一的元素分在一的元素分在一组组。然后由。然后由。然后由。然后由汇编汇编器器器器完成完成完成完成结结构体成构体成构体成构体成员员偏离地址的偏离地址的偏离地址的偏离地址的计计算。算。算。算。 . .structstruct/ / / /.endstruct.endstruct伪伪指令不分配存指令不分配存指令不分配存指令不

282、分配存储储器。只是器。只是器。只是器。只是简简单单地地地地产产生一个可重复使用的符号模板。生一个可重复使用的符号模板。生一个可重复使用的符号模板。生一个可重复使用的符号模板。 . .tagtag将将将将结结构体与一个构体与一个构体与一个构体与一个标标号号号号联联系起来,系起来,系起来,系起来,. .tagtag伪伪指指指指令不分配存令不分配存令不分配存令不分配存储储器,且器,且器,且器,且结结构体的构体的构体的构体的标记标记符必符必符必符必须须在使用之在使用之在使用之在使用之前先定前先定前先定前先定义义好。好。好。好。 2024/9/222024/9/22104104第第第第第第4 4 4 4

283、 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具8 8 8 8汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令 . .unionunion/ / / /.endunion.endunion伪伪指令通指令通指令通指令通过创过创建符号模板,提供在相建符号模板,提供在相建符号模板,提供在相建符号模板,提供在相同的存同的存同的存同的存储储区域内管理多种不同的数据区域内管理多种不同的数据区域内管理多种不同的数据区域内管理多种不同的数据类类型的方法。型的方法。型的方法。型的方法。 . .u

284、nionunion不分配任何存不分配任何存不分配任何存不分配任何存储储器,它允器,它允器,它允器,它允许类许类型和大小不同的定型和大小不同的定型和大小不同的定型和大小不同的定义义临时临时地存地存地存地存储储在相同存在相同存在相同存在相同存储储器空器空器空器空间间。 . .tagtag伪指令将伪指令将伪指令将伪指令将unionunion属性与一个标号联系起来,可以定义属性与一个标号联系起来,可以定义属性与一个标号联系起来,可以定义属性与一个标号联系起来,可以定义一个一个一个一个unionunion并并并并给给定一个定一个定一个定一个标记标记符,以后可用符,以后可用符,以后可用符,以后可用. .t

285、agtag伪伪指令将它声明指令将它声明指令将它声明指令将它声明为结为结构体的一个成构体的一个成构体的一个成构体的一个成员员。 当当当当unionunion没有没有没有没有标记标记符符符符时时,它的所有成,它的所有成,它的所有成,它的所有成员员都将都将都将都将进进入符号表,入符号表,入符号表,入符号表,每一个成每一个成每一个成每一个成员员有唯一的名称。有唯一的名称。有唯一的名称。有唯一的名称。 当当当当unionunion定定定定义义在在在在结结构体内构体内构体内构体内时时,对这样对这样的的的的unionunion的引用必的引用必的引用必的引用必须须通通通通过过包括它的包括它的包括它的包括它的结

286、结构体来构体来构体来构体来实现实现。 2024/9/222024/9/22105105第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具8 8 8 8汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令 【例】【例】【例】【例】.struct.struct/ /.endstruct.endstruct伪伪指令指令指令指令举举例。例。例。例。 1 1 1 1 REAL_REC .structREAL_REC .structREAL_REC .structREA

287、L_REC .struct ;结构体标记结构体标记结构体标记结构体标记2 2 2 2 0000000000000000 NOM .intNOM .intNOM .intNOM .int ;member1member1member1member1 = = 0 0 0 03 3 3 3 0001000100010001 DEN .intDEN .intDEN .intDEN .int ;member2member2member2member2 = = 1 1 1 14 4 4 4 0002000200020002 RRAL_LEN .endstructRRAL_LEN .endstructRRAL

288、_LEN .endstructRRAL_LEN .endstruct ;real_lenreal_lenreal_lenreal_len = = 2 2 2 25 5 5 56 6 6 6 000000 000000 000000 000000 0001-0001-0001-0001- ADD REAL+REAL_REC.DEN, AADD REAL+REAL_REC.DEN, AADD REAL+REAL_REC.DEN, AADD REAL+REAL_REC.DEN, A7 7 7 7 ;访问结构体成员访问结构体成员访问结构体成员访问结构体成员8 8 8 89 9 9 9 000000 0

289、00000 000000 000000 .bss REAL, REAL_LEN.bss REAL, REAL_LEN.bss REAL, REAL_LEN.bss REAL, REAL_LEN2024/9/222024/9/22106106第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具8 8 8 8汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令汇编时间符号伪指令 【例】【例】【例】【例】.union.union/ /.endunion.endunion伪伪指令指令指

290、令指令举举例。例。例。例。 1 1 1 1 .global employid.global employid.global employid.global employid 2 2 2 2 xample .unionxample .unionxample .unionxample .union ;unionunionunionunion标记标记标记标记 3 3 3 3 0000000000000000 ival .wordival .wordival .wordival .word ;menber1menber1menber1menber1 = = intintintint 4 4 4 4 0

291、000000000000000 fval .floatfval .floatfval .floatfval .float ;menber2menber2menber2menber2 = = floatfloatfloatfloat 5 5 5 5 0000000000000000 sval .stringsval .stringsval .stringsval .string ;menber3menber3menber3menber3 = = stringstringstringstring 6 6 6 6 0002000200020002 real_len .endunionreal_len

292、 .endunionreal_len .endunionreal_len .endunion ;real_lenreal_lenreal_lenreal_len = = 2 2 2 2 7 7 7 7 8 8 8 8 000000 000000 000000 000000 .bss employid,real_len.bss employid,real_len.bss employid,real_len.bss employid,real_len ;指定空间指定空间指定空间指定空间 9 9 9 910101010 employid .tag xampleemployid .tag xample

293、employid .tag xampleemployid .tag xample ;声明结构的实例声明结构的实例声明结构的实例声明结构的实例11111111 000000 000000 000000 000000 0000-0000-0000-0000- ADD employid.fval,AADD employid.fval,AADD employid.fval,AADD employid.fval,A ;访问访问访问访问unionunionunionunion成员成员成员成员 2024/9/222024/9/22107107第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工

294、具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 汇编伪指令汇编伪指令汇编伪指令汇编伪指令 9 9 9 9混合伪指令混合伪指令混合伪指令混合伪指令 常用的混合伪指令:常用的混合伪指令:常用的混合伪指令:常用的混合伪指令: 助记符及语法格式助记符及语法格式助记符及语法格式助记符及语法格式 说说说说 明明明明 .end.end 终止汇编,位于程序源程序的最后一行。终止汇编,位于程序源程序的最后一行。终止汇编,位于程序源程序的最后一行。终止汇编,位于程序源程序的最后一行。 .far_mode.far_mode 通知通知通知通知汇编汇编器器器器调调

295、用用用用为远调为远调用。用。用。用。 . .mmregs mmregs 为为存存存存储储器映像寄存器定器映像寄存器定器映像寄存器定器映像寄存器定义义符号名。使用符号名。使用符号名。使用符号名。使用. .mmregsmmregs的功的功的功的功 能和能和能和能和对对所有的存所有的存所有的存所有的存储储器映像寄存器器映像寄存器器映像寄存器器映像寄存器执执行行行行. .setset伪伪指令相同。指令相同。指令相同。指令相同。 . .newblock newblock 用于复位局部用于复位局部用于复位局部用于复位局部标标号。号。号。号。 . .version value version value 确

296、定运行指令的确定运行指令的确定运行指令的确定运行指令的处处理器,每个理器,每个理器,每个理器,每个 C54xC54x器件都有一个与器件都有一个与器件都有一个与器件都有一个与 之之之之对应对应的的的的值值。 . .emsg string emsg string 把把把把错误错误消息送到消息送到消息送到消息送到标标准的准的准的准的输输出出出出设备设备。 . .mmsg string mmsg string 把把把把汇编时间汇编时间消息送到消息送到消息送到消息送到标标准的准的准的准的输输出出出出设备设备。 . .wmsg string wmsg string 把警告消息送到把警告消息送到把警告消息送

297、到把警告消息送到标标准的准的准的准的输输出出出出设备设备。 2024/9/222024/9/22108108第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具9 9 9 9混合伪指令混合伪指令混合伪指令混合伪指令 . .newblocknewblocknewblocknewblock伪指令用于复位局部标号。伪指令用于复位局部标号。伪指令用于复位局部标号。伪指令用于复位局部标号。 局局局局部部部部标标标标号号号号是是是是形形形形式式式式为为为为$ $n n n n或或或或name

298、?name?name?name?的的的的符符符符号号号号。当当当当它它它它们们们们出出出出现现现现在在在在标标标标号号号号域域域域时时时时被被被被定定定定义义义义。局局局局部部部部标标标标号号号号可可可可用用用用作作作作跳跳跳跳转转转转指指指指令令令令的的的的操作数的临时标号。操作数的临时标号。操作数的临时标号。操作数的临时标号。 . .newblocknewblocknewblocknewblock伪伪伪伪指指指指令令令令通通通通过过过过在在在在它它它它们们们们被被被被使使使使用用用用后后后后将将将将它它它它们们们们复复复复位的方式来限制局部标号的使用范围。位的方式来限制局部标号的使用范围。

299、位的方式来限制局部标号的使用范围。位的方式来限制局部标号的使用范围。 2024/9/222024/9/22109109第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具9 9 9 9混合伪指令混合伪指令混合伪指令混合伪指令 有有有有3 3个个个个伪伪伪伪指指指指令令令令可可可可以以以以允允允允许许许许用用用用户户户户定定定定义义义义自自自自己己己己的的的的错错错错误误误误和和和和警警警警告消息:告消息:告消息:告消息: (1)(1)(1)(1) . .emsgemsgemsge

300、msg伪伪伪伪指指指指令令令令以以以以和和和和汇汇汇汇编编编编器器器器同同同同样样样样的的的的方方方方式式式式产产产产生生生生错错错错误,增加错误的计数并防止汇编器产生目标文件。误,增加错误的计数并防止汇编器产生目标文件。误,增加错误的计数并防止汇编器产生目标文件。误,增加错误的计数并防止汇编器产生目标文件。 (2)(2)(2)(2) . .mmsgmmsgmmsgmmsg伪伪伪伪指指指指令令令令的的的的功功功功能能能能与与与与. .emsgemsgemsgemsg和和和和. .wmsgwmsgwmsgwmsg伪伪伪伪指指指指令令令令相相相相似似似似,但但但但它它它它不不不不增增增增加加加加错

301、错错错误误误误计计计计数数数数或或或或警警警警告告告告计计计计数数数数。也也也也不不不不影影影影响响响响目标文件的产生。目标文件的产生。目标文件的产生。目标文件的产生。 (3)(3)(3)(3) . . . .wmsgwmsgwmsgwmsg伪伪伪伪指指指指令令令令的的的的功功功功能能能能与与与与. . . .emsgemsgemsgemsg伪伪伪伪指指指指令令令令相相相相似似似似,但但但但它它它它增增增增加加加加警警警警告告告告计计计计数数数数,而而而而不不不不增增增增加加加加错错错错误误误误计计计计数数数数。它它它它也也也也不不不不影影影影响响响响目标文件的产生。目标文件的产生。目标文件的

302、产生。目标文件的产生。 2024/9/222024/9/22110110第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 宏定义和宏调用宏定义和宏调用宏定义和宏调用宏定义和宏调用 C54xC54xC54xC54x汇编器支持宏指令语言。如果程序中有一汇编器支持宏指令语言。如果程序中有一汇编器支持宏指令语言。如果程序中有一汇编器支持宏指令语言。如果程序中有一段程序需要执行多次,就可以把这一段程序定义段程序需要执行多次,就可以把这一段程序定义段程序需要执行多次,就可以把这一段程序定

303、义段程序需要执行多次,就可以把这一段程序定义( ( ( (宏宏宏宏定义定义定义定义) ) ) )为一条宏指令,然后在需要重复执行这段程序为一条宏指令,然后在需要重复执行这段程序为一条宏指令,然后在需要重复执行这段程序为一条宏指令,然后在需要重复执行这段程序的地方调用这条宏指令的地方调用这条宏指令的地方调用这条宏指令的地方调用这条宏指令( ( ( (宏调用宏调用宏调用宏调用) ) ) )。利用宏指令,可以。利用宏指令,可以。利用宏指令,可以。利用宏指令,可以使源程序变得简短。使源程序变得简短。使源程序变得简短。使源程序变得简短。 宏的使用分以下宏的使用分以下宏的使用分以下宏的使用分以下3 3 3

304、 3个步骤:个步骤:个步骤:个步骤: 定义宏定义宏定义宏定义宏 在调用宏时,必须首先定义宏;在调用宏时,必须首先定义宏;在调用宏时,必须首先定义宏;在调用宏时,必须首先定义宏; 调用宏调用宏调用宏调用宏 在定义宏之后在定义宏之后在定义宏之后在定义宏之后, , , ,可在源程序中调用宏;可在源程序中调用宏;可在源程序中调用宏;可在源程序中调用宏; 扩展宏扩展宏扩展宏扩展宏 在源程序调用宏指令时,汇编器将对在源程序调用宏指令时,汇编器将对在源程序调用宏指令时,汇编器将对在源程序调用宏指令时,汇编器将对 宏指令进行扩展。宏指令进行扩展。宏指令进行扩展。宏指令进行扩展。 2024/9/222024/9

305、/22111111第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 宏定义和宏调用宏定义和宏调用宏定义和宏调用宏定义和宏调用 1.1.1.1. 宏定义宏定义宏定义宏定义 在调用宏时,必须首先定义宏。有两种方法定在调用宏时,必须首先定义宏。有两种方法定在调用宏时,必须首先定义宏。有两种方法定在调用宏时,必须首先定义宏。有两种方法定义宏:义宏:义宏:义宏: 可在源文件的开始定义宏,或者在可在源文件的开始定义宏,或者在可在源文件的开始定义宏,或者在可在源文件的开始定义宏,或者在.

306、. . .includeincludeincludeinclude 或或或或. . . .copycopycopycopy的文件中定义;的文件中定义;的文件中定义;的文件中定义; 在宏库中定义。在宏库中定义。在宏库中定义。在宏库中定义。宏库宏库宏库宏库是由存档器以存档格式产生的文件集。是由存档器以存档格式产生的文件集。是由存档器以存档格式产生的文件集。是由存档器以存档格式产生的文件集。 宏库中的每一成员包含一个与成员对应的宏定宏库中的每一成员包含一个与成员对应的宏定宏库中的每一成员包含一个与成员对应的宏定宏库中的每一成员包含一个与成员对应的宏定义。可通过义。可通过义。可通过义。可通过. . .

307、 .mlibmlibmlibmlib指令访问宏库。指令访问宏库。指令访问宏库。指令访问宏库。 2024/9/222024/9/22112112第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 宏定义宏定义宏定义宏定义 在调用宏之前,必须先定义宏。可以在源程序在调用宏之前,必须先定义宏。可以在源程序在调用宏之前,必须先定义宏。可以在源程序在调用宏之前,必须先定义宏。可以在源程序的任何位置定义宏,宏定义的所有内容必须包含在的任何位置定义宏,宏定义的所有内容必须包含

308、在的任何位置定义宏,宏定义的所有内容必须包含在的任何位置定义宏,宏定义的所有内容必须包含在同一个文件中。同一个文件中。同一个文件中。同一个文件中。 宏定义可以嵌套,即在一条宏指令中调用其他宏定义可以嵌套,即在一条宏指令中调用其他宏定义可以嵌套,即在一条宏指令中调用其他宏定义可以嵌套,即在一条宏指令中调用其他的宏指令。的宏指令。的宏指令。的宏指令。 2024/9/222024/9/22113113第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具宏定义的格式:宏定义的格式:宏定义

309、的格式:宏定义的格式: macname macname macname macname .macro.macro parameterparameterparameterparameter 1111,parameter nparameter nparameter nparameter n 宏程序语句宏程序语句宏程序语句宏程序语句或或或或宏伪指令宏伪指令宏伪指令宏伪指令 .mexit.mexit . .endmendm macname: macname: 宏程序名称,必须将名称放在源程序标号域。宏程序名称,必须将名称放在源程序标号域。宏程序名称,必须将名称放在源程序标号域。宏程序名称,必须将名称放

310、在源程序标号域。.macro: .macro: 用来说明该语句为宏定义的第一行伪指令,用来说明该语句为宏定义的第一行伪指令,用来说明该语句为宏定义的第一行伪指令,用来说明该语句为宏定义的第一行伪指令, 必须放在助记符操作码区域必须放在助记符操作码区域必须放在助记符操作码区域必须放在助记符操作码区域。parameters:parameters: 为为为为任选的替代参数,作为宏指令的操作数。任选的替代参数,作为宏指令的操作数。任选的替代参数,作为宏指令的操作数。任选的替代参数,作为宏指令的操作数。宏程序语句宏程序语句宏程序语句宏程序语句: : 每次宏调用时要执行的指令或汇编命令。每次宏调用时要执行

311、的指令或汇编命令。每次宏调用时要执行的指令或汇编命令。每次宏调用时要执行的指令或汇编命令。宏伪指令宏伪指令宏伪指令宏伪指令: : 用于控制宏指令展开的命令。用于控制宏指令展开的命令。用于控制宏指令展开的命令。用于控制宏指令展开的命令。. .mexit: mexit: 相当于一条相当于一条相当于一条相当于一条跳到跳到跳到跳到. .endmendm语句。语句。语句。语句。. .endm: endm: 结束宏定义。结束宏定义。结束宏定义。结束宏定义。 2024/9/222024/9/22114114第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开

312、发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具宏定义的格式:宏定义的格式:宏定义的格式:宏定义的格式: macname macname macname macname .macro.macro parameterparameterparameterparameter 1111,parameter nparameter nparameter nparameter n 宏程序语句宏程序语句宏程序语句宏程序语句或或或或宏伪指令宏伪指令宏伪指令宏伪指令 .mexit.mexit . .endmendm 如果希望在宏定义中包含有注释,但又不希望这些注释如果希望在宏定义中包含有注释,但

313、又不希望这些注释如果希望在宏定义中包含有注释,但又不希望这些注释如果希望在宏定义中包含有注释,但又不希望这些注释出现在扩展宏中,可在注释前面加上感叹号出现在扩展宏中,可在注释前面加上感叹号出现在扩展宏中,可在注释前面加上感叹号出现在扩展宏中,可在注释前面加上感叹号“!”。 如果希望这些注释出现在扩展宏中,需在注释前面加上如果希望这些注释出现在扩展宏中,需在注释前面加上如果希望这些注释出现在扩展宏中,需在注释前面加上如果希望这些注释出现在扩展宏中,需在注释前面加上符号符号符号符号“* * * *”或或或或“;”。2024/9/222024/9/22115115第第第第第第4 4 4 4 4 4章

314、章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 宏定义和宏调用宏定义和宏调用宏定义和宏调用宏定义和宏调用 2.2.2.2. 宏调用宏调用宏调用宏调用 在定义宏之后,可在源程序中使用宏名进行宏在定义宏之后,可在源程序中使用宏名进行宏在定义宏之后,可在源程序中使用宏名进行宏在定义宏之后,可在源程序中使用宏名进行宏调用。调用。调用。调用。宏调用的格式:宏调用的格式:宏调用的格式:宏调用的格式: label:label: macname macname parameter 1parameter 1,parameter

315、 nparameter n 标号标号任选项任选项宏指令名宏指令名位于操作码区位于操作码区任选的替代参数任选的替代参数任选的替代参数任选的替代参数数目应与宏指令定义的相等数目应与宏指令定义的相等数目应与宏指令定义的相等数目应与宏指令定义的相等2024/9/222024/9/22116116第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 宏定义和宏调用宏定义和宏调用宏定义和宏调用宏定义和宏调用 3.3.3.3. 宏扩展宏扩展宏扩展宏扩展 若源程序中调用宏指令,则汇编时就将对宏指

316、若源程序中调用宏指令,则汇编时就将对宏指若源程序中调用宏指令,则汇编时就将对宏指若源程序中调用宏指令,则汇编时就将对宏指令进行扩展。令进行扩展。令进行扩展。令进行扩展。 扩展时汇编器先将变量传递给宏参数,按宏定扩展时汇编器先将变量传递给宏参数,按宏定扩展时汇编器先将变量传递给宏参数,按宏定扩展时汇编器先将变量传递给宏参数,按宏定义取代调用宏语句,然后再对源代码进行汇编。义取代调用宏语句,然后再对源代码进行汇编。义取代调用宏语句,然后再对源代码进行汇编。义取代调用宏语句,然后再对源代码进行汇编。 在默认的情况下,扩展宏将出现在清单文件中在默认的情况下,扩展宏将出现在清单文件中在默认的情况下,扩展

317、宏将出现在清单文件中在默认的情况下,扩展宏将出现在清单文件中, ,若不需要扩展宏出现在清单文件中,则可通过伪指若不需要扩展宏出现在清单文件中,则可通过伪指若不需要扩展宏出现在清单文件中,则可通过伪指若不需要扩展宏出现在清单文件中,则可通过伪指令令令令. . . .mnolistmnolist来实现。来实现。来实现。来实现。2024/9/222024/9/22117117第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 宏定义和宏调用宏定义和宏调用宏定义和宏调用宏定义和宏调用

318、3.3.3.3. 宏扩展宏扩展宏扩展宏扩展 当汇编器遇到宏定义时,将宏名称放进操作码当汇编器遇到宏定义时,将宏名称放进操作码当汇编器遇到宏定义时,将宏名称放进操作码当汇编器遇到宏定义时,将宏名称放进操作码表中,并将重新定义前面已经定义过的与之具有相表中,并将重新定义前面已经定义过的与之具有相表中,并将重新定义前面已经定义过的与之具有相表中,并将重新定义前面已经定义过的与之具有相同名称的宏、库成员、伪指令或指令助记符。同名称的宏、库成员、伪指令或指令助记符。同名称的宏、库成员、伪指令或指令助记符。同名称的宏、库成员、伪指令或指令助记符。 用这种方法可以扩展指令和伪指令的功能以及用这种方法可以扩展

319、指令和伪指令的功能以及用这种方法可以扩展指令和伪指令的功能以及用这种方法可以扩展指令和伪指令的功能以及加入新的指令。加入新的指令。加入新的指令。加入新的指令。 2024/9/222024/9/22118118第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 宏定义和宏调用宏定义和宏调用宏定义和宏调用宏定义和宏调用 宏指令与子程序一样,都是重复执行某一段程宏指令与子程序一样,都是重复执行某一段程宏指令与子程序一样,都是重复执行某一段程宏指令与子程序一样,都是重复执行某一段程序,

320、但两者是有区别的,主要区别:序,但两者是有区别的,主要区别:序,但两者是有区别的,主要区别:序,但两者是有区别的,主要区别: 宏指令和子程序都可以被多次调用,但是把宏指令和子程序都可以被多次调用,但是把宏指令和子程序都可以被多次调用,但是把宏指令和子程序都可以被多次调用,但是把子程序汇编成目标代码的过程只进行一次,而在用子程序汇编成目标代码的过程只进行一次,而在用子程序汇编成目标代码的过程只进行一次,而在用子程序汇编成目标代码的过程只进行一次,而在用到宏指令的每个地方都要对宏指令中的语句逐条地到宏指令的每个地方都要对宏指令中的语句逐条地到宏指令的每个地方都要对宏指令中的语句逐条地到宏指令的每个

321、地方都要对宏指令中的语句逐条地进行汇编。进行汇编。进行汇编。进行汇编。 在调用前,由于子程序不使用参数,故子程在调用前,由于子程序不使用参数,故子程在调用前,由于子程序不使用参数,故子程在调用前,由于子程序不使用参数,故子程序所需要的寄存器等都必须事先设置好;而对于宏序所需要的寄存器等都必须事先设置好;而对于宏序所需要的寄存器等都必须事先设置好;而对于宏序所需要的寄存器等都必须事先设置好;而对于宏指令来说,由于可以使用参数,调用时只要直接代指令来说,由于可以使用参数,调用时只要直接代指令来说,由于可以使用参数,调用时只要直接代指令来说,由于可以使用参数,调用时只要直接代入参数就行了。入参数就行

322、了。入参数就行了。入参数就行了。 2024/9/222024/9/22119119第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例例例例4.4.74.4.74.4.74.4.7】宏定义、宏调用和宏展开举例宏定义、宏调用和宏展开举例宏定义、宏调用和宏展开举例宏定义、宏调用和宏展开举例 1 * 1 * 1 * 1 * 2 * 2 * 2 * 2 * add3add3add3add3 4 * 4 * 4 * 4 * 5 * ADDRP=P1+P2+P3 5 * ADDRP=P1

323、+P2+P3 5 * ADDRP=P1+P2+P3 5 * ADDRP=P1+P2+P3 6 6 6 6 7 add3 .macro P1 7 add3 .macro P1 7 add3 .macro P1 7 add3 .macro P1,P2P2P2P2,P3P3P3P3,ADDRPADDRPADDRPADDRP 8 8 8 8 9 LD P1 9 LD P1 9 LD P1 9 LD P1,A A A A 10 ADD P2 10 ADD P2 10 ADD P2 10 ADD P2,A A A A 11 ADD P3 11 ADD P3 11 ADD P3 11 ADD P3,A A

324、A A 12 STL A 12 STL A 12 STL A 12 STL A,ADDRPADDRPADDRPADDRP 13 .endm 13 .endm 13 .endm 13 .endm 14 14 14 14 第第第第7 7 7 7 14141414行行行行 定义宏:定义宏:定义宏:定义宏:add3add3add3add3 4 4 4 4个参数:个参数:个参数:个参数:P1P1P1P1 P2 P2 P2 P2 P3 P3 P3 P3 ADDRP ADDRP ADDRP ADDRP2024/9/222024/9/22120120第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序

325、开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例例例例4.4.74.4.74.4.74.4.7】宏定义、宏调用和宏展开举例宏定义、宏调用和宏展开举例宏定义、宏调用和宏展开举例宏定义、宏调用和宏展开举例 15 15 15 15 16 .global abc,def,ghi,adr 16 .global abc,def,ghi,adr 16 .global abc,def,ghi,adr 16 .global abc,def,ghi,adr 17 17 17 17 18 000000 add3 abc,def,ghi,adr 18 0

326、00000 add3 abc,def,ghi,adr 18 000000 add3 abc,def,ghi,adr 18 000000 add3 abc,def,ghi,adr 1 1 1 1 1 000000 1000! LD abc1 000000 1000! LD abc1 000000 1000! LD abc1 000000 1000! LD abc,A A A A1 000001 0000! ADD def1 000001 0000! ADD def1 000001 0000! ADD def1 000001 0000! ADD def,A A A A1 000002 0000!

327、ADD ghi1 000002 0000! ADD ghi1 000002 0000! ADD ghi1 000002 0000! ADD ghi,A A A A1 000003 8000! STL A1 000003 8000! STL A1 000003 8000! STL A1 000003 8000! STL A,adradradradr 第第第第18181818行行行行 调用宏:调用宏:调用宏:调用宏:add3add3add3add3 所用变量:所用变量:所用变量:所用变量:abcabcabcabc def def def def ghi ghi ghi ghi adr adr ad

328、r adr 共共共共4 4 4 4行行行行 扩展宏扩展宏扩展宏扩展宏 将变量传递给参数将变量传递给参数将变量传递给参数将变量传递给参数 abc abc abc abc P1P1P1P1 def def def def P2P2P2P2 ghi ghi ghi ghi P3P3P3P3 adr adr adr adr ADDRPADDRPADDRPADDRP2024/9/222024/9/22121121第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器的使用接器的使用

329、链接器的主要任务是根据链接命令文件链接器的主要任务是根据链接命令文件链接器的主要任务是根据链接命令文件链接器的主要任务是根据链接命令文件(.(.(.(.cmdcmdcmdcmd) ) ) ),将一个或多个将一个或多个将一个或多个将一个或多个COFFCOFFCOFFCOFF目标文件链接起来,生成存储器映目标文件链接起来,生成存储器映目标文件链接起来,生成存储器映目标文件链接起来,生成存储器映像文件像文件像文件像文件(.(.(.(.map)map)map)map)和可执行的输出文件和可执行的输出文件和可执行的输出文件和可执行的输出文件(.(.(.(.out)out)out)out)。 在链接过程中

330、,链接器将各个目标文件合并,并在链接过程中,链接器将各个目标文件合并,并在链接过程中,链接器将各个目标文件合并,并在链接过程中,链接器将各个目标文件合并,并完成以下工作:完成以下工作:完成以下工作:完成以下工作: 将各个段配置到目标系统的存储器。将各个段配置到目标系统的存储器。将各个段配置到目标系统的存储器。将各个段配置到目标系统的存储器。 对各个符号和段进行重新定位,并给它们指对各个符号和段进行重新定位,并给它们指对各个符号和段进行重新定位,并给它们指对各个符号和段进行重新定位,并给它们指 定一个最终的地址。定一个最终的地址。定一个最终的地址。定一个最终的地址。 解决输入文件之间未定义的外部

331、引用。解决输入文件之间未定义的外部引用。解决输入文件之间未定义的外部引用。解决输入文件之间未定义的外部引用。 2024/9/222024/9/22122122第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器的运行链接器的运行链接器的运行链接器的运行 1.1.1.1. 运行链接程序运行链接程序运行链接程序运行链接程序 C54xC54xC54xC54x链接器的运行命令链接器的运行命令链接器的运行命令链接器的运行命令: lnk500lnk500 -options-optio

332、ns filename 1 filename n filename 1 filename n lnk500:lnk500: 运行链接器命令。运行链接器命令。运行链接器命令。运行链接器命令。-options:-options: 链接命令选项。可以出现在命令行或链接命令文链接命令选项。可以出现在命令行或链接命令文链接命令选项。可以出现在命令行或链接命令文链接命令选项。可以出现在命令行或链接命令文 件的任何位置。件的任何位置。件的任何位置。件的任何位置。filenames:filenames: 文件名。可以是目标文件、链接命令文件或文文件名。可以是目标文件、链接命令文件或文文件名。可以是目标文件、链

333、接命令文件或文文件名。可以是目标文件、链接命令文件或文 件库。所有文件扩展名的默认值为件库。所有文件扩展名的默认值为件库。所有文件扩展名的默认值为件库。所有文件扩展名的默认值为. .objobj。2024/9/222024/9/22123123第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 运行链接程序运行链接程序运行链接程序运行链接程序 C54xC54xC54xC54x链接器的运行,有三种方法链接器的运行,有三种方法链接器的运行,有三种方法链接器的运行,有

334、三种方法: (1) (1) (1) (1) 键入命令:键入命令:键入命令:键入命令: lnk500lnk500 链接器会提示如下信息:链接器会提示如下信息:链接器会提示如下信息:链接器会提示如下信息: Command filesCommand files:Object files Object files . .objobj: Output Files aOutput Files a. .outout: OptionsOptions: ( ( ( (要求键入一个或多个命令文件要求键入一个或多个命令文件要求键入一个或多个命令文件要求键入一个或多个命令文件) ) ) ) ( ( ( (要求要求要求

335、要求键键入一个或多个需要入一个或多个需要入一个或多个需要入一个或多个需要链链接的目接的目接的目接的目标标文件文件文件文件) ) ) ) ( ( ( (要求键入一个链接器所生成的输出文件名要求键入一个链接器所生成的输出文件名要求键入一个链接器所生成的输出文件名要求键入一个链接器所生成的输出文件名) ) ) )( ( ( (要求附加一个链接选项要求附加一个链接选项要求附加一个链接选项要求附加一个链接选项 ) ) ) )2024/9/222024/9/22124124第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语

336、言程序开发工具汇编语言程序开发工具1.1.1.1. 运行链接程序运行链接程序运行链接程序运行链接程序 (2)(2)(2)(2) 键入命令:键入命令:键入命令:键入命令: lnk500lnk500 file1.obj file1.obj file2.objfile2.obj -o -o 在命令行中指定选项和文件名。在命令行中指定选项和文件名。在命令行中指定选项和文件名。在命令行中指定选项和文件名。 目标文件:目标文件:目标文件:目标文件: file1.objfile1.obj、file2.objfile2.obj 命令选项:命令选项:命令选项:命令选项: - -o o 输出文件:输出文件:输出文

337、件:输出文件: 将两个目标文件进行链接,生成一个可执行的输将两个目标文件进行链接,生成一个可执行的输将两个目标文件进行链接,生成一个可执行的输将两个目标文件进行链接,生成一个可执行的输出文件。出文件。出文件。出文件。2024/9/222024/9/22125125第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. 运行链接程序运行链接程序运行链接程序运行链接程序 (3)(3)(3)(3) 键入命令:键入命令:键入命令:键入命令: lnk500lnk500 lin

338、ker.cmdlinker.cmd linker.cmd: linker.cmd: 链接命令文件。链接命令文件。链接命令文件。链接命令文件。 在执行上述命令之前,需将链接的目标文件、链在执行上述命令之前,需将链接的目标文件、链在执行上述命令之前,需将链接的目标文件、链在执行上述命令之前,需将链接的目标文件、链接命令选项以及存储器配置要求等编写到接命令选项以及存储器配置要求等编写到接命令选项以及存储器配置要求等编写到接命令选项以及存储器配置要求等编写到链接命令文链接命令文链接命令文链接命令文件件件件linkerlinker. . . .cmdcmd中。中。中。中。 例如:希望完成第二种命令的链接

339、,在链接命令例如:希望完成第二种命令的链接,在链接命令例如:希望完成第二种命令的链接,在链接命令例如:希望完成第二种命令的链接,在链接命令文件文件文件文件中,中,中,中,应包含如下内容:应包含如下内容:应包含如下内容:应包含如下内容: file1.objfile1.objfile1.objfile1.obj file2.obj file2.obj file2.obj file2.obj 2024/9/222024/9/22126126第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开

340、发工具 链接器的运行链接器的运行链接器的运行链接器的运行 2.2.2.2. 链接命令选项链接命令选项链接命令选项链接命令选项 在链接时,连接器通过链接命令选项控制链接在链接时,连接器通过链接命令选项控制链接在链接时,连接器通过链接命令选项控制链接在链接时,连接器通过链接命令选项控制链接操作。操作。操作。操作。 链接命令选项可以放在命令行或命令文件中,链接命令选项可以放在命令行或命令文件中,链接命令选项可以放在命令行或命令文件中,链接命令选项可以放在命令行或命令文件中,所有选项前面必须加一短划线所有选项前面必须加一短划线所有选项前面必须加一短划线所有选项前面必须加一短划线“- - - -”。除。

341、除。除。除- - - -l l l l和和和和- - - -i i i i选选选选项外,其他选项的先后顺序并不重要。项外,其他选项的先后顺序并不重要。项外,其他选项的先后顺序并不重要。项外,其他选项的先后顺序并不重要。 选项之间可以用空格分开。最常用选项为选项之间可以用空格分开。最常用选项为选项之间可以用空格分开。最常用选项为选项之间可以用空格分开。最常用选项为- - - -mm和和和和- - - -o o,分别表示输出的地址分配表映像文件名和输分别表示输出的地址分配表映像文件名和输分别表示输出的地址分配表映像文件名和输分别表示输出的地址分配表映像文件名和输出可执行文件名。出可执行文件名。出可

342、执行文件名。出可执行文件名。 2024/9/222024/9/22127127第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. 链接命令选项链接命令选项链接命令选项链接命令选项 链接命令选项链接命令选项链接命令选项链接命令选项选选选选 项项项项含含含含 义义义义 - - - -a a 生成一个绝对地址的、可执行的输出模块。所建立的绝生成一个绝对地址的、可执行的输出模块。所建立的绝生成一个绝对地址的、可执行的输出模块。所建立的绝生成一个绝对地址的、可执行的输出模

343、块。所建立的绝 对地址输出文件中不包含重新定位信息。如果既不用对地址输出文件中不包含重新定位信息。如果既不用对地址输出文件中不包含重新定位信息。如果既不用对地址输出文件中不包含重新定位信息。如果既不用- - - -a a 选项,也不用选项,也不用选项,也不用选项,也不用- - - -r r选项,链接器就像规定选项,链接器就像规定选项,链接器就像规定选项,链接器就像规定- - - -a a选项那样处理。选项那样处理。选项那样处理。选项那样处理。 - - - -arar 生成一个可重新定位、可执行的目标模块。这里采用了生成一个可重新定位、可执行的目标模块。这里采用了生成一个可重新定位、可执行的目标

344、模块。这里采用了生成一个可重新定位、可执行的目标模块。这里采用了 - - - -a a和和和和- - - -r r两个选项两个选项两个选项两个选项( ( ( (可以分开写成可以分开写成可以分开写成可以分开写成- - - -a a - - - -r r,也可以连在一起也可以连在一起也可以连在一起也可以连在一起 写作写作写作写作- - - -arar) ) ) ),与与与与- - - -a a选项相比,选项相比,选项相比,选项相比,- - - -arar选项还在输出文件中保留选项还在输出文件中保留选项还在输出文件中保留选项还在输出文件中保留 有重新定位信息。有重新定位信息。有重新定位信息。有重新定

345、位信息。 - - - -e global_symbole global_symbol 定义一个全局符号,这个符号所对应的程序存储器地址,定义一个全局符号,这个符号所对应的程序存储器地址,定义一个全局符号,这个符号所对应的程序存储器地址,定义一个全局符号,这个符号所对应的程序存储器地址, 就是使用开发工具调试这个链接后的可执行文件时程序就是使用开发工具调试这个链接后的可执行文件时程序就是使用开发工具调试这个链接后的可执行文件时程序就是使用开发工具调试这个链接后的可执行文件时程序 开始执行时的地址开始执行时的地址开始执行时的地址开始执行时的地址( ( ( (称为入口地址称为入口地址称为入口地址称为

346、入口地址) ) ) )。当加载器将一个程。当加载器将一个程。当加载器将一个程。当加载器将一个程 序加载到目标存储器时,程序计数器序加载到目标存储器时,程序计数器序加载到目标存储器时,程序计数器序加载到目标存储器时,程序计数器( ( ( (PCPC) ) ) )被初始化到入被初始化到入被初始化到入被初始化到入 口地址,然后从这个地址开始执行程序。口地址,然后从这个地址开始执行程序。口地址,然后从这个地址开始执行程序。口地址,然后从这个地址开始执行程序。 2024/9/222024/9/22128128第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言

347、程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. 链接命令选项链接命令选项链接命令选项链接命令选项 链接命令选项链接命令选项链接命令选项链接命令选项选选选选 项项项项含含含含 义义义义 - - - -f fill_valef fill_vale 对输出模块各段之间的空单元设置一个对输出模块各段之间的空单元设置一个对输出模块各段之间的空单元设置一个对输出模块各段之间的空单元设置一个16161616位数值位数值位数值位数值 ( ( ( (fill_value),fill_value),fill_value),fill_value),如果不用如果不用如果不用如

348、果不用- - - -f f f f选项,则这些空单元都置选项,则这些空单元都置选项,则这些空单元都置选项,则这些空单元都置0 0 0 0。 - - - -i diri dir 更改搜索文档库算法,先到更改搜索文档库算法,先到更改搜索文档库算法,先到更改搜索文档库算法,先到dirdirdirdir(目录)中搜索。此选项目录)中搜索。此选项目录)中搜索。此选项目录)中搜索。此选项 必须出现在必须出现在必须出现在必须出现在- - - -l l l l选项之前。选项之前。选项之前。选项之前。 - - - -l filenamel filename 命名一个文档库文件作为链接器的输入文件;命名一个文档库

349、文件作为链接器的输入文件;命名一个文档库文件作为链接器的输入文件;命名一个文档库文件作为链接器的输入文件;filenamefilenamefilenamefilename 为文档库的某个文件名。此选项必须出现在为文档库的某个文件名。此选项必须出现在为文档库的某个文件名。此选项必须出现在为文档库的某个文件名。此选项必须出现在- - - -i i i i选项之后。选项之后。选项之后。选项之后。 - - - -m filenamem filename 生成一个生成一个生成一个生成一个. . . .mapmap映像文件,映像文件,映像文件,映像文件,filenamefilename是映像文件的文件名。

350、是映像文件的文件名。是映像文件的文件名。是映像文件的文件名。 . . . .mapmap文件中说明存储器配置、输入、输出段布局以及外文件中说明存储器配置、输入、输出段布局以及外文件中说明存储器配置、输入、输出段布局以及外文件中说明存储器配置、输入、输出段布局以及外 部符号重定位之后的地址等。部符号重定位之后的地址等。部符号重定位之后的地址等。部符号重定位之后的地址等。 - - - -o filenameo filename 对可执行输出模块命名。如果默认,则此文件名为对可执行输出模块命名。如果默认,则此文件名为对可执行输出模块命名。如果默认,则此文件名为对可执行输出模块命名。如果默认,则此文件

351、名为a a. . . .outout。 - - - -r r 生成一个可重新定位的输出模块。当利用生成一个可重新定位的输出模块。当利用生成一个可重新定位的输出模块。当利用生成一个可重新定位的输出模块。当利用- - - -r r选项且不用选项且不用选项且不用选项且不用 - - - -a a选项时,链接器生成一个不可执行的文件。选项时,链接器生成一个不可执行的文件。选项时,链接器生成一个不可执行的文件。选项时,链接器生成一个不可执行的文件。 2024/9/222024/9/22129129第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇

352、编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器命令文件的编写与使用链接器命令文件的编写与使用链接器命令文件的编写与使用链接器命令文件的编写与使用 链接命令文件用来为链接器提供链接信息,可将链接命令文件用来为链接器提供链接信息,可将链接命令文件用来为链接器提供链接信息,可将链接命令文件用来为链接器提供链接信息,可将链接操作所需的信息放在一个文件中,这在多次使用链接操作所需的信息放在一个文件中,这在多次使用链接操作所需的信息放在一个文件中,这在多次使用链接操作所需的信息放在一个文件中,这在多次使用同样的链接信息时,可以方便地调用。同样的链接信息时,可以方便地调用。同样的链接信息

353、时,可以方便地调用。同样的链接信息时,可以方便地调用。 在链接命令文件中,可使用在链接命令文件中,可使用在链接命令文件中,可使用在链接命令文件中,可使用MEMORYMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSSECTIONSSECTIONS伪伪伪伪指令指令指令指令,为实际应用指定存储器结构和地址的映射。,为实际应用指定存储器结构和地址的映射。,为实际应用指定存储器结构和地址的映射。,为实际应用指定存储器结构和地址的映射。 MEMORYMEMORYMEMORYMEMORY用来指定目标存储器结构。用来指定目标存储器结构。用来指定目标存储器结构。用来指定目标存储器结构

354、。 SECTIONSSECTIONSSECTIONSSECTIONS用来控制段的构成与地址分配。用来控制段的构成与地址分配。用来控制段的构成与地址分配。用来控制段的构成与地址分配。 2024/9/222024/9/22130130第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 链接器命令文件的编写与使用链接器命令文件的编写与使用链接器命令文件的编写与使用链接器命令文件的编写与使用 链接链接链接链接命令文件为命令文件为命令文件为命令文件为ASCASCASCASC文件,可包含以

355、下内容:文件,可包含以下内容:文件,可包含以下内容:文件,可包含以下内容: (1)(1)(1)(1) 输入文件名,用来指定目标文件、存档库或输入文件名,用来指定目标文件、存档库或输入文件名,用来指定目标文件、存档库或输入文件名,用来指定目标文件、存档库或其他命令文件。其他命令文件。其他命令文件。其他命令文件。 (2)(2)(2)(2) 链接器选项,它们在命令文件中的使用方法链接器选项,它们在命令文件中的使用方法链接器选项,它们在命令文件中的使用方法链接器选项,它们在命令文件中的使用方法与在命令行中相同。与在命令行中相同。与在命令行中相同。与在命令行中相同。 (3)(3)(3)(3) MEMOR

356、YMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSSECTIONSSECTIONS链接伪指令,用来指定目链接伪指令,用来指定目链接伪指令,用来指定目链接伪指令,用来指定目标存储器结构和地址分配。标存储器结构和地址分配。标存储器结构和地址分配。标存储器结构和地址分配。 (4)(4)(4)(4) 赋值说明,用于给全局符号定义和赋值。赋值说明,用于给全局符号定义和赋值。赋值说明,用于给全局符号定义和赋值。赋值说明,用于给全局符号定义和赋值。2024/9/222024/9/22131131第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工

357、具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 例如:可根据给出链接命令,编写完成该命令操例如:可根据给出链接命令,编写完成该命令操例如:可根据给出链接命令,编写完成该命令操例如:可根据给出链接命令,编写完成该命令操作的链接器命令文件作的链接器命令文件作的链接器命令文件作的链接器命令文件linklinklinklink. . . .cmdcmdcmdcmd。 lnk500 a.obj b.obj lnk500 a.obj b.obj - - - -m prog.map m prog.map - - - -o prog.outo prog.out 该命令是将两

358、个目标文件该命令是将两个目标文件该命令是将两个目标文件该命令是将两个目标文件a a a a. . . .objobjobjobj和和和和b b b b. . . .objobjobjobj进行链接进行链接进行链接进行链接, , , ,生成一个映像文件生成一个映像文件生成一个映像文件生成一个映像文件progprogprogprog. . . .mapmapmapmap和一个可执行的输出文件和一个可执行的输出文件和一个可执行的输出文件和一个可执行的输出文件progprogprogprog. . . .outoutoutout。 链接命令文件的内容如下:链接命令文件的内容如下:链接命令文件的内容如下

359、:链接命令文件的内容如下: a.obj a.obj a.obj a.obj /*/*/*/*第一个输入文件名第一个输入文件名第一个输入文件名第一个输入文件名*/*/*/*/ b.obj b.obj b.obj b.obj /*/*/*/*第二个输入文件名第二个输入文件名第二个输入文件名第二个输入文件名*/*/*/*/ - - - -m progm progm progm prog. . . .map map map map /*/*/*/*指定指定指定指定mapmapmapmap文件的选项文件的选项文件的选项文件的选项*/*/*/*/ -o prog -o prog -o prog -o pr

360、og. . . .out out out out /*/*/*/*指定输出文件的选项指定输出文件的选项指定输出文件的选项指定输出文件的选项*/*/*/*/2024/9/222024/9/22132132第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 【例】【例】【例】【例】 链接器命令文件举例。链接器命令文件举例。链接器命令文件举例。链接器命令文件举例。 a a a a. . . .obj bobj bobj bobj b. . . .obj obj obj obj /*

361、/* /* /* 输入文件名输入文件名输入文件名输入文件名 */ */ */ */ -o prog -o prog -o prog -o prog. . . .out out out out /*/*/*/*指定输出文件的选项指定输出文件的选项指定输出文件的选项指定输出文件的选项*/*/*/*/ - - - -m progm progm progm prog. . . .map map map map /*/*/*/*指定指定指定指定mapmapmapmap文件的选项文件的选项文件的选项文件的选项*/*/*/*/ MEMORY MEMORY MEMORY MEMORY /*MEMORY /*M

362、EMORY /*MEMORY /*MEMORY 伪指令伪指令伪指令伪指令*/*/*/*/ PAGE 0 PAGE 0 PAGE 0 PAGE 0: ROM ROM ROM ROM:origin=1000h, length=0100horigin=1000h, length=0100horigin=1000h, length=0100horigin=1000h, length=0100h PAGE 1 PAGE 1 PAGE 1 PAGE 1: RAM RAM RAM RAM:origin=0100h, length=0100h origin=0100h, length=0100h origin

363、=0100h, length=0100h origin=0100h, length=0100h SECTIONS SECTIONS SECTIONS SECTIONS /*SECTIONS/*SECTIONS/*SECTIONS/*SECTIONS伪指令伪指令伪指令伪指令*/*/*/*/ . . . .text text text text : : : : ROM ROM ROM ROM . . . .data data data data : : : : ROM ROM ROM ROM . . . .bss bss bss bss : : : : RAM RAM RAM RAM 2024/9

364、/222024/9/22133133第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具注意:注意:注意:注意:在命令文件中,不能采用下列符号作为段名或符号名:在命令文件中,不能采用下列符号作为段名或符号名:在命令文件中,不能采用下列符号作为段名或符号名:在命令文件中,不能采用下列符号作为段名或符号名: align DSECT len o runalign DSECT len o runalign DSECT len o runalign DSECT len o runalign

365、 DSECT len o runalign DSECT len o run ALIGN f length org RUN ALIGN f length org RUN ALIGN f length org RUN ALIGN f length org RUN ALIGN f length org RUN ALIGN f length org RUN attr fill LENGTH origin SECTIONS attr fill LENGTH origin SECTIONS attr fill LENGTH origin SECTIONS attr fill LENGTH origin S

366、ECTIONS attr fill LENGTH origin SECTIONS attr fill LENGTH origin SECTIONS ATTR FILL load ORIGIN spare ATTR FILL load ORIGIN spare ATTR FILL load ORIGIN spare ATTR FILL load ORIGIN spare ATTR FILL load ORIGIN spare ATTR FILL load ORIGIN spare block group LOAD page type block group LOAD page type bloc

367、k group LOAD page type block group LOAD page type block group LOAD page type block group LOAD page type BLOCK GROUP MEMORY PAGE TYPE BLOCK GROUP MEMORY PAGE TYPE BLOCK GROUP MEMORY PAGE TYPE BLOCK GROUP MEMORY PAGE TYPE BLOCK GROUP MEMORY PAGE TYPE BLOCK GROUP MEMORY PAGE TYPE COPY l( COPY l( COPY l

368、( COPY l( COPY l( COPY l(小写小写小写小写小写小写L) NOLOAD range UNIONL) NOLOAD range UNIONL) NOLOAD range UNIONL) NOLOAD range UNIONL) NOLOAD range UNIONL) NOLOAD range UNION2024/9/222024/9/22134134第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 目标库目标库目标库目标库 目标库是用完全的目标文件作为成

369、员的存档文件。目标库是用完全的目标文件作为成员的存档文件。目标库是用完全的目标文件作为成员的存档文件。目标库是用完全的目标文件作为成员的存档文件。通常是将一组有关的模块组合在一起而形成的库。通常是将一组有关的模块组合在一起而形成的库。通常是将一组有关的模块组合在一起而形成的库。通常是将一组有关的模块组合在一起而形成的库。 当指定目标库作为链接器的输入时,链接器将在当指定目标库作为链接器的输入时,链接器将在当指定目标库作为链接器的输入时,链接器将在当指定目标库作为链接器的输入时,链接器将在库中搜索没有分辨的外部引用,并包括库中已定义有库中搜索没有分辨的外部引用,并包括库中已定义有库中搜索没有分辨

370、的外部引用,并包括库中已定义有库中搜索没有分辨的外部引用,并包括库中已定义有这些引用的任何成员。这些引用的任何成员。这些引用的任何成员。这些引用的任何成员。 使用目标库可减少链接的时间和可执行模块的长使用目标库可减少链接的时间和可执行模块的长使用目标库可减少链接的时间和可执行模块的长使用目标库可减少链接的时间和可执行模块的长度。可利用存档器建立主要的库。度。可利用存档器建立主要的库。度。可利用存档器建立主要的库。度。可利用存档器建立主要的库。 2024/9/222024/9/22135135第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发

371、工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 目标库目标库目标库目标库 假设:假设:假设:假设: 输入文件输入文件输入文件输入文件f1f1. .objobj和和和和f2f2. .objobj均引用了名为均引用了名为均引用了名为均引用了名为clrscrclrscr的外部的外部的外部的外部函数;函数;函数;函数; 输入文件输入文件输入文件输入文件f1.objf1.obj引用了符号引用了符号引用了符号引用了符号originorigin; 输入文件输入文件输入文件输入文件f2.objf2.obj引用了符号引用了符号引用了符号引用了符号fillclrfillclr; 库库库库libc

372、.libclibc.libc的成员的成员的成员的成员Member 0Member 0包含了包含了包含了包含了originorigin的定义;的定义;的定义;的定义; 库库库库libc.libalibc.liba的成员的成员的成员的成员Member 3Member 3包含了包含了包含了包含了fillclrfillclr的定义;的定义;的定义;的定义; 两个库的成员两个库的成员两个库的成员两个库的成员Member 1Member 1都定义了都定义了都定义了都定义了clrscrclrscr。2024/9/222024/9/22136136第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开

373、发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 目标库目标库目标库目标库 若输入命令:若输入命令:若输入命令:若输入命令: lnk500lnk500 f1f1. . . .objobj libaliba. . . .liblib f2f2. . . .objobj libclibc. . . .liblib 则各引用的分辨如下:则各引用的分辨如下:则各引用的分辨如下:则各引用的分辨如下: 库库库库libc.libalibc.liba的成员的成员的成员的成员Member 1Member 1满足对满足对满足对满足对clrscrclrscr

374、的引用的引用的引用的引用 库库库库libclibc. .libclibc的成员的成员的成员的成员Member 0Member 0满足对满足对满足对满足对originorigin的引用的引用的引用的引用 库库库库libclibc. .libaliba的成员的成员的成员的成员Member 3Member 3满足对满足对满足对满足对fillclrfillclr的引用的引用的引用的引用 2024/9/222024/9/22137137第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具

375、目标库目标库目标库目标库 若输入命令:若输入命令:若输入命令:若输入命令: lnk500 f1lnk500 f1. . . .obj f2obj f2. . . .obj libcobj libc. . . .lib libalib liba. . . .liblib 则所有对则所有对则所有对则所有对clrscrclrscr的引用,都由库的引用,都由库的引用,都由库的引用,都由库libclibc. . . .libclibc的成员的成员的成员的成员Member 1Member 1满足。满足。满足。满足。 2024/9/222024/9/22138138第第第第第第4 4 4 4 4 4章章章章

376、章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 目标库目标库目标库目标库 当链接文件没有引用定义在库中的符号时,可当链接文件没有引用定义在库中的符号时,可当链接文件没有引用定义在库中的符号时,可当链接文件没有引用定义在库中的符号时,可使用使用使用使用- - - -u u u u选择项,强迫链接器包括库的成员。此时,选择项,强迫链接器包括库的成员。此时,选择项,强迫链接器包括库的成员。此时,选择项,强迫链接器包括库的成员。此时,输入命令:输入命令:输入命令:输入命令: lnk500 lnk500 - - - -u r

377、out1 libcu rout1 libc. .liblib 则则则则在链接器全局符号表中,产生一个没有定义在链接器全局符号表中,产生一个没有定义在链接器全局符号表中,产生一个没有定义在链接器全局符号表中,产生一个没有定义的符号的符号的符号的符号rout1rout1。 若库若库若库若库libclibc. . . .liblib的任何成员定义了的任何成员定义了的任何成员定义了的任何成员定义了rout1rout1,则链接器则链接器则链接器则链接器将包括这些成员。将包括这些成员。将包括这些成员。将包括这些成员。 2024/9/222024/9/22139139第第第第第第4 4 4 4 4 4章章章

378、章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY指令指令指令指令 MEMORYMEMORY指令用来规定目标存储器的结构。指令用来规定目标存储器的结构。指令用来规定目标存储器的结构。指令用来规定目标存储器的结构。 在实际的应用中,目标系统所配置的存储器是在实际的应用中,目标系统所配置的存储器是在实际的应用中,目标系统所配置的存储器是在实际的应用中,目标系统所配置的存储器是各不相同的,通过各不相同的,通过各不相同的,通过各不

379、相同的,通过MEMORYMEMORY指令,可以进行各种各指令,可以进行各种各指令,可以进行各种各指令,可以进行各种各样的存储器配置。样的存储器配置。样的存储器配置。样的存储器配置。 MEMORYMEMORYMEMORY指令的句法:指令的句法:指令的句法:指令的句法:指令的句法:指令的句法: MEMORYMEMORYMEMORY PAGE0 PAGE0 PAGE0:name 1(attr)name 1(attr)name 1(attr):origin=constantorigin=constantorigin=constant, , , length=constantlength=constan

380、tlength=constant; PAGEn PAGEn PAGEn:name n(attr)name n(attr)name n(attr):origin=constantorigin=constantorigin=constant, , length=constant length=constant length=constant; 指令字指令字指令字指令字存储区间说明语句存储区间说明语句存储区间说明语句存储区间说明语句书写方式书写方式书写方式书写方式: 已大写已大写已大写已大写MEMORYMEMORY指令字开始;指令字开始;指令字开始;指令字开始; 由大括号括起来的存储器区间说明。由大

381、括号括起来的存储器区间说明。由大括号括起来的存储器区间说明。由大括号括起来的存储器区间说明。存储区间:存储区间:存储区间:存储区间: 存储页面存储页面存储页面存储页面 区间名称区间名称区间名称区间名称 区间属性区间属性区间属性区间属性 起始地址起始地址起始地址起始地址 区间长度区间长度区间长度区间长度2024/9/222024/9/22140140第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY4.5.4

382、 MEMORY指令指令指令指令 存储区间说明语句:存储区间说明语句:存储区间说明语句:存储区间说明语句: PAGE:PAGE: 指定存储器空间页面,最多为指定存储器空间页面,最多为指定存储器空间页面,最多为指定存储器空间页面,最多为255255255255页,页,页,页, 取决于目标存储器的配置。取决于目标存储器的配置。取决于目标存储器的配置。取决于目标存储器的配置。 每一个每一个每一个每一个PAGEPAGE代表一个完全独立的地址空间。代表一个完全独立的地址空间。代表一个完全独立的地址空间。代表一个完全独立的地址空间。 通常,通常,通常,通常,PAGE 0PAGE 0用于程序存储器;用于程序存

383、储器;用于程序存储器;用于程序存储器; PAGE 1PAGE 1用于数据存储器。用于数据存储器。用于数据存储器。用于数据存储器。 若没有规定若没有规定若没有规定若没有规定PAGEPAGE,则链接器默认为则链接器默认为则链接器默认为则链接器默认为PAGE 0PAGE 0。 2024/9/222024/9/22141141第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY指令指令指令指令

384、 存储区间说明语句:存储区间说明语句:存储区间说明语句:存储区间说明语句: name:name: 存储器区间名称。可由用字母、存储器区间名称。可由用字母、存储器区间名称。可由用字母、存储器区间名称。可由用字母、$ $ $ $、. . . .、_ _ _ _ 等组成。等组成。等组成。等组成。 存储器区间为内部记号,因此不需要保留在输出存储器区间为内部记号,因此不需要保留在输出存储器区间为内部记号,因此不需要保留在输出存储器区间为内部记号,因此不需要保留在输出文件或者符号表中。文件或者符号表中。文件或者符号表中。文件或者符号表中。 不同不同不同不同PAGEPAGE上的存储器区间可以取相同的名字,上

385、的存储器区间可以取相同的名字,上的存储器区间可以取相同的名字,上的存储器区间可以取相同的名字,但在同一但在同一但在同一但在同一PAGEPAGE内的名字不能相同内的名字不能相同内的名字不能相同内的名字不能相同, , , ,且不许重叠配置。且不许重叠配置。且不许重叠配置。且不许重叠配置。 2024/9/222024/9/22142142第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY指

386、令指令指令指令 存储区间说明语句:存储区间说明语句:存储区间说明语句:存储区间说明语句: attr:attr: 为任选项,用来为命名的存储器区间规为任选项,用来为命名的存储器区间规为任选项,用来为命名的存储器区间规为任选项,用来为命名的存储器区间规 定定定定1 1 1 1 4 4 4 4个属性。个属性。个属性。个属性。 当对输出段定位时当对输出段定位时当对输出段定位时当对输出段定位时, , , ,可利用属性限制输出段分配可利用属性限制输出段分配可利用属性限制输出段分配可利用属性限制输出段分配到一定的存储区间。到一定的存储区间。到一定的存储区间。到一定的存储区间。 属性选项共有属性选项共有属性选

387、项共有属性选项共有4 4 4 4项:项:项:项: R R 规定可以对存储器执行读操作。规定可以对存储器执行读操作。规定可以对存储器执行读操作。规定可以对存储器执行读操作。 W W 规定可以对存储器执行写操作。规定可以对存储器执行写操作。规定可以对存储器执行写操作。规定可以对存储器执行写操作。 X X 规定存储器可以装入可执行的程序代码。规定存储器可以装入可执行的程序代码。规定存储器可以装入可执行的程序代码。规定存储器可以装入可执行的程序代码。 I I I I 规定可以对存储器进行初始化。规定可以对存储器进行初始化。规定可以对存储器进行初始化。规定可以对存储器进行初始化。 若未选属性,可将输出段

388、不受限制地定位到任何若未选属性,可将输出段不受限制地定位到任何若未选属性,可将输出段不受限制地定位到任何若未选属性,可将输出段不受限制地定位到任何一个存储器的位置。一个存储器的位置。一个存储器的位置。一个存储器的位置。 任何一个没有规定属性的存储器任何一个没有规定属性的存储器任何一个没有规定属性的存储器任何一个没有规定属性的存储器( ( ( (包括所有默认方包括所有默认方包括所有默认方包括所有默认方式的存储器式的存储器式的存储器式的存储器) ) ) )都有全部都有全部都有全部都有全部4 4项属性。项属性。项属性。项属性。 2024/9/222024/9/22143143第第第第第第4 4 4

389、4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY指令指令指令指令 存储区间说明语句:存储区间说明语句:存储区间说明语句:存储区间说明语句: origin: origin: 用来指用来指用来指用来指定存储区间的起始地址,可简定存储区间的起始地址,可简定存储区间的起始地址,可简定存储区间的起始地址,可简 写为写为写为写为orgorg或或或或o o。其值以字为单位,可以。其值以字为单位,可以。其值以字为单位,可

390、以。其值以字为单位,可以 用十进制、八进制或十六进制数表示。用十进制、八进制或十六进制数表示。用十进制、八进制或十六进制数表示。用十进制、八进制或十六进制数表示。 Length:Length: 用来用来用来用来指定存储器空间的长度,可简写指定存储器空间的长度,可简写指定存储器空间的长度,可简写指定存储器空间的长度,可简写 为为为为lenlen或或或或l l,其值以字为单位,可以用其值以字为单位,可以用其值以字为单位,可以用其值以字为单位,可以用 十进制、八进制或十六进制数表示。十进制、八进制或十六进制数表示。十进制、八进制或十六进制数表示。十进制、八进制或十六进制数表示。 2024/9/222

391、024/9/22144144第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY4.5.4 MEMORY指令指令指令指令 存储区间说明语句:存储区间说明语句:存储区间说明语句:存储区间说明语句: fill:fill: 为任选项。用来为没有定位输出段的存储为任选项。用来为没有定位输出段的存储为任选项。用来为没有定位输出段的存储为任选项。用来为没有定位输出段的存储 器空单元充填一个数,键入器空单元充填一个数,键入

392、器空单元充填一个数,键入器空单元充填一个数,键入fillfill或或或或f f均可。均可。均可。均可。 该值是该值是该值是该值是2 2 2 2个字节的整型常数,可以是十进制个字节的整型常数,可以是十进制个字节的整型常数,可以是十进制个字节的整型常数,可以是十进制 数、八进制数或十六制数数、八进制数或十六制数数、八进制数或十六制数数、八进制数或十六制数。 2024/9/222024/9/22145145第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】用用用用M

393、EMORYMEMORYMEMORYMEMORY伪指令编写连接命令文件。要求:伪指令编写连接命令文件。要求:伪指令编写连接命令文件。要求:伪指令编写连接命令文件。要求: 程序存储器:程序存储器:程序存储器:程序存储器:4 4 4 4K K K K字字字字ROMROMROMROM,起始地址为起始地址为起始地址为起始地址为C00hC00hC00hC00h,取名为取名为取名为取名为ROMROMROMROM。 数据存储器:数据存储器:数据存储器:数据存储器:32323232字字字字RAMRAMRAMRAM,起始地址为起始地址为起始地址为起始地址为60606060h h h h,取名为取名为取名为取名为S

394、CRSCRSCRSCR。 512512512512字字字字RAMRAMRAMRAM,起始地址为起始地址为起始地址为起始地址为80808080h h h h,取名为取名为取名为取名为CHIPCHIPCHIPCHIP。 file1.obj fiel2.obj file1.obj fiel2.obj file1.obj fiel2.obj file1.obj fiel2.obj -o Prog-o Prog-o Prog-o Prog. . . .out out out out MEMORYMEMORYMEMORYMEMORY PAGE 0PAGE 0PAGE 0PAGE 0: ROMROMROMR

395、OM: origin=C00h, length=1000h origin=C00h, length=1000h origin=C00h, length=1000h origin=C00h, length=1000h PAGE 1PAGE 1PAGE 1PAGE 1: SCRSCRSCRSCR: origin=60h, length=20h origin=60h, length=20h origin=60h, length=20h origin=60h, length=20h CHIPCHIPCHIPCHIP: origin=80h, length=200h origin=80h, length

396、=200h origin=80h, length=200h origin=80h, length=200h 两个输入文件两个输入文件链接命令选项链接命令选项指令字指令字页面名称页面名称区间名称区间名称起始地址起始地址区间长度区间长度2024/9/222024/9/22146146第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具【例】例】例】例】用用用用MEMORYMEMORYMEMORYMEMORY伪指令编写连接命令文件。伪指令编写连接命令文件。伪指令编写连接命令文件。伪指令

397、编写连接命令文件。file1.obj fiel2.obj file1.obj fiel2.obj file1.obj fiel2.obj file1.obj fiel2.obj -o Prog-o Prog-o Prog-o Prog. . . .out out out out MEMORYMEMORYMEMORYMEMORY PAGE 0PAGE 0PAGE 0PAGE 0: ROMROMROMROM: org=C00h, len=1000h org=C00h, len=1000h org=C00h, len=1000h org=C00h, len=1000hPAGE 1PAGE 1PAGE

398、 1PAGE 1: SCRSCRSCRSCR: org=60h, len=20h org=60h, len=20h org=60h, len=20h org=60h, len=20h CHIPCHIPCHIPCHIP:org=80h, len=200horg=80h, len=200horg=80h, len=200horg=80h, len=200h PAGE 0PAGE 0PAGE 0PAGE 0: ROM ROM ROM ROM: org=C00h, len=1000h org=C00h, len=1000h org=C00h, len=1000h org=C00h, len=1000h

399、程序存储器程序存储器程序存储器程序存储器00000000000000000000h h h h0FFFFh0FFFFh0FFFFh0FFFFh00000000C00hC00hC00hC00h1001001001000h0h0h0h01010101C00hC00hC00hC00hROMROMPAGE 1PAGE 1PAGE 1PAGE 1: SCRSCRSCRSCR: org=60h, len=20h org=60h, len=20h org=60h, len=20h org=60h, len=20h数据存储器数据存储器数据存储器数据存储器00000000000000000000h h h h0

400、FFFFh0FFFFh0FFFFh0FFFFh00000000060h060h060h060h0000000007Fh07Fh07Fh07Fh20h20h20h20hSCRSCR CHIPCHIPCHIPCHIP:org=80h, len=200horg=80h, len=200horg=80h, len=200horg=80h, len=200h00000000080h080h080h080h200200200200h h h h0027002700270027FhFhFhFhCHIPCHIP2024/9/222024/9/22147147第第第第第第4 4 4 4 4 4章章章章章章 汇编

401、语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 SECTIONSSECTIONSSECTIONSSECTIONS指令指令指令指令 用来控制段的构成与地址分配。用来控制段的构成与地址分配。用来控制段的构成与地址分配。用来控制段的构成与地址分配。指令功能:指令功能:指令功能:指令功能: 说明如何将输入段组合成输出段;说明如何将输入段组合成输出段;说明如何将输入段组合成输出段;说明如何将输入段组合成输出段; 在可执行程序中定义输出段;在可执行程序中定义输出段;在可执行程序中定义输出段;在可执行程序中定义输出段; 规定输出段在存储器

402、中的存放位置;规定输出段在存储器中的存放位置;规定输出段在存储器中的存放位置;规定输出段在存储器中的存放位置; 允许重新命名输出段。允许重新命名输出段。允许重新命名输出段。允许重新命名输出段。1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 2024/9/222024/9/22148148第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具SECTIONSSECTIONSSECTIONS指令的句法:指令的句法:指令

403、的句法:指令的句法:指令的句法:指令的句法: SECTIONSSECTIONSSECTIONS name name name:propertypropertyproperty, , , propertypropertyproperty, , , propertypropertyproperty, , , name name name:propertypropertyproperty, , , propertypropertyproperty, , , propertypropertyproperty, , , name name name:propertypropertyproperty, ,

404、 , propertypropertyproperty, , , propertypropertyproperty, , , 指令字指令字指令字指令字输出段输出段输出段输出段说明语句说明语句说明语句说明语句 段名:段名:段名:段名:定义输出段的名称。定义输出段的名称。定义输出段的名称。定义输出段的名称。 属性属性属性属性:定义该段的内容和存储器的分配。定义该段的内容和存储器的分配。定义该段的内容和存储器的分配。定义该段的内容和存储器的分配。段名段名段名段名1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法属性属性属性属性属性属性属

405、性属性属性属性属性属性2024/9/222024/9/22149149第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 段属性用来定义输出段的内容和存储地址的分段属性用来定义输出段的内容和存储地址的分段属性用来定义输出段的内容和存储地址的分段属性用来定义输出段的内容和存储地址的分配。包括的内容如下:配。包括的内容如下:配。包括的内容如下:配。包括的内容如下: 装入

406、存储器分配装入存储器分配装入存储器分配装入存储器分配 运行存储器分配运行存储器分配运行存储器分配运行存储器分配 输入段输入段输入段输入段 段的类型段的类型段的类型段的类型 充填值充填值充填值充填值2024/9/222024/9/22150150第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 装入存储器分配装入存储器分配装入存储器分配装入存储器分配 用于定义段装入

407、时的存储器地址。用于定义段装入时的存储器地址。用于定义段装入时的存储器地址。用于定义段装入时的存储器地址。语法格式:语法格式:语法格式:语法格式: load=allocationload=allocation 或或或或 allocationallocation 或或或或 allocationallocation allocation: allocation: 关于段地址的说明,即给段分配存储关于段地址的说明,即给段分配存储关于段地址的说明,即给段分配存储关于段地址的说明,即给段分配存储 单元。单元。单元。单元。 2024/9/222024/9/22151151第第第第第第4 4 4 4 4 4

408、章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 装入存储器分配装入存储器分配装入存储器分配装入存储器分配例如:例如:例如:例如: .text: load=0x1000.text: load=0x1000 . .text: loadROMtext: loadROM . .bss: loadbss: load(RWRW) . .texttext: : align=0x80 align=0x80 .

409、.text: PAGE 0 text: PAGE 0 . .bss: load=block(0x80)bss: load=block(0x80) 将将将将. .texttext段定位到一个特定的地址。段定位到一个特定的地址。段定位到一个特定的地址。段定位到一个特定的地址。 将将将将. .texttext段定位到命名为段定位到命名为段定位到命名为段定位到命名为ROMROM的存储区。的存储区。的存储区。的存储区。 将将将将. .bssbss段定位到属性为段定位到属性为段定位到属性为段定位到属性为R R、WW的存储区。的存储区。的存储区。的存储区。 将将将将. .texttext段定位到从地址段定位

410、到从地址段定位到从地址段定位到从地址0 0x80x80开始。开始。开始。开始。 将将将将. .texttext段定位到段定位到段定位到段定位到PAGE 0PAGE 0。 将将将将. .bssbss段定位到一个段定位到一个段定位到一个段定位到一个n n字存储器块字存储器块字存储器块字存储器块 的任何一个位置的任何一个位置的任何一个位置的任何一个位置( (n n为为为为2 2的幂次的幂次的幂次的幂次) )。 2024/9/222024/9/22152152第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发

411、工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 装入存储器分配装入存储器分配装入存储器分配装入存储器分配 若用到一个以上参数,可以将它们排成一行。若用到一个以上参数,可以将它们排成一行。若用到一个以上参数,可以将它们排成一行。若用到一个以上参数,可以将它们排成一行。 例如:例如:例如:例如: . .texttext: : ROM ROM ( (alignalign(1616)PAGE PAGE ( (2 2 ) ) 。 2024/9/222024/9/22153153第第第第第第4 4 4 4 4 4章

412、章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 运行存储器分配运行存储器分配运行存储器分配运行存储器分配 用于定义段运行时的存储器地址。用于定义段运行时的存储器地址。用于定义段运行时的存储器地址。用于定义段运行时的存储器地址。语法格式:语法格式:语法格式:语法格式: run=allocationrun=allocation 或或或或 run allocationrun allocation 202

413、4/9/222024/9/22154154第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 链接器为段在目标存储器中分配两个地址:链接器为段在目标存储器中分配两个地址:链接器为段在目标存储器中分配两个地址:链接器为段在目标存储器中分配两个地址: 加载的地址加载的地址加载的地址加载的地址由装入存储器分配完成由装入存储器分配完成由装入存储器分配完成由装入存储器分配完成

414、 执行程序的地址执行程序的地址执行程序的地址执行程序的地址由运行存储器分配完成由运行存储器分配完成由运行存储器分配完成由运行存储器分配完成 通常,这两个地址是相同的。通常,这两个地址是相同的。通常,这两个地址是相同的。通常,这两个地址是相同的。 若要想把程序的加载区分开,先将程序加载到若要想把程序的加载区分开,先将程序加载到若要想把程序的加载区分开,先将程序加载到若要想把程序的加载区分开,先将程序加载到ROMROMROMROM,然后在然后在然后在然后在RAMRAMRAMRAM中运行,则用中运行,则用中运行,则用中运行,则用SECTIONSSECTIONSSECTIONSSECTIONS命令让链

415、接命令让链接命令让链接命令让链接器对这个段定位两次即可。器对这个段定位两次即可。器对这个段定位两次即可。器对这个段定位两次即可。 例如:例如:例如:例如: . .firfir: load=ROM load=ROM,run=RAMrun=RAM 2024/9/222024/9/22155155第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 输入段输入段输入段输入段

416、 用于定义组成输出段的输入段。用于定义组成输出段的输入段。用于定义组成输出段的输入段。用于定义组成输出段的输入段。语法格式:语法格式:语法格式:语法格式: input_sectionsinput_sections 大多数情况下,在大多数情况下,在大多数情况下,在大多数情况下,在SECTIONSSECTIONS命令中是不列出命令中是不列出命令中是不列出命令中是不列出每个输入文件的输入段的段名。每个输入文件的输入段的段名。每个输入文件的输入段的段名。每个输入文件的输入段的段名。 例如:例如:例如:例如: SECTIONSSECTIONS . . . .texttext: : : : . . . .

417、datadata: : : : . . . .bssbss 链接时:在输入文件中的链接时:在输入文件中的链接时:在输入文件中的链接时:在输入文件中的所有所有所有所有. .texttext段链接成段链接成段链接成段链接成. .texttext输出段输出段输出段输出段所有所有所有所有. .datadata段链接成段链接成段链接成段链接成. .datadata输出段输出段输出段输出段所有所有所有所有. .bssbss段链接成段链接成段链接成段链接成. .bssbss输出段输出段输出段输出段2024/9/222024/9/22156156第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发

418、工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 用用用用文件名和段名来规定输入段。文件名和段名来规定输入段。文件名和段名来规定输入段。文件名和段名来规定输入段。 SECTIONSSECTIONS .text: .text: /*/*创建创建创建创建 . .text text 输出段输出段输出段输出段*/*/ f1.obj(.text) f1.obj(.text) /*/*链接来自链接来自链接来自链接来自f1.objf1.ob

419、j文件中的文件中的文件中的文件中的. .text text 段段段段*/*/ f2.obj(sec1) f2.obj(sec1) /*/*链接来自链接来自链接来自链接来自f2.objf2.obj文件中的文件中的文件中的文件中的sec1 sec1 段段段段*/*/ f3.obj f3.obj /*/*链接来自链接来自链接来自链接来自f3.objf3.obj文件中的所有段文件中的所有段文件中的所有段文件中的所有段*/*/ f4.obj(.text,sec2) f4.obj(.text,sec2) /*/*链接链接链接链接f4.objf4.obj文件中的文件中的文件中的文件中的. .text tex

420、t 段和段和段和段和sec2sec2段段段段*/*/ 2024/9/222024/9/22157157第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具1.1.1.1. SECTIONSSECTIONSSECTIONSSECTIONS指令语法指令语法指令语法指令语法 段的类型段的类型段的类型段的类型 用于为输出段定义特殊形式的标记用于为输出段定义特殊形式的标记用于为输出段定义特殊形式的标记用于为输出段定义特殊形式的标记 。语法格式:语法格式:语法格式:语法格式: type=CO

421、PYtype=COPY 或或或或 type=DSECTtype=DSECT 或或或或 type=NOLOADtype=NOLOAD 充填值充填值充填值充填值 用于对未初始化空单元定义一个数值。用于对未初始化空单元定义一个数值。用于对未初始化空单元定义一个数值。用于对未初始化空单元定义一个数值。语法格式:语法格式:语法格式:语法格式: fill=valuefill=value 或或或或 namename: =value=value 2024/9/222024/9/22158158第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程

422、序开发工具汇编语言程序开发工具汇编语言程序开发工具 SECTIONSSECTIONSSECTIONSSECTIONS指令指令指令指令 2.2.2.2. SECTIONSSECTIONSSECTIONSSECTIONS指令的使用指令的使用指令的使用指令的使用 【例】例】例】例】SECTIONSSECTIONSSECTIONSSECTIONS指令的使用。指令的使用。指令的使用。指令的使用。 file1.obj file2.obj file1.obj file2.obj file1.obj file2.obj file1.obj file2.obj -o Prog.out -o Prog.out -

423、o Prog.out -o Prog.out SECTIONS SECTIONS SECTIONS SECTIONS .text: load=ROM .text: load=ROM .text: load=ROM .text: load=ROM,run=800hrun=800hrun=800hrun=800h .con: load=ROM .con: load=ROM .con: load=ROM .con: load=ROM .bss: load=RAM .bss: load=RAM .bss: load=RAM .bss: load=RAM .vec: load=FF80h .vec: l

424、oad=FF80h .vec: load=FF80h .vec: load=FF80h t1.obj(.int1) t1.obj(.int1) t1.obj(.int1) t1.obj(.int1) t2.obj(.int2) t2.obj(.int2) t2.obj(.int2) t2.obj(.int2) endvec=. endvec=. endvec=. endvec=.; ; .data: align=16 .data: align=16 .data: align=16 .data: align=16 两个输入文件两个输入文件链接命令选项链接命令选项指令字指令字输输出出段段说说明明语

425、语句句2024/9/222024/9/22159159第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. SECTIONSSECTIONSSECTIONSSECTIONS指令的使用指令的使用指令的使用指令的使用 【例】例】例】例】SECTIONSSECTIONSSECTIONSSECTIONS指令的使用。指令的使用。指令的使用。指令的使用。 file1.obj file2.obj file1.obj file2.obj file1.obj file2.obj f

426、ile1.obj file2.obj -o Prog.out -o Prog.out -o Prog.out -o Prog.out SECTIONS SECTIONS SECTIONS SECTIONS .text: load=ROM .text: load=ROM .text: load=ROM .text: load=ROM,run=800hrun=800hrun=800hrun=800h .con: load=ROM .con: load=ROM .con: load=ROM .con: load=ROM .bss: load=RAM .bss: load=RAM .bss: load

427、=RAM .bss: load=RAM .vec: load=FF80h .vec: load=FF80h .vec: load=FF80h .vec: load=FF80h t1.obj(.int1) t1.obj(.int1) t1.obj(.int1) t1.obj(.int1) t2.obj(.int2) t2.obj(.int2) t2.obj(.int2) t2.obj(.int2) endvec=. endvec=. endvec=. endvec=.; ; .data: align=16 .data: align=16 .data: align=16 .data: align=

428、16 输出段输出段加载地址加载地址运行地址运行地址.textROMRAM 800h.conROM.bssRAM.vecROM FF80.dataRAM 16位边界位边界2024/9/222024/9/22160160第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具2.2.2.2. SECTIONSSECTIONSSECTIONSSECTIONS指令的使用指令的使用指令的使用指令的使用 【例】例】例】例】SECTIONSSECTIONSSECTIONSSECTIONS指令的使用

429、。指令的使用。指令的使用。指令的使用。 file1.obj file2.obj file1.obj file2.obj file1.obj file2.obj file1.obj file2.obj -o Prog.out -o Prog.out -o Prog.out -o Prog.out SECTIONS SECTIONS SECTIONS SECTIONS .text: load=ROM .text: load=ROM .text: load=ROM .text: load=ROM,run=800hrun=800hrun=800hrun=800h .con: load=ROM .con

430、: load=ROM .con: load=ROM .con: load=ROM .bss: load=RAM .bss: load=RAM .bss: load=RAM .bss: load=RAM .vec: load=FF80h .vec: load=FF80h .vec: load=FF80h .vec: load=FF80h t1.obj(.int1) t1.obj(.int1) t1.obj(.int1) t1.obj(.int1) t2.obj(.int2) t2.obj(.int2) t2.obj(.int2) t2.obj(.int2) endvec=. endvec=. e

431、ndvec=. endvec=.; ; .data: align=16 .data: align=16 .data: align=16 .data: align=16 输出段输出段加载地址加载地址运行地址运行地址.textROMRAM 800h.conROM.bssRAM.vecROM FF80.dataRAM 16位边界位边界 ROMROM RAMRAM00000000h h h h.text.con.bss.vec.dataFF80hFF80hFF80hFF80h运行时运行时运行时运行时800h800h800h800h.text.text.text2024/9/222024/9/22161

432、161第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 SECTIONSSECTIONSSECTIONSSECTIONS指令指令指令指令 3.3.3.3. MEMORYMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSSECTIONSSECTIONS命令的默认命令的默认命令的默认命令的默认使用使用使用使用 如果没有利用如果没有利用如果没有利用如果没有利用MEMORYMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSSECTI

433、ONSSECTIONS命令,链接器就命令,链接器就命令,链接器就命令,链接器就按默认算法来定位输出段。按默认算法来定位输出段。按默认算法来定位输出段。按默认算法来定位输出段。 将所有的将所有的将所有的将所有的. . . .texttexttexttext输入段链接成一个输入段链接成一个输入段链接成一个输入段链接成一个. . . .texttexttexttext输出段,输出段,输出段,输出段,并配置到并配置到并配置到并配置到PAGEPAGEPAGEPAGE 0 0 0 0上的存储器;上的存储器;上的存储器;上的存储器; 将将将将所有的所有的所有的所有的. . . .datadatadatada

434、ta输入段组合成输入段组合成输入段组合成输入段组合成. . . .datadatadatadata输出段,定位输出段,定位输出段,定位输出段,定位到到到到PAGEPAGEPAGEPAGE 0 0 0 0上的存储器;上的存储器;上的存储器;上的存储器; 2024/9/222024/9/22162162第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具3.3.3.3. MEMORYMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSSECTIONSSECTI

435、ONS命令的默认命令的默认命令的默认命令的默认使用使用使用使用 所有的所有的所有的所有的. . . .bssbssbssbss输入段则组合成一个输入段则组合成一个输入段则组合成一个输入段则组合成一个. . . .bssbssbssbss输出段,并输出段,并输出段,并输出段,并由链接器定位到配置为由链接器定位到配置为由链接器定位到配置为由链接器定位到配置为PAGE 1PAGE 1PAGE 1PAGE 1上的存储器。上的存储器。上的存储器。上的存储器。 如果输入文件中包含有已初始化的命名段,则链如果输入文件中包含有已初始化的命名段,则链如果输入文件中包含有已初始化的命名段,则链如果输入文件中包含有

436、已初始化的命名段,则链接器将它们定位到程序存储器,紧随接器将它们定位到程序存储器,紧随接器将它们定位到程序存储器,紧随接器将它们定位到程序存储器,紧随. . . .datadatadatadata段之后。段之后。段之后。段之后。 如果输入文件中包括有未初始化的命名段,则链如果输入文件中包括有未初始化的命名段,则链如果输入文件中包括有未初始化的命名段,则链如果输入文件中包括有未初始化的命名段,则链接器将它们定位到数据存储器,并紧随接器将它们定位到数据存储器,并紧随接器将它们定位到数据存储器,并紧随接器将它们定位到数据存储器,并紧随. . . .bssbssbssbss段之后。段之后。段之后。段之

437、后。 2024/9/222024/9/22163163第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具3.3.3.3. MEMORYMEMORYMEMORYMEMORY和和和和SECTIONSSECTIONSSECTIONSSECTIONS命令的默认命令的默认命令的默认命令的默认使用使用使用使用 MEMORYMEMORY PAGE 0 PAGE 0:PROGPROG: origin=0x0080, length=0xFF00 origin=0x0080, length=0xF

438、F00 PAGE 1 PAGE 1:DATADATA: origin=0x0080, length=0xFF80 origin=0x0080, length=0xFF80 SECTIONSSECTIONS .text: PAGE=0 .text: PAGE=0 .data: PAGE=0 .data: PAGE=0 .cinit: PAGE=0 .cinit: PAGE=0 .bss: PAGE=1 .bss: PAGE=1 2024/9/222024/9/22164164第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开

439、发工具汇编语言程序开发工具汇编语言程序开发工具 多个文件的链接实例多个文件的链接实例多个文件的链接实例多个文件的链接实例 下面以下面以下面以下面以exampleexampleexampleexample. . . .asmasmasmasm源程序为例,将复位向量列源程序为例,将复位向量列源程序为例,将复位向量列源程序为例,将复位向量列为一个单独的文件,对两个目标文件进行链接。为一个单独的文件,对两个目标文件进行链接。为一个单独的文件,对两个目标文件进行链接。为一个单独的文件,对两个目标文件进行链接。(1) (1) (1) (1) 编写复位向量文件编写复位向量文件编写复位向量文件编写复位向量文件

440、 vectorsvectors. . . .asmasm文件清单:文件清单:文件清单:文件清单: . . . .title “vectors.asm”title “vectors.asm”title “vectors.asm”title “vectors.asm” .ref start .ref start .ref start .ref start .sect “.vectors” .sect “.vectors” .sect “.vectors” .sect “.vectors” B start B start B start B start .end .end .end .end 202

441、4/9/222024/9/22165165第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具 多个文件的链接实例多个文件的链接实例多个文件的链接实例多个文件的链接实例 (2)(2)(2)(2) 编写源程序编写源程序编写源程序编写源程序 文件清单:文件清单:文件清单:文件清单: .title “example.asm”.title “example.asm”.title “example.asm”.title “example.asm” .mmregs .mmregs .mmre

442、gs .mmregs stack .usect “STACK”,10h stack .usect “STACK”,10h stack .usect “STACK”,10h stack .usect “STACK”,10h ; ; 为堆栈指定空间为堆栈指定空间为堆栈指定空间为堆栈指定空间 . . . .bss a,4 bss a,4 bss a,4 bss a,4 ; ; 为变量分配为变量分配为变量分配为变量分配9 9 9 9个字的空间个字的空间个字的空间个字的空间 . . . .bss x,4bss x,4bss x,4bss x,4 .bss y,1 .bss y,1 .bss y,1 .b

443、ss y,1 .def start .def start .def start .def start .data .data .data .datatable: .word 1,2,3,4 table: .word 1,2,3,4 table: .word 1,2,3,4 table: .word 1,2,3,4 ; ; 变量初始化变量初始化变量初始化变量初始化 . . . .word 8,6,4,2word 8,6,4,2word 8,6,4,2word 8,6,4,2 .text .text .text .text2024/9/222024/9/22166166第第第第第第4 4 4 4

444、4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(2)(2)(2)(2) 编写源程序编写源程序编写源程序编写源程序 文件清单:文件清单:文件清单:文件清单: start: STM # start: STM # start: STM # start: STM # 0,SWWSR 0,SWWSR 0,SWWSR 0,SWWSR ; ; 插入插入插入插入0 0 0 0个等待状态个等待状态个等待状态个等待状态 STM #STM #STM #STM # STACK + 10h,SP STACK + 10h,SP

445、STACK + 10h,SP STACK + 10h,SP ; ; 设置堆栈指针设置堆栈指针设置堆栈指针设置堆栈指针 STM #STM #STM #STM # a,AR1 a,AR1 a,AR1 a,AR1 ; ; AR1AR1AR1AR1指向指向指向指向a a a a RPT # RPT # RPT # RPT # 7 7 7 7 ; ; 移动移动移动移动8 8 8 8个数据个数据个数据个数据 MVPD table,*AR1+ MVPD table,*AR1+ MVPD table,*AR1+ MVPD table,*AR1+ ; ; 从程序存储器到数据存储器从程序存储器到数据存储器从程序存

446、储器到数据存储器从程序存储器到数据存储器 CALL SUM CALL SUM CALL SUM CALL SUM ; ; 调用调用调用调用SUMSUMSUMSUM子程序子程序子程序子程序 end: B endend: B endend: B endend: B end SUM: STM # SUM: STM # SUM: STM # SUM: STM # a, AR3 a, AR3 a, AR3 a, AR3 ; ; 子程序执行子程序执行子程序执行子程序执行 STM #STM #STM #STM # x, AR4x, AR4x, AR4x, AR4 RPTZ A, # RPTZ A, # RP

447、TZ A, # RPTZ A, # 3 3 3 3 MAC *AR3+,*AR4+,A MAC *AR3+,*AR4+,A MAC *AR3+,*AR4+,A MAC *AR3+,*AR4+,A STL A, STL A, STL A, STL A, y y y y RET RET RET RET . . . .end end end end 2024/9/222024/9/22167167第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(3) (3) (3) (3) 对源文

448、件汇编对源文件汇编对源文件汇编对源文件汇编(4) (4) (4) (4) 编写链接命令文件编写链接命令文件编写链接命令文件编写链接命令文件 编写的命令文件用来链接两个目标文件编写的命令文件用来链接两个目标文件编写的命令文件用来链接两个目标文件编写的命令文件用来链接两个目标文件( ( ( (输入文件输入文件输入文件输入文件) ) ) ),生成一个映像文件和一个可执行的输出文件,生成一个映像文件和一个可执行的输出文件,生成一个映像文件和一个可执行的输出文件,生成一个映像文件和一个可执行的输出文件example.outexample.outexample.outexample.out。标号标号标号标

449、号startstartstartstart是程序的入口。是程序的入口。是程序的入口。是程序的入口。 假设目标存储器的配置如下:假设目标存储器的配置如下:假设目标存储器的配置如下:假设目标存储器的配置如下: 程序存储器程序存储器程序存储器程序存储器 EPROM E000hEPROM E000hEPROM E000hEPROM E000h FFFFh(FFFFh(FFFFh(FFFFh(片外片外片外片外) ) ) ) 数据存储器数据存储器数据存储器数据存储器 SPRAM 0060hSPRAM 0060hSPRAM 0060hSPRAM 0060h 007Fh(007Fh(007Fh(007Fh(片

450、内片内片内片内) ) ) ) DARAM 0080hDARAM 0080hDARAM 0080hDARAM 0080h 017Fh(017Fh(017Fh(017Fh(片内片内片内片内) ) ) ) 由汇编器分别对两个源文件进行汇编,生成目标由汇编器分别对两个源文件进行汇编,生成目标由汇编器分别对两个源文件进行汇编,生成目标由汇编器分别对两个源文件进行汇编,生成目标文件文件文件文件exampleexampleexampleexample. . . .objobjobjobj和和和和vectorsvectorsvectorsvectors. . . .objobjobjobj。 2024/9/2

451、22024/9/22168168第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(4) (4) (4) (4) 编写链接命令文件编写链接命令文件编写链接命令文件编写链接命令文件 命令文件清单:命令文件清单:命令文件清单:命令文件清单: vectors.objvectors.objvectors.objvectors.obj example.obj example.obj example.obj example.obj -e start -e start -e start -e

452、 start MEMORY MEMORY MEMORY MEMORY PAGE 0 PAGE 0 PAGE 0 PAGE 0:EPROMEPROMEPROMEPROM:org=0E000horg=0E000horg=0E000horg=0E000h,len=100hlen=100hlen=100hlen=100h VECS VECS VECS VECS: org=0FF80horg=0FF80horg=0FF80horg=0FF80h,len=04hlen=04hlen=04hlen=04h PAGE 1 PAGE 1 PAGE 1 PAGE 1:SPRAMSPRAMSPRAMSPRAM:or

453、g=0060horg=0060horg=0060horg=0060h,len=20hlen=20hlen=20hlen=20h DARAM DARAM DARAM DARAM:org=0080horg=0080horg=0080horg=0080h,len=100hlen=100hlen=100hlen=100h 2024/9/222024/9/22169169第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(4) (4) (4) (4) 编写链接命令文件编写链接命令文件编写

454、链接命令文件编写链接命令文件 命令文件清单:命令文件清单:命令文件清单:命令文件清单: SECTIONSSECTIONSSECTIONSSECTIONS .text :EPROM PAGE 0 .text :EPROM PAGE 0 .text :EPROM PAGE 0 .text :EPROM PAGE 0 .data :EPROM PAGE 0 .data :EPROM PAGE 0 .data :EPROM PAGE 0 .data :EPROM PAGE 0 .bss :SPRAM PAGE 1 .bss :SPRAM PAGE 1 .bss :SPRAM PAGE 1 .bss :

455、SPRAM PAGE 1 STACK :DARAM PAGE 1 STACK :DARAM PAGE 1 STACK :DARAM PAGE 1 STACK :DARAM PAGE 1 .vectors :VECS PAGE 0 .vectors :VECS PAGE 0 .vectors :VECS PAGE 0 .vectors :VECS PAGE 0 2024/9/222024/9/22170170第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(4) (4) (4)

456、 (4) 编写链接命令文件编写链接命令文件编写链接命令文件编写链接命令文件 程序存储器配置了一个空间程序存储器配置了一个空间程序存储器配置了一个空间程序存储器配置了一个空间VECSVECSVECSVECS,它的起始地址它的起始地址它的起始地址它的起始地址0 0 0 0ff80hff80hff80hff80h,长度为长度为长度为长度为04040404h h h h,并将复位向量段并将复位向量段并将复位向量段并将复位向量段. . . .vectorsvectorsvectorsvectors放在放在放在放在VECSVECSVECSVECS空间。空间。空间。空间。 当当当当C54xC54xC54xC

457、54x复位后,首先进入复位后,首先进入复位后,首先进入复位后,首先进入0 0 0 0ff80hff80hff80hff80h,再从再从再从再从0 0 0 0ff80hff80hff80hff80h复位向量处跳转到主程序。复位向量处跳转到主程序。复位向量处跳转到主程序。复位向量处跳转到主程序。 在命令文件中,有一条命令在命令文件中,有一条命令在命令文件中,有一条命令在命令文件中,有一条命令- - - -e starte starte starte start,是软件仿是软件仿是软件仿是软件仿真器的入口地址命令,目的是在软件仿真时,屏幕从真器的入口地址命令,目的是在软件仿真时,屏幕从真器的入口地址

458、命令,目的是在软件仿真时,屏幕从真器的入口地址命令,目的是在软件仿真时,屏幕从startstartstartstart语句标号处显示程序清单,且语句标号处显示程序清单,且语句标号处显示程序清单,且语句标号处显示程序清单,且PCPCPCPC也指向也指向也指向也指向startstartstartstart位位位位置置置置(0(0(0(0e000h)e000h)e000h)e000h)。 2024/9/222024/9/22171171第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工

459、具(5) (5) (5) (5) 链接链接链接链接 经过链接器链接后,生成一个可执行的输出文件经过链接器链接后,生成一个可执行的输出文件经过链接器链接后,生成一个可执行的输出文件经过链接器链接后,生成一个可执行的输出文件exampleexampleexampleexample. . . .outoutoutout和映像文件和映像文件和映像文件和映像文件exampleexampleexampleexample. . . .mapmapmapmap。 映像文件清单:映像文件清单:映像文件清单:映像文件清单: OUTPUT FILE NAME: OUTPUT FILE NAME: OUTPUT FI

460、LE NAME: OUTPUT FILE NAME: ENTRY POINT SYMBOL: ENTRY POINT SYMBOL: ENTRY POINT SYMBOL: ENTRY POINT SYMBOL: “ “start” address: 0000e000start” address: 0000e000start” address: 0000e000start” address: 0000e000 MEMORY CONFIGURATION MEMORY CONFIGURATION MEMORY CONFIGURATION MEMORY CONFIGURATION name orig

461、in length attributes name origin length attributes name origin length attributes name origin length attributes fillfillfillfill PAGE PAGE PAGE PAGE 0: EPROM 0000e000 000000100 RWIX0: EPROM 0000e000 000000100 RWIX0: EPROM 0000e000 000000100 RWIX0: EPROM 0000e000 000000100 RWIX VECS 0000FF80 000000004

462、 RWIXVECS 0000FF80 000000004 RWIXVECS 0000FF80 000000004 RWIXVECS 0000FF80 000000004 RWIX PAGE PAGE PAGE PAGE 1: SPRAM 00000060 000000020 RWIX1: SPRAM 00000060 000000020 RWIX1: SPRAM 00000060 000000020 RWIX1: SPRAM 00000060 000000020 RWIX DARAM 00000080 000000100 RWIX DARAM 00000080 000000100 RWIX D

463、ARAM 00000080 000000100 RWIX DARAM 00000080 000000100 RWIX 2024/9/222024/9/22172172第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(5) (5) (5) (5) 链接链接链接链接 映像文件清单:映像文件清单:映像文件清单:映像文件清单: SECTION ALLOCATION MAP SECTION ALLOCATION MAP SECTION ALLOCATION MAP SECTION AL

464、LOCATION MAP output attributes/ output attributes/ output attributes/ output attributes/ section page origin length input sections section page origin length input sections section page origin length input sections section page origin length input sections . .text text text text 0 0000e000 00000016

465、0 0000e000 00000016 0 0000e000 00000016 0 0000e000 00000016 0000e000 00000000 vectors.obj(.text) 0000e000 00000000 vectors.obj(.text) 0000e000 00000000 vectors.obj(.text) 0000e000 00000000 vectors.obj(.text) 0000e000 00000016 example.obj(.text) 0000e000 00000016 example.obj(.text) 0000e000 00000016

466、example.obj(.text) 0000e000 00000016 example.obj(.text) . .data data data data 0 0000e016 00000008 0 0000e016 00000008 0 0000e016 00000008 0 0000e016 00000008 0000e016 00000000 vectors.obj(.data) 0000e016 00000000 vectors.obj(.data) 0000e016 00000000 vectors.obj(.data) 0000e016 00000000 vectors.obj(

467、.data) 0000e016 00000008 example.obj(.data) 0000e016 00000008 example.obj(.data) 0000e016 00000008 example.obj(.data) 0000e016 00000008 example.obj(.data)2024/9/222024/9/22173173第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(5) (5) (5) (5) 链接链接链接链接 映像文件清单:映像文件清单

468、:映像文件清单:映像文件清单: . .bss bss bss bss 1 00000060 00000009 UNINITIALIZED 1 00000060 00000009 UNINITIALIZED 1 00000060 00000009 UNINITIALIZED 1 00000060 00000009 UNINITIALIZED 00000060 00000000 vectors.obj(.bss) 00000060 00000000 vectors.obj(.bss) 00000060 00000000 vectors.obj(.bss) 00000060 00000000 vec

469、tors.obj(.bss) 00000060 00000009 example.obj(.bss) 00000060 00000009 example.obj(.bss) 00000060 00000009 example.obj(.bss) 00000060 00000009 example.obj(.bss) STACK 1 00000080 00000010 UNINITIALIZED STACK 1 00000080 00000010 UNINITIALIZED STACK 1 00000080 00000010 UNINITIALIZED STACK 1 00000080 0000

470、0010 UNINITIALIZED 00000080 00000010 example.obj(STACK) 00000080 00000010 example.obj(STACK) 00000080 00000010 example.obj(STACK) 00000080 00000010 example.obj(STACK) . .vectorsvectorsvectorsvectors 0 0000ff80 00000002 0 0000ff80 00000002 0 0000ff80 00000002 0 0000ff80 00000002 0000ff80 00000002 000

471、0ff80 00000002 0000ff80 00000002 0000ff80 00000002 vectorsvectorsvectorsvectors. .obj(obj(obj(obj(. .vectors)vectors)vectors)vectors) . .xref xref xref xref 0 00000000 0000008c COPY SECTION 0 00000000 0000008c COPY SECTION 0 00000000 0000008c COPY SECTION 0 00000000 0000008c COPY SECTION 00000000 00

472、000016 vectors.obj(.xref) 00000000 00000016 vectors.obj(.xref) 00000000 00000016 vectors.obj(.xref) 00000000 00000016 vectors.obj(.xref) 00000016 00000076 example.obj(.xref) 00000016 00000076 example.obj(.xref) 00000016 00000076 example.obj(.xref) 00000016 00000076 example.obj(.xref)2024/9/222024/9/

473、22174174第第第第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(5) (5) (5) (5) 链接链接链接链接 映像文件清单:映像文件清单:映像文件清单:映像文件清单: GLOBAL SYMBOLS GLOBAL SYMBOLS GLOBAL SYMBOLS GLOBAL SYMBOLS address name address name address name address name address name address name address name add

474、ress name 00000060 .bss 00000060 .bss 00000060 .bss 00000060 .bss 00000060 .bss 00000060 .bss 00000060 .bss 00000060 .bss 0000e016 .data 00000069 end 0000e016 .data 00000069 end 0000e016 .data 00000069 end 0000e016 .data 00000069 end 0000e000 .text 0000e000 .start 0000e000 .text 0000e000 .start 0000

475、e000 .text 0000e000 .start 0000e000 .text 0000e000 .start 0000e01e edata 0000e000 .text 0000e01e edata 0000e000 .text 0000e01e edata 0000e000 .text 0000e01e edata 0000e000 .text 00000069 end 0000e016 etext 00000069 end 0000e016 etext 00000069 end 0000e016 etext 00000069 end 0000e016 etext 0000e016 e

476、text 0000e016 .data 0000e016 etext 0000e016 .data 0000e016 etext 0000e016 .data 0000e016 etext 0000e016 .data 0000e000 start 0000e01e .edata 0000e000 start 0000e01e .edata 0000e000 start 0000e01e .edata 0000e000 start 0000e01e .edata 7 symbols 7 symbols 7 symbols 7 symbols2024/9/222024/9/22175175第第第

477、第第第4 4 4 4 4 4章章章章章章 汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具汇编语言程序开发工具(5) (5) (5) (5) 链接链接链接链接 将可执行输出文件将可执行输出文件将可执行输出文件将可执行输出文件exampleexampleexampleexample. . . .outoutoutout装入目标系统后就装入目标系统后就装入目标系统后就装入目标系统后就可以运行了。可以运行了。可以运行了。可以运行了。 系统复位后,系统复位后,系统复位后,系统复位后,PCPCPCPC首先指向复位向量地址首先指向复位向量地址首先指向复位

478、向量地址首先指向复位向量地址0 0 0 0FF80hFF80hFF80hFF80h。在这个地址上,有一条在这个地址上,有一条在这个地址上,有一条在这个地址上,有一条B startB startB startB start指令,程序马上跳转到指令,程序马上跳转到指令,程序马上跳转到指令,程序马上跳转到startstartstartstart语句标号,从程序起始地址语句标号,从程序起始地址语句标号,从程序起始地址语句标号,从程序起始地址0 0 0 0e000he000he000he000h开始执行主程开始执行主程开始执行主程开始执行主程序。序。序。序。 2024/9/222024/9/22176176

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号