`
yingyingol
  • 浏览: 747753 次
文章分类
社区版块
存档分类
最新评论

Win32汇编语言程序(3)

 
阅读更多
六、资源在Win32汇编语言程序中的使用

资源在Win32应用程序中是很重要的,笔者编写了一个使用资源的C语言程序,该程序实现了菜单和一个“About”对话框,程序如下:
源程序(GENERIC.C):


资源源文件(GENERIC.RC,使用Visual C++ 6.0建立):



汇编连接本程序的命令如下:


运行汇编连接后生成的GENERIC.EXE文件,屏幕上将显示出一个带有菜单的窗口,窗口的标题是“Generic”,菜单有两个主菜单项,分别是“File”和“Help”,选择“File”菜单项下的“Exit”菜单项可以退出程序,选择“Help”菜单项下的“About”菜单项可以显示“About”对话框。本程序与SIMPLE.C程序很相似,Win32汇编语言程序中使用资源的方法也与C语言程序没有很大的差别,都可以用资源编辑工具生成资源源文件和资源头文件,然后使用资源编译器编译资源源文件,将生成的资源文件(RES文件)与汇编器生成的目标文件和引入库文件连接在一起就可以了(资源头文件需要移植到汇编语言上,建立一个资源包含文件)。
C语言程序中的MAKEINTRESOURCE宏的实质是将资源标识符数值的高位字(不用)清零,然后强行转换成字符指针,Win32汇编语言程序中可以将资源标识符数值与0000FFFFH作AND运算。

七、控制台Win32汇编语言程序

学习过Win32SDK编程的读者一定知道控制台Win32应用程序,控制台Win32应用程序运行在控制台(MS-DOS窗口)下,与DOS下的C语言程序十分相似,程序入口点是main函数,使用标准C语言I/O函数进行I/O,也可以调用API。实际上控制台Win32应用程序与普通Win32应用程序没有本质上的区别,标准C语言I/O函数实际上还是调用了API,在控制台上进行I/O。控制台Win32汇编语言程序与C语言程序有一定的差别,需要获取控制台I/O句柄,然后使用控制台I/O句柄进行I/O(与文件句柄I/O相似),笔者以MASM 6.11中自带的控制台Win32汇编语言程序实例(HELLO.ASM)为例,程序如下:



汇编连接本程序的命令如下:


连接命令中/subsystem:console选项表示连接器生成控制台Win32应用程序。在MS-DOS窗口(控制台)下运行汇编连接后生成的HELLO.EXE文件,将会像MS-DOS程序一样显示出“Hello, world.”字符串。本程序调用了GetStdHandle函数获取标准控制台输出设备句柄,然后调用WriteFile函数向标准控制台输出设备句柄写字符串,完成控制台字符串输出,最后调用了ExitProcess函数终止程序的执行。

八、结束语

本教程读者阅读到这里,可能会莞尔一笑,原来Win32汇编语言也不过就是这么回事呀,确实,MASM 6.0以上版本的汇编器提供的结构化汇编语言伪指令大大简化了Win32汇编语言编程。汇编语言确实比较复杂,但是Win32汇编语言对某些特殊方面有高级语言不可比拟的优点,如果你正在想编程清除Win32病毒(例如CIH病毒),或者你正在编写对速度要求较高的程序(例如大量计算的程序),不妨试试Win32汇编语言——或许正能够解决你的燃眉之急。本教程还简单介绍了Win32应用程序的执行机制,相信会对你探索Win32深层有一定的帮助。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics