MASM:将2个asm文件链接在一起失败:致命错误L1101:无效的对象模块?

时间:2016-07-08 02:12:14

标签: assembly compilation linker masm

我试图使用函数调用编译2个.asm文件并将它们链接在一起,主程序(m.asm)是:

assume cs: code

  extrn s: near

code segment
start:
  mov ax,20h
  call s
  mov ah,4ch
  int 21h
code ends

  end start

功能" s"在n.asm中定义:

  assume cs: code

  public s

code segment
s:
  mov bx,4h
  div bx
  ret
code ends

  end

所以在dosbox中我使用masm来编译它们:

masm m.asm
masm n.asm

没问题,然后我尝试将它们链接在一起:

link m.obj+n.obj m.exe

现在masm给出了错误:

M.EXE : fatal error L1011: invalid object module
 pos: 1 Record type: 4D

为什么?我是否需要任何特殊的编译/链接标志才能使其成功? 感谢。

1 个答案:

答案 0 :(得分:2)

您应该在两个模块中都将代码段声明为公共:

代码段公共“代码” 和 代码段公共“代码”

不要忘记提供一个堆栈段: 堆栈段字堆栈“堆栈” DW 10 DUP 4855h 堆栈结束

我用 MASM v6.1 组装并链接了文件:没有报告错误! exe 正确执行。