Win32汇编编译程序总结

下载好MASM32 SDK :http://www.masm32.com ,安装好

\masm32   IDE环境、内带的文本编辑程序(有很多选择)和模板生成程序(dlgmake.exe),还有其他有趣的小程序辅助工具;

\masm32\include  所有的头文件,Windows,inc是数据结构和预定义值的定义文件,Resource.h是资源文件的头文件,其他.inc为对应同名DLL文件中的API函数声明文件

\masm32\lib   所有的导入库文件,每个.lib文件是对应DLL文件的导入库 ,取自Visual C++

\masm32\bin  可执行文件目录,其中主要常用的是:ml.exe  汇编编译器,产生COFF格式的obj文件;

                Link.exe 链接器,链接obj文件生成可执行Win32PE文件(其实就是Incremental Linker ,Microsoft的另一个链接器是链接生成DOS程序的Segmented Executable Linker)

                Rc.exe 资源编辑器,用于把资源脚本文件*.rc 编译成 资源文件 *.res ,Visual C++也是用这个。当然方便的方法是用Visual C++进行这一步,用VC++生成的.rc文件包含了很多VC自己的头文件,若将它们去掉,下次就无法再用VC打开,若不去掉这些多余的信息,那么用Rc.exe编译的时候就要把所有需要的头文件拷贝过来。

    nmake.exe  这个MASM32 SDK本身不提供,可以自己在VC++ 安装目录下的bin目录中拷贝过来。

好了 \include   \lib  \bin 这三个目录是根本,基于三个就可以工作了。

    \masm32\help  帮助文件目录      \masm32\m32lib 一些常用C子程序的汇编实现源程序,如stdin 、stdout,供参考。

    安装好MASM32 SDK后,下面为这个环境建立一个设置环境变量的批处理文件Var.bat,下面是这个批处理文件的内容(x为MASM32 SDK 安装的盘符):

    @echo off

    set include=x:\masm32\Include

    set  lib=x:\masm32\lib

    set path=x:\masm32\bin ;%path%

    echo on  

(include变量指定头文件的搜索目录,定义了这个环境变量后,Ml.exe和Rc.exe在处理asm文件和rc文件中遇到include语句时,会自动在环境变量定义的目录中查找include语句指定的文件,这样include语句就不必写头文件的全路径名了。若果是用VC++生成rc文件,为了使rc.exe能够找到头文件,还要把VC++安装目录下的Include和MFC\Include目录包含进来,这两个路径间用 " ;" 隔开。)


好至此工作环境搭建成功,编译程序时,先在新打开的cmd中输入Var来运行Var.bat 以设置临时环境变量和路径,键入set可以查看是否设置成功。 然后在项目目录下键入 nmake自动进行可控的编译和链接。


 nmake的常用选项:/A 不检测文件时间,强制更新所有文件;/B 文件时间相等时也要更新文件  ;

                                        /N 显示make时要执行的命令,但并不真正执行;/Pmake时显示详细信息

(nnake的应用是基于文件时间的,当计算机的时钟不准确或文件拷贝到另一台计算机后文件时间可能会有些偏差,那么文件的更新可能会不正确,此时最好用 /A 选项强制把所有文件更新一遍。)


nmake的描述文件makefile包含的内容:

    注释(#.....)、宏定义、显式规则、隐式规则


其中注释和宏定义是方便人的,工作的是规则(在规则定义中不能包含注释)。

显式规则:定义了文件之间的依赖关系和产生命令,如:

    目标文件:所依赖的文件; 命令    或  目标文件:依赖文件 

                                                                                        命令

隐式规则:可以为某一类的文件指出建立的命令,其具体指出了如何将带有一个特定扩展名的文件转换成具有另一种扩展名的文件,格式:

    .源扩展名.目标扩展名: ;命令          或    . 目标扩展名.目标扩展名:

                                                                                命令


隐式规则中无法指定确定的输入文件名,因为输入文件名是泛指的有相同扩展名的一整类文件,这时要用一些内定的宏来指定泛指的文件名

    $@  全路径的目标文件

    $*   除去扩展名的全路径的目标文件

    $? 所有源文件名

    $<  源文件名 (只用在显式规则中)

OK,总结就到这里!然后就可以可控地去玩Win32 汇编了~

你可能感兴趣的:(Win32汇编)