首页 理论教育 汇编器如何处理代码段

汇编器如何处理代码段

时间:2023-06-20 理论教育 版权反馈
【摘要】:汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。每调用一次.bss伪指令,汇编器在相应的段保留更多的空间。3.汇编器对段的处理当汇编器遇到.text或.data或.sect命令时,将停止对当前段的汇编,然后将紧接着的程序代码或数据汇编到指定的段中,直到再遇到另一条.text、.data或.sect等段命令为止。当汇编器遇到.bss或.usect命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来,并开始对新的段进行汇编。

汇编器如何处理代码段

汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。每个程序都是由几个段结合在一起形成的。汇编器有5条伪指令可识别汇编语言程序的各个部分:

z.bss。定义未初始化段。

z.usect。定义未初始化段。

z.text。定义已初始化段。

z.data。定义已初始化段。

z.sect。定义已初始化段。

1.未初始化段

未初始化段就是仅仅在TMS320C54x存储器中保留空间,供程序运行时的临时变量或者临时存储空间使用,在目标文件中,这些段中没有确切的内容,通常它们被定位在RAM区。

未初始化段分为默认的和命名的两种,分别由汇编器伪指令.bss和.usect产生。

①.bss伪指令,用于在bss段中保留若干个空间。.bss伪指令格式为

978-7-111-35536-6-Chapter05-28.jpg

符号对应于保留的存储空间第一个字的变量名称。可以让其他段引用,也可以用.global命令定义为全局符号。

字数表示在bss段或标有名字的段中保留若干个存储单元

每调用一次.bss伪指令,汇编器在相应的段保留更多的空间。

②.usect伪指令,用于为指定的命名段保留若干个空间。.usect伪指令格式为

978-7-111-35536-6-Chapter05-29.jpg

段名程序员为未初始化的命名段定义的名字。

每调用一次.usect伪指令,汇编器在指定的命名段保留更多的空间。

2.已初始化段

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

已初始化段由.text、.data和.sect三个伪指令建立,语法为

978-7-111-35536-6-Chapter05-30.jpg

段起点是任选项。若选用,它为段程序计数器SPC定义一个起始值;若默认,则SPC从0开始。(www.xing528.com)

3.汇编器对段的处理

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

当汇编器遇到.bss或.usect命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来,并开始对新的段进行汇编。.bss和.usect命令可以出现在一个已初始化段的任何位置,而不会对它的内容发生影响。

例5-15】 段命令应用示例,本程序中定义了多个数据段。

978-7-111-35536-6-Chapter05-31.jpg

978-7-111-35536-6-Chapter05-32.jpg

图5-3 汇编后段结构图

汇编语言源程序经过汇编后,共建立了6个段,如图5-3所示。

1).text段。文本段,段内有10个字可执行的程序代码。

2).data段。已初始化的数据段,段内有7个字的数据。

3)uservars段。用.sect命令生成的命名段,段内有2个字的初始化数据。

4).bss段。未初始化的数据段,在存储器中为变量保留8个存储单元。

5)newvars段。用.usect命令建立的命名段,为变量保留10个存储单元。

6)vectors段。中断向量区。

用到的链接命令文件:

978-7-111-35536-6-Chapter05-33.jpg

978-7-111-35536-6-Chapter05-34.jpg

编译生成的MAP文件:

978-7-111-35536-6-Chapter05-35.jpg

978-7-111-35536-6-Chapter05-36.jpg

978-7-111-35536-6-Chapter05-37.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