第七章Win32汇编语言程序设计 Windows系统具有风格一致的华丽图形用户界面、丰富的 API函数、设备无关性、多任务等特点而广泛流行。 Win32汇编的功能 0支持汇编语言程序调用32位 Windows api函数的功能 e支持类似C语言的高级语法和运算符 用Win32汇编语言可以容易地写出 Windows窗口应用程序。 在win32汇编环境下编写 Windows应用程序,可以充分利 用 Windows的高级特性,开发性能更高的应用软件和动态链 接库,而且可以从深层次理解 Windows运行机制和 Windows应 用程序的设计思路及方法。 7.1Win32汇编语言程序设计基础 在Win32环境下,应用程序可以寻址4GB空间。 next
第七章 Win32汇编语言程序设计 Windows系统具有风格一致的华丽图形用户界面、丰富的 API函数、设备无关性、多任务等特点而广泛流行。 Win32汇编的功能: 支持汇编语言程序调用32位Windows API函数的功能 支持类似C语言的高级语法和运算符 7.1 Win32汇编语言程序设计基础 在Win32环境下,应用程序可以寻址4GB空间。 用Win32汇编语言可以容易地写出Windows窗口应用程序。 在Win32汇编环境下编写Windows应用程序,可以充分利 用Windows的高级特性,开发性能更高的应用软件和动态链 接库,而且可以从深层次理解Windows运行机制和Windows应 用程序的设计思路及方法。 next
32位处理器寄存器结构: AH EAX BHBL EBX数据寄存器 CH CL ECX DH DL EDX 代码段寄存器 DS 数据段寄存器 堆栈段寄存器 附加段寄存器(并新增FS和GS) 0 SP ESP堆栈指针寄存器 BP EBP基址指针寄存器 ESI源变址寄存器 DI ED目的变址寄存器 IF EIP指令指针寄存器 FLAG EFLAG程序状态字寄存器 返回
EAX EBX ECX EDX 数据寄存器 FLAG AH BH CH DH AL BL CL DL SP BP SI DI IP CS DS SS ES 代码段寄存器 数据段寄存器 堆栈段寄存器 附加段寄存器(并新增FS和GS) ESP 堆栈指针寄存器 EBP 基址指针寄存器 ESI 源变址寄存器 EDI 目的变址寄存器 EIP 指令指针寄存器 EFLAG 程序状态字寄存器 31 15 0 16 0 31 15 0 31 15 0 32位处理器寄存器结构: 返回
个完整的Win32汇编语言源程序结构如下所示: 386 指定处理器指令集 mode flat. stdcall ;模式定义 option casemap. none;指定汇编选项 若干条 include语句>;包含AP函数和动态链接库头文件 stack 堆栈段大小] 定义堆栈段 d lata 数据段(定义初始化变量) <初始化变量定义 data? 数据段(定义未初始化变量) <未初始化的变量定义 const 定义常量段 常量定义 code 定义代码段 <开始标号> <若千语句> end开始标号 源程序结束
一个完整的Win32汇编语言源程序结构如下所示: .386 ;指定处理器指令集 .model flat, stdcall ;模式定义 option casemap:none ;指定汇编选项 <若干条include 语句> ;包含API函数和动态链接库头文件 .stack [堆栈段大小] ;定义堆栈段 .data ;数据段(定义初始化变量) <初始化变量定义> .data? ;数据段(定义未初始化变量) <未初始化的变量定义> .const ;定义常量段 <常量定义> .code ;定义代码段 <开始标号> <若干语句> end 开始标号 ;源程序结束
例7-1写一个经典的Win32 Hello程序。一个最简单的Win32汇 编语言源程序例子,说明Win32汇编语言源程序的框架结构。 386 ;指定处理器指令集 mode flat stdcall 模式定义 option casemap. none;指定汇编选项,区分大小写 include windows.inc 包含头文件和动态连接库 include user32. inc includelib user 32.lib example of hello x include kernel32 inc includelib kernel32.lib 你好!"in32世界! stack 100 data 确定 sztitle db example of hello.0 szgreet db′你好!Win32世界!’,0 code start: invoke Message Box, NULL, addr szgreet, addr sztitle MB ICONINFORMatiOn or MB OK Invoke ExitProcesS. NULL end start
例7-1 写一个经典的Win32 Hello程序。一个最简单的Win32汇 编语言源程序例子,说明Win32汇编语言源程序的框架结构。 .386 ;指定处理器指令集 .model flat, stdcall ;模式定义 option casemap :none ;指定汇编选项,区分大小写 include windows.inc ;包含头文件和动态连接库 include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib .stack 100 .data sztitle db ’ example of hello’ ,0 szgreet db ’你好!Win32世界!’ ,0 .code start : invoke MessageBox, NULL, addr szgreet, addr sztitle,\ MB_ICONINFORMATION or MB_OK invoke ExitProcess, NULL end start next
model flat 定义了 model flat平展模式后,MASM将自动产生下面 的语句,指定各段寄存器与段的关系 ASSUME cS: flat, ds: flat, ss: flat, es: falt, fs error, gs: error 源程序结构中的分段不再是DOS汇编中的段定义概念,而 是逐段连续分配各段地址空间,上一段结束就是下一段的开 始 Wwin32环境汇编语言编程接口就建立在Win32API基础上。 Win32API的核心是3个动态链接库(d): (1)kernel32. dll 提供系统服务功能,包括内存管理、任务管理和动态链接等。 (2)user 32. dll 提供用户接口服务功能,包括创建窗口和传递消息等 (3)gdi32. dll 提供图形设备接口,实现文本及图形的显示操作。返回
.model flat 定义了.model flat 平展模式后,MASM将自动产生下面 的语句,指定各段寄存器与段的关系: ASSUME cs:flat,ds:flat,ss:flat,es:falt, fs:error, gs:error Win32环境汇编语言编程接口就建立在Win32 API基础上。 Win32 API的核心是3个动态链接库(dll): (1)kernel32.dll 提供系统服务功能,包括内存管理、任务管理和动态链接等。 (2)user32.dll 提供用户接口服务功能,包括创建窗口和传递消息等。 (3)gdi32.dll 提供图形设备接口,实现文本及图形的显示操作。 返回 源程序结构中的分段不再是DOS汇编中的段定义概念,而 是逐段连续分配各段地址空间,上一段结束就是下一段的开 始