回 帖 发 新 帖 刷新版面

主题:汇编编译的问题

代码如下
.386
.model flat,stdcall
option casemap:none

include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
includelib C:\masm32\lib\user32.lib
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\kernel32.lib

.data

szCaption    db    '疯子的第一个汇编',0
szText        db    '大家好,初学者',0

.code

start:
    invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
    invoke ExitProcess,0

end start



我在cmd 里面用   ml /c /coff <文件名>.asm    生成  <文件名>.obj  正常
                 Link /subsystem:windows <文件名>.obj    生成  <文件名>.exe  正常

但是我用   masm <文件名>.asm          却是出错了
按3次回车之后..错误如下:
D:\masm32\INCLUDE\windows.inc(5037): error A2004: Redefinition of symbol
D:\masm32\INCLUDE\windows.inc(5045): error A2004: Redefinition of symbol
D:\masm32\INCLUDE\windows.inc(5046): error A2004: Redefinition of symbol
D:\masm32\INCLUDE\windows.inc(8075): error A2004: Redefinition of symbol
D:\masm32\INCLUDE\windows.inc(12900): Out of memory

我是新手, 翻译了错误信息. 麻烦告诉我一下,是哪里出错了!!!

回复列表 (共3个回复)

沙发

怎么没人回答呢???

板凳

本人正学习中,刚好也遇到这个问题、、、、楼主此帖放了近一年了竟无一人回复、、、
难道是此论坛无高手,还是因为此论坛的高手无爱心、、、

3 楼

win32的汇编程序,用16位DOS下的编译方法当然出错啦。

不同版本的MASM在使用上有大的不同,能用于WIN32汇编编程的要MASM6.14及以上版本。在ML中的/C选项表示只生成OBJ文件而不是直接产生EXE文件,原因是链接的时候可能需要指定资源文件,所以不能让ML直接用默认的链接;/COFF选项是必需的,因为链接器只支持COFF格式的OBJ文件,选项,如/CP和/Gz虽然不是必需的,但由于可以在ASM源文件中用伪定义设置,所以一般不在命令行中指定。以免漏。
使用Link的时候,/subsystem选项必须指定,一般指定为windows,当编写控制台程序的时候要改为console。写dll的时候要用/def指定列表定义文件,同时要指定/dll选项。其他的一些参数如/sub,/section和/base等只在编程特殊用途程序时才使用。

至于ML和Link的选项可请自己找一下相关资料

我来回复

您尚未登录,请登录后再回复。点此登录或注册