网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
学 Win32 汇编 [2]: 最简单的 Win32 程序
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/26
下载{$ArticleTitle}原创论文样式

; 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 输入以上代码, 然后编译执行. 结果如下:

学 Win32 汇编 [2]: 最简单的 Win32 程序

  程序注释:

; 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.inc 
include user32.inc 
include kernel32.inc 
includelib user32.lib 
includelib kernel32.lib 
 
;kernel32.dll 是系统服务接口, 负责内存管理等; 
;user32.dll 是用户服务接口, 负责消息管理等; 
;下面的程序会用到它们的函数. 
 
;user32.inc 和 kernel32.inc 中分别包含着对应 DLL 的函数、常量、结构的声明. 
;windows.inc 包含着 Win32 程序用到的常量、结构的声明; 譬如下面用到的 MB_OK 常量就是在其中声明. 
 
;程序在编译时, 见到 include (伪)指令就会把它指定的 inc 文件(或 asm) 文件复制到当前位置. 
 
;lib 文件包含了相应 DLL 的函数信息(主要是位置信息), 程序链接阶段会提取这些信息; 
;程序运行时会根据这些信息去调用 DLL 中的相应的函数. 
 
;inc 和 lib 文件分别存放在 masm32\include\ 和 masm32\lib\ 下. 
 
; ******************************** 
 
.data 
  szCaption db ''Hi'', 0 
  szMsg   db ''Hello World!'', 0 
 
;.data 说明这是程序的数据段, 下面的 .code 是代码段 
;后面还会接触到 .const(常量段)、.data?(变量段)等 
 
;这里是定义了两个字符串变量 szCaption、szMsg, 后面的 0 表示是 0 结束的字符串. 
;关于 db 等后面详细探讨. 
 
; ******************************** 
 
.code 
start: 
  invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK 
  invoke ExitProcess, NULL 
end 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 
(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号