版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、4.2 Win32汇编语言程序设计,一、Win32汇编语言程序的结构 二、Win32 API的调用,一、Win32汇编语言程序的结构,.386 .MODEL FLAT, STDCALL .DATA .initialized data .DATA? .uninitialized data .CONST .constants .CODE .code END ,设置汇编程序使用的指令集,.386,设置汇编程序使用的内存 模式和参数传递规则,.MODEL FLAT, STDCALL,.DATA .DATA? .CONST .CODE .,.DATA包含已初始化的数据 .DATA?包含未初始化的数据 .
2、CONST包含常数声明 .CODE 包含程序代码, END ,程序代码,C(cdecl)调用规则和PASCAL调用规则,foo(int first_param, int second_param, int third_param) 采用cdecl调用规则的汇编代码为 push third_param; 第三个参数压栈 push second_param; 第二个参数压栈 push first_param; 第一个参数压栈 call foo add sp, 12; 主调函数对堆栈进行平衡,PASCAL调用规则与C调用规则正相反,C调用规则从右向左传递参数,主调函数负责清栈,Win32汇编语言程序
3、的结构,STDCALL调用规则,从右向左传递参数,被调函数负责对堆栈进行平衡,变长参数问题,int wsprintf( LPTSTR lpOut, LPCTSTR lpFmt, .),必须采用cdecl调用规则,Win32汇编语言程序的结构,二、Win32 API的调用,Win32 API,API=Application Programming Interface 应用程序编程接口,Win32 API相当于DOS系统功能,kernel32.dll 包含处理内存和进程管理的API函数 user32.dll 主要用来控制用户界面 gdi32.dll 主要负责图形操作,API函数的定义,int Me
4、ssageBox( HWND hWnd, / handle of owner window LPCTSTR lpText, / address of text in message box LPCTSTR lpCaption, / address of title of message box UINT uType / style of message box );,Microsoft Win32应用程序接口参考手册(上、下), 清华大学出版社 MSDN Library -Microsoft Visual Studio,Win32 API的调用,Win32 API的调用,API函数的调用,pu
5、sh mb_ok ;PUSH value for uType push lpCaption ;PUSH Pointer to Caption push lpText ;PUSH Pointer to Text push hWnd ;PUSH Masterhandle call MessageBoxA ;CALL MessageBoxA,1. 常规方法,调用Win32 API函数时,函数名必须区分大小写,将MessageBoxA写成messageboxa是错误的。,API函数的调用,2. PROTO与INVOKE伪指令(MASM6.x),MessageBoxA PROTO hWnd:DWORD,
6、 lpText:DWORD, lpCaption:DWORD, uType:DWORD 位置在程序的开始处,或在包含文件中,用INCLUDE伪指令 包含到当前文件中,INVOKE MessageBoxA, NULL, lpMsgBoxText, lpMsgBoxCaption, MB_OK PROTO负责建立过程原形,INVOKE负责调用过程。,Win32 API的调用,API函数的返回值,函数调用后的返回值保存在EAX寄存器中,涉及字符串的API函数,MessageBoxA ANSI(8位) Windows 9x,MessageBoxW Unicode(16位) Windows NT,Win
7、32 API的调用,示例,; set options for the assembler .386 .model flat, stdcall ; declaration of all used API-functions ExitProcess PROTO :DWORD MessageBoxA PROTO :DWORD, :DWORD, :DWORD, :DWORD ; here begins our .data section .data Textdb Hello, World!,0 ;Text, terminated with 0 Captiondb Hello,0;Caption str
8、ing, 0-terminated,Win32 API的调用,; here begins our .const section .const NULLequ 0 MB_OKequ 0 ; here we start with our code .code Start: INVOKE MessageBoxA, NULL, ADDR Text, ADDR Caption, MB_OK INVOKE ExitProcess, NULL end Start,Win32 API的调用,汇编与连接,ml /c /coff /Cp hello.asm,/c指示MASM只进行汇编,不调用连接程序; /coff
9、 指示MASM以COFF 格式创建.obj文件; /Cp指示MASM保持用户标识符的大小写。,link /SUBSYSTEM:WINDOWS /LIBPATH:f:masm32lib hello.obj kernel32.lib user32.lib,/SUBSYSTEM:WINDOWS通知Link可执行文件是Windows应用程序; /LIBPATH:c:masm611lib指示导入库的路径。,Win32 API的调用,D:masmwin32,ml /c /coff /Cp hello.asm,Microsoft (R) Macro Assembler Version 6.13.7299 C
10、opyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: hello.asm D:masmwin32,link32 /SUBSYSTEM:WINDOWS /LIBPATH:c:masm611lib hello.obj kernel32.lib user32.lib,Microsoft (R) Incremental Linker Version 6.00.8168 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. D:masmwin32,
11、hello,D:masmwin32,Win32 API的调用,包含文件,可以将常用的函数原型定义存放在一个文件中,在编写程序时用INCLUDE语句将其包含进来。,我们可以直接使用现成的包含文件,其中最常用的是user32.inc、kernel32.inc、gdi32.inc和windows.inc,,利用包含文件,可以使汇编程序的源代码得到简化。,Win32 API的调用,.386 .model flat, stdcall include windows.inc include user32.inc include kernel32.inc include gdi32.inc .data Textdb Hello, World!,0 ;Text, terminated with 0 Ca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1第五章-本体聚合1
- 2025年全科三基考试题库及答案
- 2025年内蒙古自治区通辽市中小学教师招聘考试试题及答案详解
- 苹果深加工项目可行性研究报告
- 夏季矿井水害治理培训课件
- 疑难死亡病例讨论制度
- 湖北省考勤管理制度
- 回忆总结群文阅读教学设计
- 消防安全线路隐患排查治理方案
- 学校食堂食品管理制度
- 2026秋季学期新教材译林版(三起)六年级上册英语Unit 1 Try your best 教案(3课时)
- 2026年秋季开学第一课:新时代青年使命
- 绵阳英才中学2025初一入学语文分班考试真题含答案
- 新二升三暑假英语26个字母每日一练过关练22天
- 2026秋西师大版小学数学五年级(新教材)上册教学计划附教学进度表
- 2026年高校行政管理岗招聘笔试典型试题及要点含答案
- 光伏施工方案范文模板
- 2026年时事政治考试题库及答案(100题)
- 2026智慧灯杆商业化模式评估及城市更新与基础设施REITs报告
- 2023-2024学年广西南宁二中高一(下)期末生物试卷
- 2026年广播电视天线工题库及参考答案详解【突破训练】
评论
0/150
提交评论