编译一个汇编程序怎么居然折腾我如此....
2005-03-13 17:02
579 查看
编写一个最简单的win32汇编程序,就一个MessageBox弹出,程序开始如下(first.asm):
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data
szCaption db 'A MessageBox',0
szText db 'Hello!',0
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NULL
end start
程序其实挺简单,看看也都对,书上也提示对于汇编来说必须先ml生成obj文件再link成exe文件。
在命令窗口满怀信心地键入ml first.asm,居然出错~提示说window.inc找不到,肯定是环境变量没有设置好。 但是翻遍目录没找到配置环境变量的程序(脱离了IDE真有点无所适从)。于是,又写个批处理文件,设定一些目录与环境,批处理如下:
@echo off
set include=d:\masm32\bin\include
set lib=d:\masm32\lib
set path=d:\masm32\bin;%path%
echo on
执行后,可以在命令窗口下任何目录中调用bin中的命令,而不会出现Bad Command命令,不过,上面的老问题还是没有解决。最后,只好把程序include后面的文件加上全部路径,问题解决!包含代码如下:
include d:\masm32\include\windows.inc
include d:\masm32\include\user32.inc
includelib d:\masm32\lib\user32.lib
include d:\masm32\include\kernel32.inc
includelib 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~~~~
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data
szCaption db 'A MessageBox',0
szText db 'Hello!',0
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NULL
end start
程序其实挺简单,看看也都对,书上也提示对于汇编来说必须先ml生成obj文件再link成exe文件。
在命令窗口满怀信心地键入ml first.asm,居然出错~提示说window.inc找不到,肯定是环境变量没有设置好。 但是翻遍目录没找到配置环境变量的程序(脱离了IDE真有点无所适从)。于是,又写个批处理文件,设定一些目录与环境,批处理如下:
@echo off
set include=d:\masm32\bin\include
set lib=d:\masm32\lib
set path=d:\masm32\bin;%path%
echo on
执行后,可以在命令窗口下任何目录中调用bin中的命令,而不会出现Bad Command命令,不过,上面的老问题还是没有解决。最后,只好把程序include后面的文件加上全部路径,问题解决!包含代码如下:
include d:\masm32\include\windows.inc
include d:\masm32\include\user32.inc
includelib d:\masm32\lib\user32.lib
include d:\masm32\include\kernel32.inc
includelib 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~~~~
相关文章推荐
- java的内存管理,是靠GC即垃圾回收程序来实现的,GC其实也是一个程序,是怎么编译、运行的?
- 图解命令行手动编译构建一个win32汇编程序
- VC编译下对一个超简单的缓冲区溢出程序的原理解析以及c程序的汇编分析
- .net问题:每次打开.net2003就会出现一个安装程序界面,每次都如此,请问是怎么回事啊??
- 汇编一个简单的C程序,分析代码理解计算机是怎么工作的
- 【Linux】使用vim编写一个程序,gcc查看预处理、编译、汇编、链接过程
- (Ubantu)使用gcc编译一个程序a.c成a.out,输入a.out运行,提示bash:a.out:command not found,怎么回事
- 1.2.在linux环境实践,使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容。并熟悉相关指令。
- (作业1)将一个简单的C程序编译成汇编代码,讨论计算机是如何工作的进行
- Linux操作系统的简单指令及如何使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容。
- 深入理解计算机系统读书笔记之一个简单汇编程序的调试分析
- VS2008编译汇编程序的问题
- 简单汇编程序编译链接执行过程
- ubuntu下使用eclipse调用libpcap库编写一个小程序时出的错误:pcap.h没有参与编译
- 记一个程序编译错误: warning: missing sentinel in function call [-Wformat]
- 如果C++程序要调用已经被编译后的C函数,该怎么办?
- 如果不用MFC,直接使用API写一个Windows程序,需哪些步骤?MFC是怎么做到菜单点击后,响应对应的代码的?
- 编写一个c++程序来编译运行java
- 用51单片机汇编语言,写一个60s倒计时的程序
- 一个由C/C++编译的程序占用的内存