10.2.2.2 连接时的段排列次序

  各源模块分别汇编并连接后形成的装入模块是按连接时指定的源模块次序排列而组成的。每个源模块中各段的排列次序也可以由用户加以控制。

  在早期的汇编程序版本中是以段名的字母次序排列的。从MASM5起提供了三个段排列伪操作,它们是 .SEQ、.ALPHA和DOSSEG。
.
  SEQ规定MASM将按段在源模块中出现的次序写入目标文件,从而形成装入模块。在缺省情况下,段排列情况与有 .SEQ时等同。

  .ALPHA规定MASM将按段名的字母次序写入目标文件,从而形成装入模块。

  DOSSEG规定MASM将使用DOS所规定的段排列方式:把代码段放在低地址区,然后是数据段,最后是堆栈段。这样,堆栈段就位于高地址区,便于其扩充。

  下面我们用例子说明段排列情况。

  实际上,装入模块中各个源模块及其段排列情况可以从连接后形成的MAP文件中看到。

  例10.5 有三个源模块如程序所示。

  在这三个模块中均未加入段排列伪操作,说明它们都是使用与有 .SEQ时等同的缺省情况。现在按目标模块1、2、3顺序加以连接,图10.3为其MAP文件。

  可以看出在装入模块中目标模块是按指定的次序顺序排列的,每个模块中的段的排列是按源模块中所给定次序顺序排列的。如果每个模块都加上.SEQ,则段排列将和图10.3的情况完全相同。