学Win32 汇编[2]: 最简单的 Win32 程序
来源:互联网 发布:苏州教师网络培训平台 编辑:程序博客网 时间:2024/05/22 14:18
; Test2_1.asm
.386
.model flat, stdcall
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
szCaption db 'Hi', 0
szMsg db 'Hello World!', 0
.code
start:
invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK
invoke ExitProcess, NULL
end start
--------------------------------------------------------------------------------
建立过程:
1、文件 -> 新建工程 -> 工程类型: Win32 App (no res)、工程名称: Test1 -> 默认下去到完成.
2、打开 Test1.asm 输入以上代码, 然后编译执行. 结果如下:
程序注释:
; Test1.asm; 分号是单行注释comment & 注释还可以使用 comment, 现在两个 & 之间的是注释内容, 其中的百分号也可以换做其他符号, 譬如 ^&COMMENT ^ 这也是注释, 还是多用 ; 吧, 比较方便 ^; ********************************.386.model flat, stdcall;.386 和 .model 都是是汇编伪指令; .386 表示使用 386 指令集, 这是 Win32 程序的最低需求.;类似的还有 .8086 .286 .386p .486 .486p .586 .586p .mmx 等, 其中的 p 表示可以使用一些特权指令.;.model 用于定义工作模式;;flat 是内存模式, 类似还有: tiny small medium compact large huge, Win32 程序只能选择 flat;;stdcall 是语言模式, 类似的还有: c syscall basic fortran pascal, 使用 Win32 API 必须选择 stdcall.; ********************************include windows.incinclude user32.incinclude kernel32.incincludelib user32.libincludelib kernel32.lib;kernel32.dll 是系统服务接口, 负责内存管理等;;user32.dll 是用户服务接口, 负责消息管理等;;下面的程序会用到它们的函数.;user32.inc 和 kernel32.inc 中分别包含着对应 DLL 的函数、常量、结构的声明.;windows.inc 包含着 Win32 程序用到的常量、结构的声明; 譬如下面用到的 MB_OK 常量就是在其中声明.;程序在编译时, 见到 include (伪)指令就会把它指定的 inc 文件(或 asm) 文件复制到当前位置.;inc 文件主要包含函数或常量的声明.;lib 文件包含了动态库函数的地址信息和静态库的函数代码, 程序在链接阶段会提取这些信息或代码; ;对 DLL(动态库), 程序运行时会根据这些地址信息去调用 DLL 中的相应的函数.;inc 和 lib 文件分别存放在 masm32/include/ 和 masm32/lib/ 下;;这里没有使用路径是因为 RadASM 已经给设置好了系统路了.; ********************************.data szCaption db 'Hi', 0 szMsg db 'Hello World!', 0;.data 说明这是程序的数据段, 下面的 .code 是代码段;后面还会接触到 .const(常量段)、.data?(变量段)等;这里是定义了两个字符串变量 szCaption、szMsg, 后面的 0 表示是 0 结束的字符串.;关于 db 等后面详细探讨.; ********************************.codestart: invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK invoke ExitProcess, NULLend start;这段程序用到了两个 API 函数: MessageBox(显示消息框)、ExitProcess(退出程序);;这两个函数分别来自 user32.dll 和 kernel32.dll.;invoke 是调用函数或子过程的伪指令.;addr 是取地址的伪指令, 这里也可以换做 offset;start 是随便命名的标号, 用于表示程序段的开始和结束;另外汇编本来是不区分大小写的, 但在使用 WinAPI 和 C 函数时必须注意大小写;标号(如 start)和变量也要注意大小写;指令和伪指令大小写均可;汇编会忽略多余的空白, 并用 / 续行, 譬如:invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK;可写作:invoke MessageBox, NULL,/ addr szMsg,/ addr szCaption,/ MB_OK
关于换行: 在实际操作中, 我没有使用换行符号 / 也可以, 如:
; Test2_1.asm.386.model flat, stdcallinclude windows.incinclude user32.incinclude kernel32.incincludelib user32.libincludelib kernel32.lib.data szCaption db 'Hi', 0 szMsg db 'Hello World', '!', 0.codestart: invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK invoke ExitProcess, NULLend start
- 学Win32 汇编[2]: 最简单的 Win32 程序
- 学 Win32 汇编[2]: 最简单的 Win32 程序
- 最简单的win32程序
- 最简单的win32程序
- 最简单的Win32程序
- win32汇编最简单窗体
- 最简单的win32的窗口程序
- 最简单的一个win32程序
- 最简单的后门——cmd传输win32汇编
- 学 Win32 汇编[28]
- 最简单的win32框架
- 最简单的win32汇编程序
- 最简单的Win32安装程序制作办法
- 最简单Win32安装程序制作办法
- 简单的Win32对话框程序
- 一个简单的win32程序
- 简单的win32画图程序
- WIN32汇编: 3.创建简单的窗口
- 1111
- Google.com.hk时常进不了
- css选择符
- .Net Micro Framework开发板用户简明手册
- 以前的某个程序安装已在安装计算机上创建挂起文件操作(转载)
- 学Win32 汇编[2]: 最简单的 Win32 程序
- 快速内存比较函数CompareMem(Delphi SSE优化算法应用之二)
- 学 Win32 汇编[3]: 控制台下的几种输入、输出方式
- String.Format几种用法
- 额
- 110个oracle常用函数总结
- 重力小球
- [转]《给年轻工程师的十大忠告》
- sqlcommandbuilder进行数据更新