MASM32快速起步

来源:互联网 发布:2017淘宝新店扶持资金 编辑:程序博客网 时间:2024/06/05 18:08

1.1  安装MASM32
到http://www.masm32.com/下载MASM32。指定一个盘符后,其将被安装至该盘的一个名为“masm32”的路径中。下文介绍了如何在MASM32自带的编辑器及VC6 IDE中编写Hello World的汇编程序。
1.2   Quick Editor环境
MASM32自带一个Quick Editor的编辑器,位于masm32目录下,名为qeditor.exe。
作为一个IDE,Quick Editor让我们很方便地在其中进行编辑源码,连接并运行程序。
注意:尽管Quick Editor支持拖放操作,但不推荐这样做。因为这种作法不能使Quick Editor自动地将当前目录设为所打开文件所在的目录,其结果,就是在连接时,提示找不到.obj文件。正确的作法是,先运行Quick Editor,再通过菜单File->Open打开相应的源码。
在Quick Editor修改代码后,一定要记得先存盘,才编译及连接。否则,所生成的执行文件还依旧是未保存之前的旧版本。
 
新建一个文件夹HelloWorld,打开Quick Editor,输入下面的源码,并将其存至HelloWorld文件夹中,名为“HelloWorld.asm”。
 
; HelloWorld.asm
 
comment * ----------------------------------------------
                 The First Assemble Application
                ---------------------------------------------- *
 
    .386
    .model flat, stdcall
    option casemap:none
 
include \masm32\include\windows.inc
 
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
 
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
 
    .data
szCaption   db 'System Information', 0
szText      db 'Hello, World!', 0
 
    .code
start:
    invoke MessageBox,\     ; 调用函数名
        NULL,\                      ; 父窗口句柄
        offset szText,\           ; 文字
        offset szCaption,\      ; 标题
        MB_OK                    ; 按钮类型
       
    invoke ExitProcess, NULL
end start
 
代码中,“\masm32\include\”及“\masm32\lib\”分别限定了Quick Editor所能识别的包含文件及库文件的路径。这样,即使我们没有在操作系统的环境变量中设置相应的路径,Quick Editor也能找到这些文件。
 
下面是汇编、连接及运行程序的方法。
Quick Editor的菜单Project->Assemble ASM file,可汇编源码,并生成HelloWorld.obj文件。Project->Link OBJ File连接obj文件,并生成HelloWorld.exe文件。Project->Assemble & Link则是上面两步的组合。Project->Console Assemble & Link是在控制台下进行汇编及连接。其结果是,在运行程序时,先打开一个控制台,再由控制台来负责装载及运行程序。也就是说,控制台是程序运行的平台。如果关闭控制台,则程序也被自动地关闭了。
这里选择Assemble & Link,生成可执行文件。然后点击工具栏上的“Run Program”图标,弹出“Run Program or Help File”窗口,选择生成的HelloWorld.exe文件,点击“打开”按钮,将弹出一个窗口,显示“Hello, World!”。这就是我们的第一个Win32汇编程序!
 
Visual C++下的一个类似于此的Win32应用,其.exe文件约150KB。而我们这个HelloWorld.exe有多大?2.50KB,是前者的1/60。
 
1.3  Visual C++环境
下面,我们不使用Quick Editor,而是使用Visual C++6的IDE来编写这个汇编程序。
 
在VC6中新建一个Project,类型为Makefile,项目名称为“VCHelloWolrd”。在接下来的Wizard窗口中,均点击”Next”或”Finish”按钮,接受默认设置。
为此项目新增一个VCHelloWorld.asm文件,内容如下:
 
; VCHelloWorld.asm
 
comment * ---------------------------------------------
                The First Assemble Application
                --------------------------------------------- *
 
    .386
    .model flat, stdcall
    option casemap:none
 
include windows.inc
include user32.inc
include kernel32.inc
 
includelib user32.lib
includelib kernel32.lib
 
    .data
