
本书结合完整的程序实例讲解Windows API函数的使用方法,程序中加有很多汉字注释,这样读起来更舒服,更能使读者有整体概念,并且学了就会用。书中每个程序都给出运行结果,这样有利于理解程序。学完本书后,会了解Windows操作系统中的一些奥秘。
本书内容包括Windows 汇编语言程序设计基础知识,文件管理,直接访问硬盘,内存管理和命令行参数,Windows图形界面编程,时钟中断编程,图形操作,窗口和键盘输入,动态链接库程序。
本书对已学过DOS汇编语言,并想过渡到Windows汇编语言的读者来说是一本好书。
前 言
一提起汇编语言,人们的感觉就是麻烦加难学。其实,Windows环境下的汇编语言与高级语言已非常接近,且省去了高级语言中的条条框框,编译、链接及程序排错更方便。汇编语言更接近操作系统,在汇编语言中使用系统函数更方便,学习Windows汇编语言更能了解操作系统的运行细节,而且用Windows汇编语言同样可以开发大型应用软件。
本书的读者对象是学过DOS汇编语言的人。本书不再讲解汇编语言基本语法(仅讲解一些高级语法),而是给出一个个完整的程序例子,让用户在轻松的环境下掌握书中的内容。Windows提供的API函数非常多,本书不求多,只求懂一些常用方法。
一个完整的程序实例胜过一大篇文字说明,正因为如此,作者将调试通过的程序汇编成册供大家共享。为了结合程序理解Windows API函数的使用方法,程序中加有很多汉字注释,这种在程序中加注释的方法,读起来更舒服,更能使读者有整体概念,使读者学了就会用。书中每个程序都给出运行结果,这样有利于读者理解程序。
如何从DOS环境下的汇编语言编程转到Windows环境下的汇编语言编程,是一个急待解决的问题。目前,这方面的书比较少。Windows汇编语言的书不太好写,原因是Windows图形界面下的程序都比较长。本书尽量选择一些小程序。
由于Windows操作系统提供的API函数很多,用户在阅读程序时要不断翻阅或查找很多资料,这显得不太方便。为此,本书在程序中使用更多的注释。通过一个个小而完整的程序,边读边上机调试,以加深对各类API函数的理解。
为了便于初学者循序渐进地学习,书中程序从小到大,注释从多到少(因为程序中有很多东西是可以重复引用的)。特别提醒初学者,在学习图形界面编程时,不要被第一个长程序吓倒,因为程序中的大部分内容是图形界面程序的构架,是可以重复使用的。
Windows 环境下有控制台编程和图形界面编程之分,控制台编程是面向过程的编程,与DOS环境下的编程类似。图形界面编程是面向对象的编程,初学者有一定的难度。本书从控制台编程开始,因为它与 DOS 环境下的汇编语言编程相似,容易让初学者入门。
对已学过DOS汇编语言,并想过渡到Windows汇编语言的读者来说,本书是一本 好书。
书中第1章为Windows 汇编语言程序设计基础知识,第2章为文件管理,第3章为直接访问硬盘,第4章为内存管理和命令行参数,第5章为Windows图形界面编程,第6章为时钟中断编程,第7章为图形操作,第8章为窗口和键盘输入,第9章为动态链接库 程序。
书中所有程序都能在清华大学出版社的网站(www.tup.com.cn)上找到,下载后每个文件夹下都有编译链接批命令文件mlexe.bat和编译链接所需要的所有资源。读者计算机只要装有VC 6.0,并配好编译链接环境变量(具体配置方法见书中有关章节),就可将书中源代码编译链接成可执行程序(下载资料中有可执行程序)。
为了方便读者,下载资料中的MASM32文件夹下包含书中所有的头文件(.inc)和库文件(.lib),用户只要将其复制到C:\就可以使用。
编 者
2008年12月
??
??
??
??
Windows汇编语言程序案例解析
WINDOWS 汇编语言程序实例解析
目 录
第1章 Windows汇编语言程序设计基础 1
1.1 第一个完整的Windows汇编语言程序 1
1.2 编译、链接和运行 2
1.2.1 创建编译链接环境 2
1.2.2 编译链接和运行 2
1.2.3 建立编译链接批命令文件 3
1.3 将Windows汇编语言程序反汇编后的程序原形 3
1.4 invoke伪指令的使用格式、变量及数据段data和data?的区别 4
1.4.1 invoke伪指令的使用格式 4
1.4.2 变量 5
1.4.3 数据段data和data?的区别 7
1.4.4 高级语法while-endw的使用 8
1.4.5 高级语法repeat-until的使用 9
1.4.6 高级语法if-elseif-endif的使用 11
1.4.7 条件运算符 12
1.4.8 高级语法 continue的使用 14
1.4.9 高级语法break if的使用 15
1.4.10 结构体 17
1.4.11 语句的不同书写方法 20
1.5 控制台输入和输出 21
1.5.1 在屏幕上显示一个字符串 21
1.5.2 给输出字符加上背景和前景颜色 22
1.5.3 用 @@ 作为程序中的标号 24
1.5.4 用MessageBox返回Y/N 25
1.5.5 按钮的等值定义 27
1.5.6 子程序的编写格式和调用方法 27
1.5.7 自编子程序应用示例 28
1.5.8 获取系统启动以来所经过的毫秒数 30
1.5.9 在一个盘区搜索由命令行指定的文件 32
1.5.10 控制台输入输出函数 36
1.5.11 搜索指定下的文件 39
第2章 文件管理 42
2.1 将文本写入文件 42
2.2 用WriteFile将字符串写入文件(显示器) 43
2.3 读文件并显示 44
2.4 移动文件指针 46
2.5 添加文件 48
2.6 测试文件的大小 50
2.7 将磁盘文件映像到内存 52
第3章 直接访问硬盘 55
3.1 读硬盘引导扇区 56
3.2 读硬盘物理第2扇区 59
3.3 将文件中的信息写入硬盘引导扇区 62
3.4 获取硬盘参数 64
3.5 读硬盘引导扇区 68
第4章 内存管理和命令行参数 73
4.1 内存管理 73
4.1.1 申请内存 73
4.1.2 获取并显示当前内存使用情况 75
4.2 命令行参数 77
4.2.1 命令行参数 77
4.2.2 获取命令行参数 79
4.2.3 将命令行参数搬入缓冲区 81
第5章 Windows图形界面编程 83
5.1 图形界面程序 83
5.1.1 创建窗口并接收消息 83
5.1.2 创建一个主窗口并在主窗口中显示一行文本 89
5.1.3 一个简单的资源文件的使用示例 93
5.1.4 加载并显示对话框 99
5.1.5 给窗口画上外框 101
5.1.6 用压栈的方法调用过程 105
5.1.7 窗口文件名列表 111
5.1.8 读写PE文件的代码段 118
5.1.9 显示位图和图标 120
5.1.10 鼠标抬起和按下时显示不同位图和图标 127
5.1.11 在窗口中显示子窗口 137
5.2 菜单资源 144
5.2.1 菜单资源的使用方法 144
5.2.2 标题栏图标和光标的使用方法 152
5.2.3 对话框的使用方法 158
5.2.4 对话框子窗口控制 161
5.2.5 绘制工具栏和状态栏 170
5.2.6 绘制工具栏和状态栏并打开文件 183
5.2.7 文本编辑器 206
5.2.8 自动显示工具栏图标的提示 243
第6章 时钟中断 254
6.1 秒表计时器 255
6.2 获取当前系统时间(本地时间) 259
6.3 获取当前格林尼治标准时间 262
6.4 获取Windows启动以来的时间 263
6.5 每经过100毫秒在屏幕上显示一个点 265
6.6 秒表程序 266
第7章 图形操作 269
7.1 图形设备接口 269
7.2 图形设备环境 269
7.3 将一个窗口的像素复制到另一个窗口中 270
7.4 GDI对象使用方法 275
7.5 用明暗线画外框 287
7.6 给窗口和按钮画有阴影的外框 297
7.7 模仿Windows资源管理器中的操作 305
7.8 用画笔和刷子绘图 317
7.9 选择颜色 324
7.10 显示位图 330
7.11 把位图作为按钮 335
7.12 位图移动 341
7.13 根据鼠标位置和状态显示不同图形 348
第8章 窗口和键盘输入 355
8.1 为编辑窗口设置窗口过程 355
8.2 在窗口中列表信息串 363
8.3 文件压缩和文件解压 368
8.4 用入栈的方法写程序(1) 388
8.5 用IDA反汇编出的程序(1) 393
8.6 用入栈的方法写程序(2) 397
8.7 用IDA反汇编出的程序(2) 404
第9章 动态链接库程序 410
9.1 如何编写动态链接库程序 410
9.2 如何在用户程序中调用动态链接库中的函数 412
9.3 用装载函数装载动态链接库 418
9.4 扩展调用动态链接库 423
??
??
??
??
Windows汇编语言程序案例解析