求助,关于masm问题

时间:2022-02-05 01:13:29
最近 看intel汇编语言程序(第五版),很郁闷的是还是那个老问题,书上的实例照搬下来都运行不了,那个irvine32.inc 和SMALLWIN.INC也都下载了,放到了INCLUDE目录下,IRVINE32.LIB也放到了LIB目录下,我用的是masm6.15 在网上也找了很多解决办法 ,都说得很笼统,都行不通,下面是我测试的源码:

title incanddec  (incadec.asm)
include irvine32.inc
.code
main proc
     mov eax,0fffffffeh
 add eax,1
 call dumpregs
 inc eax
 call dumpregs
 mov eax,1
 sub eax,1
 call dumpregs
 dec eax
 call dumpregs
main endp
end main

接下来是上面这分代码汇编链接过程:
[img=http://b150.photo.store.qq.com/psb?/6787594b-1c4c-4350-aa85-1a73eb7fa07b/BH9e1HtcJ2ujShB.7*A8w1grQVGRZ4knyY7VbAz1KLU!/b/YadydFn3hAAAYjhbcVm0hwAA][/img]
有一个错误。

下面是我的include与lib目录图:

[img=http://b151.photo.store.qq.com/psb?/6787594b-1c4c-4350-aa85-1a73eb7fa07b/fjIb4e4hWeqH48URhI.YAQa7rl1*Xkz8SfRa8QckcMQ!/b/YSWBC1oKhAAAYlMLDVpkggAA][/img]

[img=http://b150.photo.store.qq.com/psb?/6787594b-1c4c-4350-aa85-1a73eb7fa07b/Lxs0RZ1VuiIe1mkRqig.nphrNSExTt4HKgGwtp..YMI!/b/Yfi9aVk1jAAAYu3rclmujAAA][/img]

看到网上很多人说要在代码中加入:
includelib kernel32.lib
includelib user32.lib
includelib Irvine32.lib

即如下代码:


title incanddec  (incadec.asm)
include irvine32.inc
includelib kernel32.lib
includelib user32.lib
includelib Irvine32.lib

.code
main proc
     mov eax,0fffffffeh
 add eax,1
 call dumpregs
 inc eax
 call dumpregs
 mov eax,1
 sub eax,1
 call dumpregs
 dec eax
 call dumpregs
main endp
end main

但这样编译链接又出现问题了:
[img=http://b150.photo.store.qq.com/psb?/6787594b-1c4c-4350-aa85-1a73eb7fa07b/o8jPBqq3LXraeHoRYNwaZ7WPuApmd*s6tWzpR1qHldc!/b/Yf*ib1mQiwAAYt9Ja1kiiAAA][/img]

说kernal32.LIB无效,明明在lib目录中有这个LIB文件,
就这样试了很多方法都没有用,这个问题一直是我的心头的痛,
这个问题解决不了,我就没有办法往下学下去。真心的希望有位好心人帮我解决它,分多少我无所谓。有多少我就给多少,
sos sos sos sos sos sos

5 个解决方案

#1


图全挂了……

#2


dumpregs 应该是 DumpRegs 吧。然后,你这个是 Win32 类的程序,命令行模式的,用 masm 来做,就要使用相应的选项:
ml /c /coff urfile.asm
link /subsystem:console urfile.obj
title incanddec (incadec.asm)

.586
.model flat,stdcall
option casemap:none

include irvine32.inc
includelib irvine32.lib

includelib kernel32.lib
includelib user32.lib

.code
main proc
  mov eax,0fffffffeh
add eax,1
call DumpRegs
inc eax
call DumpRegs
mov eax,1
sub eax,1
call DumpRegs
dec eax
call DumpRegs
ret
main endp
end main

如果还是有问题,换个编译软件吧,比如 Masm32v8 之类的。

#3


图片怎么都显示不出来了,怎么回事

#4


http://user.qzone.qq.com/347597062/main#!app=4
图片地址在这,大家知道的就说说怎么回事

#5


图挂鸟

#1


图全挂了……

#2


dumpregs 应该是 DumpRegs 吧。然后,你这个是 Win32 类的程序,命令行模式的,用 masm 来做,就要使用相应的选项:
ml /c /coff urfile.asm
link /subsystem:console urfile.obj
title incanddec (incadec.asm)

.586
.model flat,stdcall
option casemap:none

include irvine32.inc
includelib irvine32.lib

includelib kernel32.lib
includelib user32.lib

.code
main proc
  mov eax,0fffffffeh
add eax,1
call DumpRegs
inc eax
call DumpRegs
mov eax,1
sub eax,1
call DumpRegs
dec eax
call DumpRegs
ret
main endp
end main

如果还是有问题,换个编译软件吧,比如 Masm32v8 之类的。

#3


图片怎么都显示不出来了,怎么回事

#4


http://user.qzone.qq.com/347597062/main#!app=4
图片地址在这,大家知道的就说说怎么回事

#5


图挂鸟