Just a Little
Win32汇编 16位 DOS与 32位 Windows- 1
16位 DOS操作系统工作于实地址方式
DOS是单任务操作系统,一个正在运行的程序独占了所有系统资源
DOS系统只有一个特权级别,任何程序和操作系统都是同级的
32位 Windows操作系统运行于保护工作方式
Windows是多任务操作系统,系统资源由多个程序共享
Windows系统存在两个特权级别,操作系统运行在最高级别 0级,应用程序都运行于最低级别 3级
Win32汇编 16位 DOS与 32位 Windows- 2
DOS平台下
只有 1MB物理存储空间
必须分成不大于 64KB的逻辑段
Windows平台下
直接使用 32位地址寻址一个不分段的,达 4GB
的主存空间
Windows应用程序只有代码段和数据段
无须和段寄存器打交道
Win32汇编 16位 DOS与 32位 Windows- 3
对程序员来说,操作系统由其提供的系统功能调用定义
DOS操作系统为程序员提供中断服务程序
以中断调用的方法进行系统功能调用
DOS中断调用采用寄存器传递参数
Windows操作系统提供了动态链接库 DDL
利用应用程序接口 API调用动态链接库中的函数
Windows的 API也曾被称为软件开发包 SDK,16位和
32位 Windows的 API分别被称为 Win16和 Win32
Windows应用程序利用堆栈传递参数
Win32汇编 16位 DOS与 32位 Windows- 4
DOS下的程序以字符方式显示给用户
程序需要用户输入时,就停下来;用户不输入就不再执行;而且,需要输入一个数据,用户不能输入另一个数据。
Windows程序采用图形用户界面
它时刻等待用户的操作 。 用户的每个操作都会形成消息 ( Message) 传递给程序,程序则给予响应
Win32汇编一个最简单的 Win32汇编语言程序显示标准 Windows消息窗口的程序消息框显示,欢迎进入 32位 Windows世界!
标题,Win32示例
Win32ASM程序结构
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
ltwin01-
1/2
API区别大小写包含对系统常量和 API函数等的声明包含 API函数的库文件
.data
szCaption db 'Win32示例 ',0
szText db '欢迎进入 32位 Windows世界! ',0
.code
start,invoke MessageBox,NULL,\
addr szText,addr szCaption,MB_OK
invoke ExitProcess,NULL
end start
ltwin01-
2/2
显示消息框 API调用返回操作系统 API调用
Win32汇编 MASM32开发环境
Steve Hutchesson的 免费软件包
编辑器 geditor.exe
MASM 6.14汇编程序和链接程序
相当完整的 Win32的包含文件,库文件以及教程和示例等
Win32汇编 MASM32的网络资源
Hutch的 32位 MASM第 7版 ( masm32v7.zip)
http://www.movsd.com/
Iczelion的 Win32教程
http://spiff.tripnet.se/~iczelion
http://asm.yeah.net/
API文档
http://www.microsoft.com/msdn
Win32汇编 创建一个窗口的过程
1.取得程序的实例句柄 (hInstance)
2.注册窗口类,即为你的窗口指定处理消息的过程,定义光标,窗口风格,颜色等参数
3.创建窗口
4.显示窗口
5.然后进入消息循环,也就是不停地检测有无消息,并把它发送给窗口进程去处理
ltwin02.asmltwin02.exe
Win32汇编 窗口处理的过程
1,从 Windows传给窗口过程的参数 uMsg 得到消息类型,并转到不同的分支去处理
2,对已经处理的消息,返回 Windows 时必须在
eax 中返回 0
3,不处理的消息,调用 DefWindowProc 处理,
并把返回值传回 Windows;否则,Windows
会无法显示
ltwin03.asmltwin03.exe