编译一个汇编程序怎么居然折腾我如此....

编写一个最简单的win32汇编程序,就一个MessageBox弹出,程序开始如下(first.asm):

         
None.gif . 386
None.gif.model flat,stdcall
None.gifoption casemap:none
None.gif
None.gif
None.gifinclude windows.inc
None.gifinclude user32.inc
None.gifincludelib user32.lib
None.gifinclude kernel32.inc
None.gifincludelib kernel32.lib
None.gif
None.gif.data
None.gifszCaption db 
' A MessageBox ' , 0
None.gifszText db 
' Hello! ' , 0
None.gif
None.gif.code
None.gifstart:
None.gif  invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
None.gif  invoke ExitProcess,NULL
None.gifend start

程序其实挺简单,看看也都对,书上也提示对于汇编来说必须先ml生成obj文件再link成exe文件。
在命令窗口满怀信心地键入ml first.asm,居然出错~提示说window.inc找不到,肯定是环境变量没有设置好。 但是翻遍目录没找到配置环境变量的程序(脱离了IDE真有点无所适从)。于是,又写个批处理文件,设定一些目录与环境,批处理如下:
  
  
None.gif @echo off
None.gif
set  include = d:\masm32\bin\include
None.gif
set  lib = d:\masm32\lib
None.gif
set  path = d:\masm32\bin; % path %
None.gifecho on

执行后,可以在命令窗口下任何目录中调用bin中的命令,而不会出现Bad Command命令,不过,上面的老问题还是没有解决。最后,只好把程序include后面的文件加上全部路径,问题解决!包含代码如下:

None.gif include d:\masm32\include\windows.inc
None.gifinclude d:\masm32\include\user32.inc
None.gifincludelib d:\masm32\lib\user32.lib
None.gifinclude d:\masm32\include\kernel32.inc
None.gifincludelib d:\masm32\lib\kernel32.lib

这个问题一直想不明白,不过,倒了解了有关批处理文件的知识。

正确生成obj文件后,下一次就是进行链接了,以生成exe文件,直接敲入命令link first.obj,居然又通不过,这次的错误提示更是摸不着头脑。提示:a subsystem can't be inferred and must be defined,仔细翻了一下书,原来命令还有个参数:
link /subsystem:windows first.obj        --->这样就可以通过链接 真是....Faint~~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值