我正在尝试使用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年找到了答案,但它引用了不再存在的库。我希望那里的一些集会大师天使可以帮我解决这个问题。
拜托,谢谢!
答案 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