帮忙回答个汇编问题,我用intel汇编教程第5版

来源:百度知道 编辑:UC知道 时间:2024/06/07 22:33:37
INCLUDE Irvine32.inc
dumpregs PROTO

count=5

.DATA
array DWORD count dup(0)

.CODE
main PROC
push ecx
xor esi,esi
mov ecx,count
L1:
mov array[esi],esi
inc esi
LOOP L1
mov eax,[array+1]
add eax,array
pop ecx
call dumpregs
invoke ExitProcess,0

main endp
END main

我用radasm,编译的时候没报错,连接的时候报错:
Rad1D.obj : error LNK2001: unresolved external symbol _ExitProcess@4
Rad1D.obj : error LNK2001: unresolved external symbol _dumpregs@0
Rad1D.exe : fatal error LNK1120: 2 unresolved externals

我网上找到了书里用的IRVINE32.inc等教材里用的包含文件和lib文件,我放到相应的文件夹里去了,照理应该能用里面声明的函数类。

好吧,我来回答,这个问题也困扰过我很久。
方法一:
首先:你用《IA-32》第五版的话必须要使用的是masm615(MASMPLUS我试过也可以,但推荐masm615),这个地方有下载的http://download.csdn.net/user/BAYNPU/all/2
下载完成后要设置好环境变量,方法是:在“我的电脑”上右键--->属性----高级-----环境变量。在里面新建“INCLUDE”和“LIB”变量(PATH原来就有的),值为你安装的目录。比如说我把masm615安装在了C盘的根目录下,具体的值就是 INCLUDE(C:\MASM615\INCLUDE) , LIB(C:\MASM615\LIB),PATH(C:\MASM615)
下面找到他的Irvine32.inc文件,在他的原“INCLUDE SmallWin.inc ”下面加上:
includelib kernel32.lib
includelib user32.lib
includelib Irvine32.lib
保存即可(当然你也可以每次在源文件中加入,但那样很麻烦,所以不推荐)
这样就没有问题了。
方法二:
至于你使用的radasm,我想方法差不多(我没有试过),具体的方法就是在include目录里找到Irvine32.inc,然后加上:
includelib kernel32.lib
includelib user32.lib
includelib Irvine32.lib
如过radasm还是提示出错,那就是编译器或连接器的问题了,就用我给你说的上面一种方法。
祝学习愉快!

应该还有kernel32.lib(名字可能不一样)等