微机原理win.ppt_第1页
微机原理win.ppt_第2页
微机原理win.ppt_第3页
微机原理win.ppt_第4页
微机原理win.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 汇编语言Windows应用程序设计 一 Windows应用程序概述二 Win32API及其调用方法三 Windows应用程序的基本结构四 Windows应用程序设计实例 2 一 Windows应用程序概述 Windows应用程序是这样一种应用程序 它是特意为在Windows环境中运行而编写 并且使用WindowsAPI来完成其任务的 Windows应用程序可以用各种程序设计语言开发 VisualC C Delphi VisualBasic 汇编语言同样可以用于开发Windows应用程序以窗口为核心的用户界面 以事件驱动为动力的程序运行机制 以及将程序代码与用户界面分开处理的程序开发手段 构成了Windows应用程序特有的设计模式 3 一 Windows应用程序概述 窗口 窗口是系统显示器上的一个矩形区域 应用程序使用窗口来显示输出或接收用户的输入 窗口可以保证用户能够同时访问大多数应用程序 应用程序只有通过窗口才能访问系统显示器 并且通过使用窗口与其他应用程序共享系统显示器 4 标题栏 工具栏 状态栏 滚动条 最小化按钮 最大化按钮 关闭按钮 客户区 窗口边框 菜单栏 窗口 一 Windows应用程序概述 5 事件驱动 Windows应用程序在运行时不断获得任何可能的消息 进行判断 然后再做适当的处理 消息可以分为由硬件设备产生的输入消息和来自Windows系统的窗口管理消息 Windows应用程序的运行需要依靠外部发生的事件来驱动 描述事件发生的信息称为消息 message 例如 当用户按下键盘的某个键时 系统就会产生一条特定的消息 标识键盘被按下事件的发生 一 Windows应用程序概述 6 事件驱动 硬件输入 系统消息队列 应用程序队列 1 应用程序队列 n Windows WinMain 函数 消息循环 窗口 函数 1 窗口 函数 m 应用程序 1 WinMain 函数 消息循环 窗口 函数 1 窗口 函数 m 应用程序 n 一 Windows应用程序概述 7 Windows应用程序的开发模式 Windows应用程序分为程序代码和用户界面资源两部分 两部分通过连接器组合为一个完整的EXE文件将用户界面资源一类的静态数据与程序代码相分离有如下一些优点 减少内存要求 划清了程序员与用户界面设计人员的任务分工 用户界面风格的变化可以不必修改程序代码或只需进行少量的修改 一 Windows应用程序概述 8 EXE 链接器 LIB RC ASM DLG BMP CUR ICO FON RES OBJ 资源编译器 汇编器 字体编辑器 图象编辑器 对话框编辑器 工具 文本文件 二进制文件 Windows应用程序的开发模式 一 Windows应用程序概述 9 汇编语言源程序的框架 386 MODELFLAT STDCALL DATA initializeddata DATA uninitializeddata CONST constants CODE codeEND 设置汇编程序使用的指令集 386 设置汇编程序使用的内存模式和参数传递规则 MODELFLAT STDCALL DATA DATA CONST CODE DATA包含已初始化的数据 DATA 包含未初始化的数据 CONST包含常数声明 CODE包含程序代码 END 程序代码 一 Windows应用程序概述 10 C cdecl 调用规则和PASCAL调用规则 foo intfirst param intsecond param intthird param 采用cdecl调用规则的汇编代码为push third param 第三个参数压栈push second param 第二个参数压栈push first param 第一个参数压栈callfooaddsp 12 主调函数对堆栈进行平衡 PASCAL调用规则与C调用规则正相反 C调用规则从右向左传递参数 主调函数负责清栈 汇编语言源程序的框架 一 Windows应用程序概述 11 STDCALLl调用规则 从右向左传递参数 被调函数负责对堆栈进行平衡 变长参数问题 intwsprintf LPTSTRlpOut LPCTSTRlpFmt 必须采用cdecl调用规则 汇编语言源程序的框架 一 Windows应用程序概述 12 Win32API API ApplicationProgrammingInterface应用程序编程接口 Win32API相当于DOS系统功能 kernel32 dll操作系统核心功能服务user32 dll主要用来控制用户界面gdi32 dll主要负责图形操作 二 Win32API及其调用方法 13 API函数的定义 intMessageBox HWNDhWnd handleofownerwindowLPCTSTRlpText addressoftextinmessageboxLPCTSTRlpCaption addressoftitleofmessageboxUINTuType styleofmessagebox MicrosoftWin32应用程序接口参考手册 上 下 清华大学出版社win32 hlp 电子版Win32程序员参考手册 hlp格式 二 Win32API及其调用方法 14 API函数的调用 pushmb ok PUSHvalueforuTypepushlpCaption PUSHPointertoCaptionpushlpText PUSHPointertoTextpushhWnd PUSHMasterhandlecallMessageBoxA CALLMessageBoxA 1 常规方法 调用Win32API函数时 函数名必须区分大小写 将MessageBoxA写成messageboxa是错误的 二 Win32API及其调用方法 15 API函数的调用 2 PROTO与INVOKE伪指令 MASM6 x MessageBoxAPROTOhWnd DWORD lpText DWORD lpCaption DWORD uType DWORD位置在程序的开始处 或在包含文件中 用INCLUDE伪指令包含到当前文件中 INVOKEMessageBoxA NULL lpMsgBoxText lpMsgBoxCaption MB OK 二 Win32API及其调用方法 16 API函数的返回值 函数调用后的返回值保存在EAX寄存器中 涉及字符串的API函数 MessageBoxAANSI 8位 Windows9x MessageBoxWUnicode 16位 WindowsNT 2000 二 Win32API及其调用方法 17 示例 setoptionsfortheassembler 386 modelflat stdcall declarationofallusedAPI functionsExitProcessPROTO DWORDMessageBoxAPROTO DWORD DWORD DWORD DWORD herebeginsour datasection dataTextdb Hello World 0 Text terminatedwith 0 Captiondb Hello 0 Captionstring 0 terminated 二 Win32API及其调用方法 18 herebeginsour constsection constNULLequ0MB OKequ0 herewestartwithourcode codeStart INVOKEMessageBoxA NULL ADDRText ADDRCaption MB OKINVOKEExitProcess NULLendStart 二 Win32API及其调用方法 19 汇编与连接 ml c coff Cphello asm c指示MASM只进行汇编 不调用连接程序 coff指示MASM以COFF格式创建 obj文件 Cp指示MASM保持用户标识符的大小写 link32 SUBSYSTEM WINDOWS LIBPATH c masm611 libhello objkernel32 libuser32 lib SUBSYSTEM WINDOWS通知Link可执行文件是Windows应用程序 LIBPATH c masm611 lib指示导入库的路径 二 Win32API及其调用方法 20 D masmwin32 ml c coff Cphello asm Microsoft R MacroAssemblerVersion6 13 7299Copyright C MicrosoftCorp1981 1997 Allrightsreserved Assembling hello asmD masmwin32 link32 SUBSYSTEM WINDOWS LIBPATH c masm611 libhello objkernel32 libuser32 lib Microsoft R IncrementalLinkerVersion6 00 8168Copyright C MicrosoftCorp1992 1998 Allrightsreserved D masmwin32 hello D masmwin32 二 Win32API及其调用方法 21 包含文件 可以将常用的函数原型定义存放在一个文件中 在编写程序时用INCLUDE语句将其包含进来 在本课程提供的MasmforWindows开发工具中提供了四个包含文件 user32 inc user32 dll中函数的原型定义kernel32 inc kernel32 dll中函数的原型定义gdi32 inc gdi32 dll中函数的原型定义windows inc 常数和常用数据结构的定义 利用这些包含文件 可以使汇编程序的源代码得到简化 二 Win32API及其调用方法 22 386 modelflat stdcallincludewindows incincludeuser32 incincludekernel32 incincludegdi32 inc dataTextdb Hello World 0 Text terminatedwith 0 Captiondb Hello 0 Captionstring 0 terminated codeStart INVOKEMessageBoxA NULL ADDRText ADDRCaption MB OKINVOKEExitProcess NULLendStart 二 Win32API及其调用方法 23 Windows应用程序具有相对固定的基本结构 入口函数和窗口函数构成了Windows应用程序的基本框架 三 Windows应用程序的基本结构 入口函数名通常为WinMain 但是可以用其他任何函数名窗口函数名通常为WndProc 但是可以用其他任何函数名 24 入口函数 三 Windows应用程序的基本结构 hInst应用程序当前实例句柄hPrevInst对Windows应用程序为NULLCmdLine命令行CmdShow第一次运行时窗口的状态 人口函数有四个参数 函数定义为 WinMainprochInst HINSTANCE hPrevInst HINSTANCE CmdLine LPSTR CmdShow SDWORD 函数体WinMainendp 句柄是Windows用来标识被应用程序建立或使用的对象的一个唯一的整数值 Windows使用各种各样的句柄来标识诸如应用程序实例 窗口 图标 菜单 文件等对象 25 WinMain函数主要由四部分组成 注册窗口类创建窗口显示窗口建立消息循环 三 Windows应用程序的基本结构 入口函数 26 三 Windows应用程序的基本结构 入口函数 注册窗口类 窗口类是用于定义窗口属性的模板 这些属性包括窗口的菜单 背景颜色 光标形状等 窗口类还规定了窗口函数 它处理本类窗口的消息 注册窗口类的方法是先用有关该窗口类的信息填充WNDCLASSEX结构 然后用指向WNDCLASSEX结构的指针作为参数调用RegisterClass函数 27 WNDCLASSEX结构的定义在windows inc文件中 三 Windows应用程序的基本结构 入口函数 注册窗口类 WNDCLASSEXSTRUCTcbSizeDWORD WNDCLASSEX结构的大小styleDWORD 窗口风格lpfnWndProcDWORD 窗口函数的地址cbClsExtraDWORD 额外分配给窗口类的字节数 通常为NULLcbWndExtraDWORD 额外分配给窗口实例的字节数 通常为NULLhInstanceDWORD 应用程序实例句柄hIconDWORD 窗口的图标 通过调用LoadIcon获取hCursorDWORD 窗口使用的光标 通过调用LoadCursor获取hbrBackgroundDWORD 用来着色窗口背景的图刷lpszMenuNameDWORD 菜单资源名的地址lpszClassNameDWORD 窗口类名的地址hIconSmDWORD 窗口的小图标WNDCLASSEXENDS 28 三 Windows应用程序的基本结构 入口函数 注册窗口类 LOCALwc WNDCLASSEXmovwc cbSize SIZEOFWNDCLASSEXmovwc style CS HREDRAWorCS VREDRAW invokeRegisterClassEx addrwc LOCALwc WNDCLASSEX为变量wc分配内存CS HREDRAWorCS VREDRAW表示每当窗口的横向或纵向大小改变时 窗口实例将被重绘 29 LoadIcon函数加载一个图标 函数的说明为 HICONLoadIcon HINSTANCEhInstance LPCTSTRlpIconName hInstance为图标资源所在的模块句柄 如为NULL则使用系统预定义图标 lpIconName为图标资源名或系统预定义图标标识名 LoadCursor函数加载一个光标 函数的说明为 HICONLoadIcon HINSTANCEhInstance LPCTSTRlpIconName hInstance为光标资源所在的模块句柄 如为NULL则使用系统预定义光标 lpIconName为光标资源名或系统预定义光标标识名 三 Windows应用程序的基本结构 入口函数 注册窗口类 30 三 Windows应用程序的基本结构 入口函数 创建窗口 调用CreateWindow函数可以创建窗口 函数的原型为 HWNDWINAPICreateWindowExA DWORDdwExStyle LPCSTRlpClassName LPCSTRlpWindowName DWORDdwStyle intX intY intnWidth intnHeight HWNDhWndParent HMENUhMenu HINSTANCEhInstance LPVOIDlpParam 附加窗口风格 通常取NULL已注册的窗口类名窗口名字符串的地址窗口类的风格窗口左上角x坐标 通常取CW USEDEFAULT窗口左上角y坐标 通常取CW USEDEFAULT窗口宽度 通常取CW USEDEFAULT窗口高度 通常取CW USEDEFAULT父窗口句柄菜单句柄应用程序实例句柄传递给窗口的参数值的地址 31 三 Windows应用程序的基本结构 入口函数 显示窗口 CreateWindow函数只是创建窗口 但不能自动显示窗口 窗口的显示由ShowWindow和UpdateWindow函数实现 ShowWindow在屏幕上显示窗口 函数的原型为 BOOLShowWindow HWNDhWnd intnCmdShow hWnd为CreateWindow函数返回的窗口句柄 nCmdShow为窗口显示方式 该参数的取值从WinMain函数被调用时的参数中获取 UpdateWindow更新窗口的客户区 函数的原型为 BOOLUpdateWindow HWNDhWnd hWnd为CreateWindow函数返回的窗口句柄 32 LOCALhwnd HWND INVOKECreateWindowEx NULL ADDRClassName ADDRAppName WS OVERLAPPEDWINDOW CW USEDEFAULT CW USEDEFAULT CW USEDEFAULT CW USEDEFAULT NULL NULL hInst NULLmovhwnd eaxINVOKEShowWindow hwnd SW SHOWNORMALINVOKEUpdateWindow hwnd WS OVERLAPPEDWINDOW表示普通的重叠式窗口 三 Windows应用程序的基本结构 入口函数 显示窗口 33 Windows并不直接把输入消息发送给应用程序 而是将其送入应用程序的消息队列之中 此外 Windows和其他应用程序也可以将消息指派到应用程序队列中 应用程序必须读取应用程序队列 检索消息并将它们发送出去 以便适当的窗口函数能够处理它们 负责这一任务的便是消息循环 三 Windows应用程序的基本结构 入口函数 消息循环 34 三 Windows应用程序的基本结构 入口函数 消息循环 LOCALmsg MSG WHILETRUEinvokeGetMessage ADDRmsg NULL 0 0 BREAK IF eax invokeDispatchMessage ADDRmsg ENDW 35 GetMessage函数从应用程序队列检索消息 并把消息复制到消息结构Msg中 该函数的原型为 BOOLGetMessage LPMSGlpMsg HWNDhWnd UINTwMsgFilterMin UINTwMsgFilterMax 三 Windows应用程序的基本结构 入口函数 消息循环 GetMessage函数检索到WM QUIT消息时返回0 检索到其他消息均返回非0值 36 三 Windows应用程序的基本结构 入口函数 消息循环 DispatchMessage函数负责将消息队列中的消息发送到相应的窗口函数中进行进一步的处理 该函数的原型为 BOOLDispatchMessage CONSTMSG lpMsg 参数LpMsg为指向记录消息的结构变量的指针 37 消息由MSG结构来描述 在windows inc文件中该结构定义如下 MSGSTRUCThwndDWORD 用以检索消息的窗口句柄messageDWORD 消息值wParamDWORD lParamDWORD 包含消息的附加信息timeDWORD 指定消息送至队列的时间ptPOINT 消息发送时光标的位置MSGENDS 三 Windows应用程序的基本结构 入口函数 消息循环 38 窗口函数 窗口函数也称为窗口过程 负责从Windows接收消息 并根据这些消息完成特定的操作 窗口函数是一个回调函数 由Windows系统调用 应用程序并不会直接调用它的窗口函数 窗口函数的主体是由一系列 IF语句组成的消息处理程序段 三 Windows应用程序的基本结构 39 窗口函数 三 Windows应用程序的基本结构 窗口函数有四个参数 函数定义为 WndProcprochWnd HWND uMsg UINT wParam WPARAM lParam LPARAM 函数体WndProcendp hWnd为窗口句柄uMsg为消息值wParam和lParam包含消息的附加信息 40 窗口函数 三 Windows应用程序的基本结构 IFuMsg WM DESTROYinvokePostQuitMessage NULL ELSEIFuMsg xxxx1 ELSEIFuMsg xxxx2 ELSEinvokeDefWindowProc hWnd uMsg wParam lParamret ENDIFret 如果窗口函数不处理某些消息 则必须把它们传给DefWindowProc函数 41 case1 case2 case3 Default Windows系统 应用程序 WinMain 消息 循环 WndProc DispatchMessage DefWindowProc 检索到 的消息 GetMessage 排队消息 WM KEYDOWN WM KEYUP WM MOUSEMOVE WM LBUTTONDOWN WM QUIT 非排队消息 WM CREATE WM DESTROY WM SIZE WM PAINT 应用程序的 消息队列 回调 窗口函数 三 Windows应用程序的基本结构 42 当用户关闭窗口时 Windows系统将把WM DESTROY消息发送给该窗口的窗口函数 在这种情况下 窗口函数应该使用PostQuitMessage函数将WM QUIT消息发送到应用程序队列中 这样可以使GetMessage函数检索到WM QUIT消息 从而结束消息循环 退出应用程序 窗口函数 三 Windows应用程序的基本结构 IFuMsg WM DESTROYinvokePostQuitMessage NULL 43 窗口函数 三 Windows应用程序的基本结构 44 四 Windows应用程序设计实例 45 四 Windows应用程序设计实例 资源文件 defineIDM HELLO1 defineIDM EXIT2FirstMenuMENU POPUP Menu MENUITEM Sayhello IDM HELLOMENUITEMSEPARATORMENUITEM E xit IDM EXIT 46 四 Windows应用程序设计实例 程序代码文件 HMODULEGetModuleHandle LPCTSTRlpModuleName 返回当前程序实例句柄 LPTSTRGetCommandLine VOID 返回命令行字符串的地址 47 四 Windows应用程序设计实例 程序代码文件 菜单响应的消息值为WM COMMAND 对菜单命令进行处理的代码在 IF分支的uMsg WM COMM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论