szCaption   db 'System Information', 0
szText      db 'Hello World in Visual C++!', 0
 
    .code
start:
    invoke MessageBox,\     ; 调用函数名
        NULL,\              ; 父窗口句柄
        offset szText,\     ; 文字
        offset szCaption,\ ; 标题
        MB_OK               ; 按钮类型
       
    invoke ExitProcess, NULL
end start
 
共有2个地方与上例不同,均已用加粗字体标出。一是include及includelib指令语句没有了路径,只留下具体的文件名(下面将在VC中为其指定具体的路径)。二是szText的内容改为”Hello, World in Visual C++!”。
 
再为此项目新增一个名为“VCHelloWorld.mak”的文件,内容如下:
 
OUTDIR=.\Debug
 
all : VCHelloWorld.exe
 
VCHelloWorld.exe : VCHelloWorld.obj
    link /nologo /DEBUG /incremental:no /subsystem:windows
          /out:$(OUTDIR)\VCHelloWorld.exe $(OUTDIR)\VCHelloWorld.obj
 
VCHelloWorld.obj : VCHelloWorld.asm
    ml /nologo /coff /c /Fo $(OUTDIR)\VCHelloWorld.obj VCHelloWorld.asm
 
VC的NMAKE调用此文件来生成VCHelloWorld.obj及VCHelloWorld.exe文件。首先定义了名为Debug的输出路径。其次,all是一个默认的target名,其依赖于名为VCHelloWorld.obj的target。link任务负责将Debug路径下的VCHelloWord.obj连接成该路径下的VCHelloWorld.exe。接下来,定义了VCHelloWorld.exe的target,其依赖于VCHelloWorld.asm文件。下面的ml任务,负责在Debug路径中生成VCHelloWorld.obj文件。
 
下面在VC中设置所需的头文件及库文件所在的路径。单击菜单Tools->Options,在弹出的窗口中选择Directories标签,在Show directories for的下拉列表框中分别选择Executable files, Include files及Library files,分别为它们增加F:\MASM32\bin,F:\MASM32\INCLUDE, F:\MASM32\LIB的路径。这样,即使代码中没有指定具体的路径,VC也知道如何找到它们。
 
最后,告诉VC,当我们按下Build按钮(F7)时,将.exe文件存放在何路径下。单击菜单Project->Settings, 在弹出的窗口中,选Win32 Debug,选Debug标签,选General Category,在Executable for debug session的文本框中输入具体的路径,如“F:\CodeTest\ASM\VCHelloWorld\Debug\VCHelloWorld.exe”。
 
执行完上面的步骤后,按Build按钮(F7),再按Execute Program(Ctrl+F5),Hello World in Visual C++!的消息窗口出来了。此时,VCHelloWorld.exe的大小为16.0KB,依旧远远小于150KB。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tanghw/archive/2008/03/23/2207716.aspx

 

其实在VC6开发环境中没这么复杂,可以直接在asm文件上右键菜单选择“setting”,在Custom Build上设置Outputs为$(IntDir)\$(InputName).obj,Command为C:\MASM32\Bin\ml.exe /c /coff /nologo /IC:\MASM32\include\w2k /IC:\MASM32\macros /IC:\MASM32\Include /Fo$(IntDir)\$(InputName).obj $(InputName).asm
在Debug版本上为ml加上/Zi选项还可以直接在VC6 IDE中实现F9下断点带符号调试。

 

在Visual Studio 2008中,在"工具"->"选项"->"项目和解决方案"->"VC++目录"可添加可执行文件:C:\masm32\bin(放在最后一行)包含文件:C:\masm32\macros C:\masm32\include 库文件: C:\masm32\lib 然后,查看相应的.asm文件的属性,在其自定义生成步骤的“命令行”中输入 ml /c /coff /Zi /Fo"$(OutDir)\$(InputName).asm.obj" "$(InputFileName)" 在“输出”中输入 $(OutDir)\$(InputName).asm.obj
0 0
原创粉丝点击