架设WIN32汇编程序的开发环境

 

笔者在学习Windows下的图形界面应用程序(GUI,Graphical User Interface)的时候碰到的第一个麻烦就是架设WIN32汇编程序的开发环境,在这里笔者愿意和大家分享这段经历。

笔者认为大家应该首先具备下列概念和文件:

  • 操作系统:首先大家应该具备Windows98以上操作系统,看起来这并不是什么难事
  • 文本编辑程序:你可以选择Windows自带的记事本,或者是Ultraedit,而笔者却独钟于VisualStudio
  • 应用程序编程接口(API, Application Programming Interface),它是一些类型、常量和函数的集合,它提供了直接通过编程操纵对象的途径
  • Win32平台软件开发包(Win32 Platform SDK),这一些用于创建Windows应用程序的工具软件、库文件、代码例程和帮助文档的集合。Microsoft提供Platform SDK的免费下载 http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
  • Microsoft汇编器(ML,它是Make.exe和Link.ext首字母的缩写),可以用它汇编并链接一个或多个汇编程序源文件,它的命令行参数选项可以在Microsoft MASM手册中查到。(遗憾的是该手册自1992年以后就没有再版过了,读者只能下载其电子版)
  • 资源文件,它是各种各样的元素集合,这些元素包括向用户提供信息的界面元素(如位图、图标或光标),含有应用程序所需数据的自定义资源,由安装 API 使用的版本资源,以及菜单和对话框资源。它为程序的逻辑界面与资源界面隔离提供了较好的实现。更多的信息读者可以参考MSDN: http://msdn.microsoft.com/zh-cn/library/zabda143(VS.80).aspx
  • 预定义头文件(RESOURCE.H):它提供了资源标示符的定义
  • 资源编译器:RC.EXE将编写的资源脚本文件(*.RC)编程成资源文件(*.RES,然后由CVTRES.EXE转换为OBJ文件

好了,现在我们开始架设WIN32汇编程序的开发环境

安装完成以后在Masm32文件夹下新建一个“MyDocument”文件夹,将下面代码放入其中

   
   
TITLE Demo.asm ; =============================================== ; Author: 狼の禅 ; Date: 23/07/2009 ; =============================================== .486 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\gdi32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\gdi32.lib ; ----------------------------------------------- WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD ; =============================================== .data hInstance dd 0 hWnd dd 0 szClassName db "Demo",0 szDisplayName db "My Demo",0 ; =============================================== .code start: invoke GetModuleHandle,0 mov hInstance,eax invoke WinMain,hInstance,0,0,SW_SHOWDEFAULT invoke ExitProcess,eax ; =============================================== WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD LOCAL wndclass:WNDCLASSEX LOCAL Msg:MSG mov wndclass.cbSize,sizeof WNDCLASSEX mov wndclass.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW mov wndclass.lpfnWndProc,OFFSET WndProc mov wndclass.cbClsExtra,0 mov wndclass.cbWndExtra,0 mov eax,hInst mov wndclass.hInstance,eax mov wndclass.hbrBackground,COLOR_WINDOW+1 mov wndclass.lpszMenuName,0 mov wndclass.lpszClassName,OFFSET szClassName invoke LoadIcon,hInst,NULL mov wndclass.hIcon,eax invoke LoadCursor,0,IDC_ARROW mov wndclass.hCursor,eax mov wndclass.hIconSm,0 invoke RegisterClassEx,ADDR wndclass invoke CreateWindowEx,WS_EX_OVERLAPPEDWINDOW, ADDR szClassName, ADDR szDisplayName, WS_OVERLAPPEDWINDOW, 200,50,500,300, 0,0, hInst,0 mov hWnd,eax invoke ShowWindow,hWnd,SW_SHOWNORMAL invoke UpdateWindow,hWnd MessageLoop: invoke GetMessage,ADDR Msg,0,0,0 cmp eax,0 je ExitProgram invoke TranslateMessage,ADDR Msg invoke DispatchMessage,ADDR Msg jmp MessageLoop ExitProgram: mov eax,Msg.wParam ret WinMain endp ; =============================================== WndProc proc hWin:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD .if uMsg == WM_DESTROY invoke PostQuitMessage,0 .else invoke DefWindowProc,hWin,uMsg,wParam,lParam ret .endif xor eax,eax ret WndProc endp ; =============================================== end start

在命令行程序中进入在bin目录下输入 ml /coff ..\MyDocument\demo.asm

显示如下

在bin文件夹中可以看到demo.obj和demo.exe文件生成,打开demo.exe文件显示如下,那么你的环境就已经配置成功了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值