======关于Masm中Link的使用方法-========

======关于Masm中Link的使用方法--在线等========
我这里有一个程序   需要把两个文件连接起来才行   一个是sun   另外一个soundf
请问用link怎么弄   不会用。。

soundf是被sun调用的一个函数   请问怎么弄啊

------解决方案--------------------
楼上的方法应该可行,再推荐另一种方法:

soundf.asm
public soundf ; 声明为公共过程,以便外部模块可以调用该过程
soundf proc near/far
……
……
soundf endp

sun.asm
extrn soundf:near/far ;告诉编译器,该过程在外部模块

sun proc
……
call soundf
……
sun endp

ml sun.asm
ml soundf.asm
link sum.obj+soundf.obj
楼主试试,应该行的,有的link程序可以省略掉“.obj”这个扩展名,形如下面的样子:
link sum+soundf
------解决方案--------------------
问题已经解决:

步骤1:
ML S.ASM

假设子过程如下,在S.ASM中
PUBLIC S
CODES SEGMENT
ASSUME CS:CODES
S PROC FAR
MOV DL, '$ '
MOV AH,02H
INT 21H
RET
S ENDP
CODES ENDS
END

步骤2:ML M.ASM
假设主文件是M.ASM,内容如下:

EXTRN S:FAR
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
CALL S
;此处输入代码据段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START

步骤3:
LINK M.OBJ S.OBJ
接下来提示:
Run File [M.exe]: TT 回车
List File [nul.map]:回车
Libraries [.lib]:回车
Definitions File [nul.def]:回车
LINK : warning L4021: no stack segment

TT是输入的可执行文件名,如果直接输入回车,生成的可执行文件会是m.exe
最后一行提示没有堆栈,别理他。

步骤4:
TT回车
运行结果:
$

好了,问题完满解决了

注意:我使用的是MASM6.11的ML和LINK,TASM的语法有些不同,在此不做介绍了。