当前位置: 代码迷 >> 汇编语言 >> 新手使用radasm的有关问题
  详细解决方案

新手使用radasm的有关问题

热度:969   发布时间:2013-02-26 00:00:00.0
新手使用radasm的问题!
这是我从书上抄写的一个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.
------解决方案--------------------------------------------------------
同意楼上观点.
否则出错都不知道从哪入手解决.
------解决方案--------------------------------------------------------
建议在编译、运行、链接和调试程序的时候,关闭杀毒软件和防火墙,否则编译器的运行会受到影响。