我正在尝试使用masm32来学习有关组装的知识。我正在运行Windows 8,可以在masm32目录中编译和运行示例代码,而不会出现问题。
我正在使用快速编辑器4.0g。
但是,我有下面的代码,直接来自Kip的“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“),我得到以下错误:
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年就找到了一个答案,但它引用的是不再存在的库。我希望外面的装配专家能帮我解决这个问题。
拜托了,谢谢!
发布于 2015-01-22 16:45:39
首先,您需要欧文的库文件(Kernel32.Lib、User32.Lib、Irvine32.lib、Irvine32.inc),您可以从他的网站下载这些文件,即下载该文件并安装它:Edition.msi。
现在,在程序的开头插入一些行:
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.incinclude...-line是以后使用的,现在是注释掉的。
发布于 2016-06-24 19:20:35
Irvine book中的示例程序应该在上运行,在那里配置库并包含通过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:CONSOLEhttps://stackoverflow.com/questions/28090067
复制相似问题