这是我从书上抄写的一个hello程序:
SSEG SEGMENT PARA STACK
DW 256 DUP (?)
SSEG ENDS
DSEG SEGMENT
MESS DB 'HELLO ',0DH,0AH, '$ '
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DS
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
编译时出现下列信息,请问是什么意思,怎么解决?
F:\mll\RadASM\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I "F:\mll\RadASM\Masm32\Include " "F:\mll\RadASM\mll\hello.asm "
Assembling: F:\mll\RadASM\mll\hello.asm
F:\mll\RadASM\mll\hello.asm(19) : warning A4023: with /coff switch, leading underscore required for start address : START
F:\mll\RadASM\Masm32\Bin\LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH: "F:\mll\RadASM\Masm32\Lib " "F:\mll\RadASM\mll\hello.obj "
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
hello.obj : fatal error LNK1190: invalid fixup found, type 0x0001
构建时发生错误.
总共编译时间 188 ms
----------------------
刚开始学习汇编,大侠见笑了!
------解决方案--------------------------------------------------------
不好意思,我上面的编辑有误~~~~~~~
==========================================
原因如下:
1 不同版本的MASM产生的.OBJ文件格式不同,在DOS和WIN16时期为OMF格式,到了WIN32时期改用COFF格式,因为它更接近最终的PE格式,在链接时做更少的处理;
2 你用MASM 6.00以上的版本编译而且指定了/COFF,所以编译出来的.OBJ不是OMF格式的.如果指定了/COFF,就必须按WIN32的格式写
3 如果你去掉/COFF就可以编译成功,但是你用的LINK肯定是32位的,它不能连接OMF格式的.OBJ文件,所以必须用16位的连接器才能成功.
总之,你需要用16位的LINK.EXE来连接OMF格式的.OBJ文件.
------解决方案--------------------------------------------------------
像这样简单的代码不用radasm来编译,在控制台简单的一句:
ml a.asm
即可,初学最好不用radasm.
------解决方案--------------------------------------------------------
同意楼上观点.
否则出错都不知道从哪入手解决.
------解决方案--------------------------------------------------------
建议在编译、运行、链接和调试程序的时候,关闭杀毒软件和防火墙,否则编译器的运行会受到影响。