例7.7 把例7.3、7.4和7.5合并在一起生成一个可执行文件,假设它们所对应的源程序名分别为Count.ASM、DispBX.ASM和Main.ASM。
解:由于在源文件Count.ASM中调用了子程序UPPER,所以,例7.1的程序也必须加入到本题中。假设其源文件名为Upper.ASM。
由于生成本题的执行文件需要四个模块,模块之间存在着调用关系,所以,在有关源文件中需要说明某些标识符为外部属性,或说明其为公共属性。
为了把前面例子中的子程序改写成可汇编的程序,需要添加一些简单的说明语句或进行简单修改,其添加或改写的部分已在下面用“下划线”表示出来。
| ;源文件Upper.ASM | ||||
| ;子程序说明信息:…… | ||||
| PUBLIC | UPPER | |||
| SegUpr | SEGMENT 'code' | |||
| UPPER | PROC FAR | |||
| …… | ;例7.1中的程序段,在此从略 | |||
| UPPER | ENDP | |||
| SegUpr | ENDS | |||
| END | ||||
| ;源文件DispBX.ASM ;子程序说明信息:……  |    
  ||||
| PUBLIC | DISPBX | |||
| SubData | SEGMENT | |||
| 
       DB  |    
    5 DUP('0'), 0ah, 0dh, '$' | |||
| SubData | ENDS | |||
| SegDisp | SEGMENT 'code' | |||
| DISPBX | PROC FAR | |||
| …… | ;例7.3中的程序段,在此从略 | |||
| DISPBX | ENDP | |||
| SegDisp | ENDS | |||
| END | ||||
;源文件Count.ASM  |    
  ||||
| PUBLIC | COUNT | |||
| EXTRN | UPPER:FAR | |||
| SegCount | SEGMENT 'code' | |||
| COUNT | PROC FAR | |||
| …… | ;例7.4中的程序段,在此从略 | |||
| COUNT | ENDP | |||
| SegCount | ENDS | |||
| END | ||||
| ;源文件Main.ASM | ||||
| EXTRN | COUNT:FAR, DISPBX:FAR | |||
| .MODEL | SMALL | |||
| .DATA | ||||
| STR | DB 'KSDJ L0984/[]3oiu OIU OIU (*&(5341', 0 | |||
| .CODE | ||||
| .STARTUP | ||||
| LEA | DX, STR | |||
| CALL | COUNT | ;调用子程序统计出各类字符的个数 | ||
| CALL | DISPBX | ;调用子程序显示数字字符的个数 | ||
| MOV | BX, CX | |||
| CALL | DISPBX | ;调用子程序显示字母的个数 | ||
| MOV | BX, DI | |||
| CALL | DISPBX | ;调用子程序显示其它字符的个数 | ||
| .EXIT | 0 | |||
| END | ||||
经过以上改写后,可用下列命令把它们分别汇编成目标文件(假设已安装了MASM编程环境):
…>MASM  upper
                                    
…>MASM  dispbx
                                    
…>MASM  count
                                    
…>MASM  main
有了这些目标文件后,可用以下二种方法来生成可执行文件。
方法1:把所有的目标文件连接在一起
…>link main+upper+count+dispbx
方法2:把目标文件upper.obj、count.obj和dispbx.obj加到自己开发的库文件中,然后在连接时,与该库文件连接。
…>lib  mylib +upper +count +dispbx
                       
…>link  main
                       
Microsoft (R) Segmented Executable Linker                                      
Version 5.31.009 Jul 13 1992
                       
Copyright (C) Microsoft Corp 1984-1992.                                      
All rights reserved.
                       
Run File [main.exe]:
                       
List File [nul.map]:
                       
Libraries [.lib]:   mylib      ;输入要连接的库文件,可用加号“+”连接多个库文件
Definitions File [nul.def]:
                       
LINK : warning L4021: no stack segment
…>main ;运行生成的文件
以上各步骤也可由集成开发环境PWB来完成,具体介绍请见附录1。另外,当模块的指令条数较少时,也可以把几个子模块合在一个源文件中。