http://www.vckbase.com/document/viewdoc/?id=268
<iframe height="15" frameborder="0" width="728" scrolling="no" vspace="0" style="left: 0pt; position: absolute; top: 0pt;" src="http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-4159669282587342&output=html&h=15&slotname=9155085061&w=728&lmt=1262938310&flash=0&url=http%3A%2F%2Fwww.vckbase.com%2Fdocument%2Fviewdoc%2F%3Fid%3D268&dt=1262938310554&prev_slotnames=4947706540&correlator=1262938310349&frm=0&ga_vid=1348213272.1262938310&ga_sid=1262938310&ga_hid=183510498&ga_fc=0&u_tz=480&u_his=1&u_java=0&u_h=800&u_w=1280&u_ah=770&u_aw=1280&u_cd=32&u_nplug=7&u_nmime=19&biw=1280&bih=633&ref=http%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3Dwin32%25BB%25E3%25B1%25E0%2B%25C2%25DE%25D4%25C6%25B1%25F2%26oq%3Dwin32hui%26f%3D3%26rsp%3D4&fu=0&ifi=2&dtd=6&xpc=mr0XiPMQRP&p=http%3A//www.vckbase.com" name="google_ads_frame" marginwidth="0" marginheight="0" id="google_ads_frame2" hspace="0" allowtransparency="true">
前言 ( VC知识库 )
在Dos下编汇编程序,我们可以管理系统的所有资源,我们可以改动系统中所有的内存,如自己改动内存控制块来分配内存,自己修改中断向量表来截获中断 等,对其他操作也是如此,如我们对键盘端口直接操作就可以把键盘屏蔽掉,可以这样来描述Dos系统:系统只有一个特权级别,在编程上讲,任何程序和操作系 统都是同级的,所以在Dos下,一个编得不好的程序会影响其他所有的程序,如一个程序把键盘口中断关掉了,所有程序就都不能从键盘获得键入的数据,直到任 何一个程序重新打开键盘为止,一个程序陷入死循环,也没有其他程序可以把它终止掉。Dos下的编程思路是“单任务”的,你只要认为你的程序会按照你的流程 一步步的执行下去,不必考虑先后问题(当然程序可能会被中断打断,但你可以认为它们会把环境恢复,如果中断程序没有把环境恢复,那是他们的错)。 二、Win32ASM编译器 Win32ASM 的编译器最常用的有两种:Borland公司的Tasm5.0和Microsoft的Masm6.11以上版本,两种编译器各有自己的优缺点,Tasm带 了一个不大不小的Import库,而Masm没有带,但Masm在代码的优化上面好象比Tasm做得好,但它却不带Import库。看来使用哪一种编译器 还是比较难选择的,但Steve Hutchesson给了我们一个答案,他为Masm建立了一个很全的Import库,基本上包括了Windows绝大部分的Api函数,这些库、 include文件和其他工具还有Masm6.14版本一起做成了一个 Masm32编译器 -- Masm32V5。这样一来,我们用汇编编程就象用C一样方便。 三、Masm32的环境设置 在Win32编程中,由于Windows有很多的数据结构和定义,这些都放在include文件中,还有连接时要用到Import库(通俗的讲就是Windows提供的DLL文件中的函数列表,也就是告诉程序到哪里去调用API函数),这些都放在include 和lib目录中。我们在编译时要指定以下的系统环境: set include=\Masm32v5\Include 这样编译器就会到正确的路径中去找 include 文件和 lib 文件。你可以自己在 autoexec.bat 文件中加上以上语句,为了产生Windows的PE格式的执行文件,在编译和连接中要指定相应的参数: 编译: Ml /c /coff 文件名.asm 为了不在每次编译时都要打这么多的参数,我们可以用 nmake 文件来代为执行,nmake 是代码维护程序,他会检查 .asm .obj .exe .res 等文件的时间,如果你更新了源程序,他会自动执行编译程序或连接程序产生相应的文件。你可以在文件名为 makefile 的文件中指定使用的编译器和连接程序以及相应的参数,下面是一个 makefile 文件的例子: NAME = Clock 文件告诉 nmake程序,程序名为 clock,产生 clock.exe 文件需要 clock.obj和 clock.res 文件,而产生 clock.res 文件需要 clock.rc 文件,产生 clock.obj 文件要用到 clock.asm 文件,至于是否需要执行 ml, link 和 rc,程序会根据文件的时间自动判断。 作者网站: |