灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2680回复:0

库文件的应用举例

楼主#
更多 发布于:2012-09-10 18:56

把例7.3、7.4和7.5合并在一起生成一个可执行文件,假设它们所对应的源程序名分别为Count.ASM、DispBX.ASM和Main.ASM。

解:由于在源文件Count.ASM中调用了子程序UPPER,所以,例7.1的程序也必须加入到本题中。假设其源文件名为Upper.ASM。

由于生成本题的执行文件需要四个模块,模块之间存在着调用关系,所以,在有关源文件中需要说明某些标识符为外部属性,或说明其为公共属性。

为了把前面例子中的子程序改写成可汇编的程序,需要添加一些简单的说明语句或进行简单修改,其添加或改写的部分已在下面用“下划线”表示出来。 ;源文件Upper.ASM

;子程序说明信息:……

PUBLICUPPER

SegUprSEGMENT ’code’

UPPERPROC FAR

……;例7.1中的程序段,在此从略

UPPERENDP

SegUprENDS

END

;源文件DispBX.ASM

;子程序说明信息:……

PUBLICDISPBX

SubDataSEGMENT

DB5 DUP(’0’), 0ah, 0dh, ’$’

SubDataENDS

SegDispSEGMENT ’code’

DISPBXPROC FAR

……;例7.3中的程序段,在此从略

DISPBXENDP

SegDispENDS

END

;源文件Count.ASM

;子程序说明信息:……

PUBLICCOUNT

EXTRNUPPER:FAR

SegCountSEGMENT ’code’

COUNTPROC FAR

……;例7.4中的程序段,在此从略

COUNTENDP

SegCountENDS

END

;源文件Main.ASM

EXTRNCOUNT:FAR, DISPBX:FAR

.MODELSMALL

.DATA

STRDB ’KSDJ L0984/[]3oiu OIU OIU (*;(5341’, 0

.CODE

.STARTUP

LEADX, STR

CALLCOUNT;调用子程序统计出各类字符的个数

CALLDISPBX;调用子程序显示数字字符的个数

MOVBX, CX

CALLDISPBX;调用子程序显示字母的个数

MOVBX, DI

CALLDISPBX;调用子程序显示其它字符的个数

.EXIT0

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。另外,当模块的指令条数较少时,也可以把几个子模块合在一个源文件中。

喜欢0 评分0
游客

返回顶部