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
我正在尝试使用 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