我不清楚如何在汇编程序和链接器中处理汇编程序中的部分(使用部分指令声明)。以下是是一些疑问:汇编语言程序中的部分
用的是什么用户定义段(段比标准的.text,.data和.bss除外)?
如果我把代码放在数据段和代码段中的数据怎么办?汇编程序如何处理它?
如果程序中没有声明任何部分,汇编程序会做什么?
如果只声明了用户定义的部分(没有文本,数据和bss),汇编程序将执行什么操作?
我知道我可以写汇编程序来测试程序将在每种情况下工作,但我想这个概念清晰。
我不清楚如何在汇编程序和链接器中处理汇编程序中的部分(使用部分指令声明)。以下是是一些疑问:汇编语言程序中的部分
用的是什么用户定义段(段比标准的.text,.data和.bss除外)?
如果我把代码放在数据段和代码段中的数据怎么办?汇编程序如何处理它?
如果程序中没有声明任何部分,汇编程序会做什么?
如果只声明了用户定义的部分(没有文本,数据和bss),汇编程序将执行什么操作?
我知道我可以写汇编程序来测试程序将在每种情况下工作,但我想这个概念清晰。
部分不过是独立的存储器序列。每个新的数据字节都放入当前打开的“程序段”中。编写一个函数使源代码中的关联数据非常接近,即使将其加载到内存中时,它可能是兆字节或千兆字节,这是相当方便的。
用户定义的程序段与标准段的工作方式相同,但通常必须向链接器和其他代码后处理工具提供附加信息,以便以合理的方式将它们加载到内存中。
您可以将可执行代码放置在数据段中,反之亦然,大多数汇编器甚至不会提醒它。从数据部分执行代码可能需要一点小技巧;反过来通常很容易。
汇编程序通常通过按照源代码的相同顺序将等价物写入对象模块来处理段,而将相似段的重新排列一起留给链接器。只有最简单的汇编器不提供这种能力。想到原始的MSDOS .COM
文件汇编器。
不同的汇编程序对程序员有不同的理解。传统的策略是假定汇编语言程序员知道他们在做什么,并且从字面上理解除了没有被理解的东西外什么都写了。其他汇编程序更有帮助(或屁股痛苦,取决于您的观点),并抱怨未对齐的多字节结构,数据或代码类型不匹配等。
基于“有用性“的汇编程序,未能启动程序部分会导致默认行为(通常是假定的代码.psect),或拒绝汇编致命错误。即使是最结构化的汇编器也不在乎是否没有文本,数据或bss。事实上,有些有用的对象模块只包含符号定义,根本没有数据(或代码)字节。
装配人员不要重新安排部分? – vjain27 2012-03-21 17:29:08
您能否告诉我们链接器在这些情况下的行为? – vjain27 2012-03-21 17:33:28
感谢您的解释!还有一件事情还在我脑海里,那就是如果没有文本或数据部分的声明,并且汇编器不关心链接器会做什么?可执行文件中不需要文本和数据部分? – vjain27 2012-03-21 17:40:57