我在Windows XP SP3机器上安装了masm32。我从这里下载了masm32:
http://www.masm32.com/masmdl.htm
安装它。我将路径C:\ masm32 \ bin添加到PATH环境变量中。现在,我正在尝试组装和链接示例程序。它会创建目标文件,但不会创建可执行文件。
示例程序:
include \masm32\include\masm32rt.inc
.data
MyTitle db "ASM!",0
MyText db "Some Text!",0
.code
start:
push 0
push offset MyTitle
push offset MyText
push 0
call MessageBoxA
call ExitProcess
end start
另请注意,c:\ masm32 \ bin目录中的默认link.exe文件在链接时抛出错误,如下所示:
Assembling: sample.asm
***********
ASCII build
***********
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/z2
"sample.obj+"
"sample.obj"
"sample.exe"
NUL
LINK : warning LNK4044: unrecognized option "z2"; ignored
LINK : fatal error LNK1181: cannot open input file "sample.obj+"
我从这里获得了另一个版本的link.exe:
http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe
当我使用以下命令汇编和链接时:
ml.exe sample.asm sample.obj
它给出错误:
Assembling: sample.asm
***********
ASCII build
***********
Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
Copyright (C) Microsoft Corp 1984-1993. All rights reserved.
Object Modules [.obj]: sample.obj+
Object Modules [.obj]: "sample.obj"
Run File [sample.exe]: "sample.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
LINK : fatal error L1104: \masm32\lib\masm32.lib : not valid library
答案 0 :(得分:5)
嗯,你肯定不想使用Segmented链接器,这是16位代码。继续使用Incremental Linker Version 5.12.8078
那么,你得到一个obj文件?这就是ML.exe所做的。它是MASM汇编程序,它会将您的代码汇编到一个obj文件中,并传递给您选择的链接器以创建exe。我说你选择的链接器,因为有一些连接器你可以使用它们各有利弊。
创建目标文件:ml /c /coff /Cp sample.asm
/c
选项告诉ml仅汇编而不是尝试链接
/Cp
选项告诉ml保留所有标识符的大小写
/coff
以公共对象文件格式创建obj文件,这是我们在Windows上用于x86的文件。
现在,您需要将obj文件链接到exe:link /subsystem:windows sample.obj
/subsystem:windows
创建一个GUI Windows exe。更改为console
以创建基于控制台的应用程序( NOT 与DOS应用程序相同)