第七章 Win32汇编语言程序设计
Windows系统具有风格一致的华丽图形用户界面、丰富的API函数、设备无关性、多任务等特点而广泛流行。
Win32汇编的功能:
支持汇编语言程序调用32位Windows API函数的功能
支持类似C语言的高级语法和运算符
Win32汇编语言程序设计基础
在Win32环境下,应用程序可以寻址4GB空间。
用Win32汇编语言可以容易地写出Windows窗口应用程序。
在Win32汇编环境下编写Windows应用程序,可以充分利用Windows的高级特性,开发性能更高的应用软件和动态链接库,而且可以从深层次理解Windows运行机制和Windows应用程序的设计思路及方法。
next
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 ;指定处理器指令集
.model flat, stdcall ;模式定义
option casemap:none ;指定汇编选项
<若干条include 语句> ;包含API函数和动态链接库头文件
.stack [堆栈段大小] ;定义堆栈段
.data ;数据段(定义初始化变量)
<初始化变量定义>
.data? ;数据段(定义未初始化变量)
<未初始化的变量定义>
.const ;定义常量段
<常量定义>
.code ;定义代码段
<开始标号>
<若干语句>
end 开始标号;源程序结束
例7-1 写一个经典的Win32 Hello程序。一个最简单的Win32汇编语言源程序例子,说明Win32汇编语言源程序的框架结构。
.386 ;指定处理器指令集
.model flat, stdcall ;模式定义
option casemap :none ;指定汇编选项, 区分大小写
include ;包含头文件和动态连接库
include
includelib
include
includelib
.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
flat 平展模式后,MASM将自动产生下面的语句,指定各段寄存器与段的关系:
ASSUME cs:flat,ds:flat,ss:flat,es:falt, fs:error, gs:error
Win32环境汇编语言编程接口就建立在Win32 API基础上。
Win32 API的核心是3个动态链接库(dll):
(1)
提供系统服务功能,包括内存管理、任务管理和动态链接等。(2)
提供用户接口服务功能,包括创建窗口和传递消息等。
(3)
提供图形设备接口,实现文本及图形的显示操作。
返回
源程序结构中的分段不再是DOS汇编中的段定义概念,而是逐段连续分配各段地址空间,上一段结束就是下一段的开始。
invoke 函数名[,参数1] [,参数2]
invoke MessageBox, NULL, addr szgreet, addr sztilte, MB_OK
上述调用在汇编语言程序中汇编为如下指令:
push MB_OK
push sztitle
push szgreet
push NULL
call MessageBox
MessageBox( )的原形声明如下:
int MessageBox(
HWND hwnd, //父窗口句柄
LPCTSTR lpT
07 Win32汇编语言程序设计 来自淘豆网m.daumloan.com转载请标明出处.