MASM32编译错误

时间:2015-01-22 13:32:47

标签: assembly x86 masm32 irvine32

我正在尝试使用masm32来学习汇编。我正在运行Windows 8,可以在masm32目录中编译和运行示例代码而不会出现问题。

我正在使用Quick Editor 4.0g。

但是,我有以下代码,直接来自Kip Irvine的“x86处理器的汇编语言”。他声明这是一些“不依赖于包含文件”的代码,尽管我觉得这可能不完全正确。

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

当我尝试构建它时(我转到Project并选择“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年找到了答案,但它引用了不再存在的库。我希望那里的一些集会大师天使可以帮我解决这个问题。

拜托,谢谢!

2 个答案:

答案 0 :(得分:3)

首先你需要Irvine的库文件(Kernel32.Lib,User32.Lib,Irvine32.lib,Irvine32.inc),你可以从his site下载,即下载这个文件并安装它:{ {3}}

现在您在程序的开头插入一些行:

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... - 行供以后使用,暂时注释掉。

答案 1 :(得分:1)

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

如果要通过命令行进行汇编,则必须通过命令参数指定库路径。以下是一个适合我的例子。

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