MASM32编译错误

MASM32 compile error

我正在尝试使用 masm32 来学习汇编。我是 运行ning Windows 8,可以毫无问题地编译和 运行 masm32 目录中的示例代码。

我正在使用 Quick Editor 4.0g。

但是,我有以下代码,直接来自 Kip Irvine 的 "Assembly Language for x86 Processors"。他说这是 "does not depend on include files" 的一段代码,但我觉得这可能不完全正确。

TITLE Add and Subtract

; This program add and subtracts 32-bit Integers

.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
DumpRegs PROTO

.code
main PROC

    mov eax,10000h
    add eax,40000h
    sub eax,20000h
    call    DumpRegs

INVOKE ExitProcess,0
main ENDP
END main

当我尝试构建它时(我转到项目并选择 "Console Assemble and Link")我收到以下错误:

AddSubAlt.obj : error LNK2001: unresolved external symbol _ExitProcess@4
AddSubAlt.obj : error LNK2001: unresolved external symbol _DumpRegs@0
AddSubAlt.exe : fatal error LNK1120: 2 unresolved externals

几天来我一直在努力解决这个问题。我找到了 2002 年的答案,但它引用了不再存在的库。我希望那里的一些装配大师天使可以帮助我解决这个问题。

拜托,谢谢!

首先你需要 Irvine 的库文件(Kernel32.Lib、User32.Lib、Irvine32.lib、Irvine32.inc),你可以从 his site, i.e. download this file and install it: http://www.kipirvine.com/asm/examples/Irvine_7th_Edition.msi.[=13 下载=]

现在你在程序的开头插入几行:

includelib C:\full\path\to\Kernel32.Lib
includelib C:\full\path\to\User32.Lib
includelib C:\full\path\to\Irvine32.lib

; include C:\full\path\to\Irvine32.inc

include... 行供以后使用,目前已注释掉。

Irvine 书中的示例程序应该是 运行 在 MS Visual studio 上,您可以在其中配置库并包括通过 GUI 的路径。

如果您想 assemble 通过命令行,您必须通过命令参数指定库路径。下面是一个对我有用的例子。

C:\Users\QMPH64>"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\ml.exe" /I C:\Irvine\ C:\Irvine\Examples\ch03\AddSubAlt.asm /link /SUBSYSTEM:CONSOLE /LIBPATH:C:\Irvine\

或者,您可以按如下方式在命令行中提供各个库。

C:\Users\QMPH64>"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\ml.exe" /I C:\Irvine\  AddSub.asm /link C:\Irvine\Irvine32.lib C:\Irvine\kernel32.lib C:\Irvine\User32.Lib /SUBSYSTEM:CONSOLE