Where does the Assembler know where the starting address is?
Using Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
(16bit linker)
and added start
and end start
the code Assembles and links just fine. MASM32 includes a 16bit linker in the bin directory. You must pass different command line parameters to ML to Assemble 16bit code correctly though.
.MODEL small
.STACK 100h
.data
message BYTE "Hello, world!","$"
.code
start:
mov ah,9
mov dx,OFFSET message ; addr of buffer
int 21h
END start
So to recap - your code needs a starting address and an end,
You can use the current ML that comes with MASM32 to Assemble 16 bit and 32 bit code. To link 16 bit code you must use a 16 bit linker, to link 32 bit code, you must use a 32 bit linker.
From one of my 16 bit DOS apps:
ML.EXE /DMASM /DDOS /Zm /c /nologo /I"f:masm32Include" "dosdisplay.asm"
link16.exe /NOLOGO "dosdisplay.obj"
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…