`
zzc1684
  • 浏览: 1229589 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
; 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.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) 文件复制到当前位置.
;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 等后面详细探讨.

; ********************************

.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


关于换行: 在实际操作中, 我没有使用换行符号 \ 也可以, 如:


 

; 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
分享到:
评论

相关推荐

    win32 汇编 视频教程

    1. **编写简单的Hello World程序**:从最基础的程序入手,了解汇编语言的基本语法。 2. **实现简单的计算器**:通过编写一个小型的计算器程序,学习如何在汇编中实现算术运算。 3. **制作一个简单的文本编辑器**:...

    win32汇编最简单程序

    Sample code for < Win32ASM Programming 2nd Edition> ; by 罗云彬, http://asm.yeah.net ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Test.asm ; 编程环境测试代码 ;>>>>>>>>>>>>>...

    Win32 汇编计算器

    《Win32汇编计算器详解》 在计算机科学领域,汇编语言是一种低级编程语言,它与机器语言紧密相连,直接对应于计算机硬件的指令集。本篇将深入探讨如何使用汇编语言编写一个Win32计算器,该计算器虽然不处理运算...

    win32汇编语言实现冒泡排序

    ### Win32汇编语言实现冒泡排序 #### 一、背景 随着现代软件开发的不断进步和发展,大型软件项目通常不再使用汇编语言作为主要编程语言,这主要是因为汇编语言编写耗时且不易维护。然而,在某些特定场景下,如硬件...

    Win32汇编实现可接受拖放文件的窗口

    在Windows编程中,Win32汇编语言是一种强大的工具,可以用来创建低级别的系统级应用程序。本项目"Win32汇编实现可接受拖放文件的窗口"专注于利用Win32 API来创建一个窗口,该窗口能够接收用户通过拖放操作传递的多个...

    win32汇编写的记事本

    《基于Win32汇编的记事本程序详解》 在计算机编程的世界里,汇编语言作为底层语言,是理解计算机工作原理的重要工具。而Windows操作系统则是全球最广泛使用的桌面系统,其API(应用程序接口)提供了丰富的功能供...

    windows环境下32位汇编语言程序设计典藏版

    3. **编程实践**:通过实例介绍如何编写简单的Win32应用程序,如控制台程序、图形界面程序等。 4. **调试技巧**:如何使用调试工具,如OllyDbg或Visual Studio的调试器,来调试汇编代码,查找和修复错误。 5. **...

    汇编Win32ASM 开发工具

    这将帮助初学者快速上手,理解如何使用Win32ASM编写、编译和运行简单的汇编程序。 总的来说,汇编语言和Win32ASM的结合为开发者提供了一个深入理解Windows系统工作方式的途径,并且能够创建高效、针对性强的程序。...

    Windows环境下32位汇编语言程序设计:罗云彬2013最新版随书资源

    《Windows环境下32位汇编语言程序设计》从编写应用程序的角度,从“HelloWorld"这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。Windows环境下32位...

    Windows环境下32位汇编语言程序设计 罗云彬

    主要内容包括Win32汇编源程序的结构、如何调用API函数、标号与变量的概念及使用方法、子程序的定义和参数传递方式等。此外,还探讨了一些高级语法,如条件测试语句、分支和循环控制语句等。 - **第4章 第一个窗口...

    win32 汇编教程

    Win32汇编是针对Windows操作系统平台的汇编语言编程,它使用Intel x86架构的汇编指令,并结合Windows API函数进行程序设计。在Win32汇编中,开发者可以创建窗口、处理消息、管理内存、访问硬件设备等,实现对Windows...

    Windows环境下32位汇编语言程序设计(第2版)下载

     汇编语言编程是作者的一大爱好,作者自1990年开始即使用汇编语言编写程序,是Windows操作系统流行后国内最早研究Win32汇编编程的程序员之一,在1998年创建了专门探讨汇编编程的网站——htlp://asm.yeah.net,曾...

    Windows环境下32位汇编语言程序设计(最新琢石成器版)附属光盘

    Windows环境下32位汇编语言程序设计 第2版(罗文斌) 完整光盘内容,包含每章内容的完整代码 本光盘所包含目录的说明 根目录下的 *.pdf ;附录A、B、C的电子版文档 Chapter02\Test ;测试编译环境 Chapter03\Hello...

    windows环境下32位汇编语言程序设计

    言下之意就是:学汇编就是为了了解高级语言底下一层的功能,但现在Win32汇编却使用和C++等语言相同的API接口,既然和高级语言处于同一个级别,我们为什么还要去和机器指令打交道呢,还不如去学Visual C++方便。...

    WIN32汇编的GDI+库

    标题"WIN32汇编的GDI+库"表明我们要讨论的是在Windows 32位平台上,使用汇编语言操作GDI+图形设备接口库的编程技术。GDI+是Microsoft Windows操作系统提供的一种高级图形绘制API,它扩展了传统的GDI(Graphics ...

    win32汇编典藏版随书光盘

    - **源代码示例**:提供各种实际的汇编语言程序,涵盖了从简单的数据处理到复杂的Windows API调用,帮助读者理解和应用所学知识。 - **实验指导**:可能包含一系列逐步的实验,引导读者亲手编写和调试汇编程序,提升...

    Win32下的时钟程序实例源码

    这个“Win32下的时钟程序实例源码”提供了一个在Win32环境下编写简单时钟程序的示例,帮助开发者理解和实践如何在非MFC(Microsoft Foundation Classes)环境中创建实时显示时间的应用。 MFC是微软提供的一个C++库...

    Windows环境下32位汇编语言程序设计.rar

    3.1 Win32汇编源程序的结构(1) 3.1 Win32汇编源程序的结构(2) 3.1 Win32汇编源程序的结构(3) 3.2 调用API(1) 3.2 调用API(2) 3.2 调用API(3) 3.3 标号、变量和数据结构(1) 3.3 标号、变量和数据结构(2) 3.3 标号、...

Global site tag (gtag.js) - Google Analytics