Reputation: 8087
I was trying to compile 2 .asm files using a function call and link them together, the main program(m.asm) is :
assume cs: code
extrn s: near
code segment
start:
mov ax,20h
call s
mov ah,4ch
int 21h
code ends
end start
And the function "s" is define in n.asm:
assume cs: code
public s
code segment
s:
mov bx,4h
div bx
ret
code ends
end
So in dosbox I used masm to compile them:
masm m.asm
masm n.asm
No problem, then I try to link them together:
link m.obj+n.obj m.exe
Now masm gives error:
M.EXE : fatal error L1011: invalid object module
pos: 1 Record type: 4D
Why is that? Do I need any special compile/link flags to make it successful? Thanks.
Upvotes: 0
Views: 3764
Reputation: 19
Same error for me, I solved the problem by just installing Masm32 instead of Masm, download and install it then set the program path in variables environment. Download link: http://masm32.com/download.htm
Upvotes: 0
Reputation: 46
You should declare the code segment as public in both modules:
CODE SEGMENT PUBLIC 'CODE' and CODE SEGMENT PUBLIC 'CODE'
Don't forget to provide for a stack segment: STACK SEGMENT WORD STACK 'STACK' DW 10 DUP 4855h STACK ENDS
I assembled and linked the files with MASM v6.1 : no errors reported! The exe executes correctly.
Upvotes: 3