`
dato0123
  • 浏览: 936256 次
文章分类
社区版块
存档分类
最新评论

Win32汇编学习笔记(一)

 
阅读更多

1,安装masm32,并设置环境变量:

@echooff
setMasm32Dir=E:/masm32
setinclude=%Masm32Dir%/Include;%include%;D:/dyk/vc6/Include;D:/dyk/vc6/MFC/Include
setlib=%Masm32Dir%/lib;%lib%
setpath=%Masm32Dir%/Bin;%Masm32Dir%;%PATH%
echoon
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

再将VC6.0下的nmake.exe拷贝到Masm32bin目录下.

2,编写代码:

.386
.modelflat,stdcall
option
casemap:none

;引入头文件
includewindows.inc
includeuser32.
inc
includelibuser32.lib
includekernel32.
inc
includelibkernel32.lib

;数据段

.data
szCaptiondb
'Info',0;标题
szTextdb'Hello,World!',0;信息内容

;代码段

.code
start:
invokeMessageBox,NULL,offsetszText,offsetszCaption,MB_OK
;打印"Hello,World"
invokeExitProcess,NULL;结束当前进程
endstart


3,进入代码目录,用nmake编译程序,出现下面的错误:
2008030602.jpg


这是因为还没有MAKEFILE,所以无法进行编译,拷贝一个MAKEFILE修改如下:

EXE=Hello.exe#指定输出文件
OBJS
=Hello.obj#需要的目标文件

LINK_FLAG
=/subsystem:windows#连接选项
ML_FLAG
=/c/coff#编译选项

$(EXE):$(OBJS)$(RES)
Link
$(LINK_FLAG)$(OBJS)$(RES)

.asm.obj:
ml
$(ML_FLAG)$<
.rc.res:
rc
$<

clean:
del*.obj
del*.res

因为没有用到资源文件,所以RES这一项没有,再次用nmake进行编译:
2008030601.jpg

目录下生成如下图:
2008030604.jpg

运行Hello.exe,即完成第一个”Hello,World”了,
2008030603.jpg


对于这个代码有一个问题我还不大清楚,.inc文件和.lib文件的区别是什么?我个人理解.inc是变量和函数的声明,而.lib是静态链接库,包含着函数的具体实现,再有一个感觉就是

MAKEFILE的书写也是一门学问。。

代码重新封装下:

.386
.modelflat,stdcall
option
casemap:none

;引入头文件
includewindows.inc
includeuser32.
inc
includelibuser32.lib
includekernel32.
inc
includelibkernel32.lib

;数据段

.data
szCaptiondb
'Info',0
szTextdb
'Hello,World!',0

.data?
szBufferdb
1024dup(?);1K的缓冲区

;代码段
.code

;打印子程序,标题和文本通过eax,ebx分别传进来
PrintInfoproc
invokeMessageBox,NULL,eax,ebx,MB_OK
;打印"Hello,World"
ret
PrintInfoendp

start:
moveax,offsetszText;eax中存放“文本”的地址
movebx,offsetszCaption;ebx中存放“标题”的地址
callPrintInfo
invokeExitProcess,NULL
;结束当前进程
endstart

分享到:
评论

相关推荐

    win32 汇编笔记精华

    **标题:“win32汇编笔记精华”** **概述:** 在计算机科学的世界里,汇编语言是一种低级编程语言,它与机器语言密切相关,直接对应于计算机硬件的指令集。Win32汇编,顾名思义,是应用于Windows 32位操作系统的...

    我的关于汇编语言学习整理笔记

    【汇编语言学习整理笔记】 汇编语言,作为计算机科学的基础,是计算机系统与程序员之间的桥梁,它是一种低级编程语言,直接对应机器指令。在Windows环境下,特别是win32平台,汇编语言的应用主要集中在系统级编程、...

    达内2013年win32编程课堂笔记

    ### 达内2013年Win32编程课堂笔记概览 #### 一、编译与连接过程 在Windows编程环境下,特别是针对Win32应用程序开发时,开发者需要了解编译器和连接器的工作原理。编译过程是将源代码(.c或.cpp文件)转换成汇编...

    一个迷你的com通讯程序,是用win32asm写的 功能全面.zip

    【标题】中的“一个迷你的com通讯程序,是用win32asm写的 功能全面.zip”揭示...总的来说,这款程序是一个深入学习Win32汇编语言和COM通信技术的宝贵资源,对于想要提升底层编程技能的开发者来说,具有很高的学习价值。

    汇编语言教程大全(史上最全).zip

    9. **内核.txt**:这部分可能涉及操作系统内核的汇编编程,比如设备驱动、中断处理、内存管理等,是高级汇编学习者探索的领域。 10. **oop.txt**:虽然汇编语言通常不用于实现面向对象编程,但这个文件可能探讨了...

    wav.zip_wav

    标题中的“wav.zip_wav”表明这是一个包含与WAV...这个压缩包可能包含了一个示例程序或源代码,演示了如何用Win32汇编实现键盘模拟和播放WAV音频,对于学习汇编语言和Windows编程的初学者来说,这样的资源非常有价值。

    驱动学习笔记

    VC++6.0虽然是一款较老的开发工具,但它支持创建Windows驱动程序,特别是早期的Win32驱动。开发者需要了解如何配置项目设置,选择正确的工程模板,并使用特定的编译器选项来构建驱动程序。 在游戏开发领域,驱动...

    双旗的Windows编程学习资料包.rar

    API Hook基本原理和实现.doc Delphi 消息机制学习笔记.doc Delphi编写Ping程序.doc Win32调试API学习心得.doc 簡單的Windows API示例.doc 数字信号处理器.pdf 处理器的结构.doc 汇编语言...

    桌面闹铃。备忘录,闹铃,定时关机,报时,开机运行,<

    描述中提到“win32汇编编写”表示这款应用是使用Win32 API(应用程序接口)和汇编语言编写的。汇编语言是一种低级编程语言,程序员可以直接控制硬件的功能,因此用汇编编写的程序往往更高效,但编写难度也相对较大。...

    【软件加密_技术内幕】

    [Trial version] 《COM 原理与应用》学习笔记 - 第一部分 COM原理.htm [Trial version] 附录D 通过崩溃地址找出出错的代码行 [Trial version] 如何通过崩溃地址找到出错的代码行.htm [Trial version] 附录E 堆栈...

    国嵌笔记。全集全集

    以上就是从《国嵌笔记》中提炼出来的知识点,涵盖了嵌入式系统开发的基础和进阶内容,涉及网络服务配置、交叉编译工具链安装、ARM架构编程、Bootloader设计等多个方面,为学习者提供了全面深入的学习资料。

    WinAVR+AvrX开发笔记(Namey_Niu).pdf

    ### WinAVR与AvrX开发笔记概览 #### 一、WinAVR简介与安装 **WinAVR**是一款广泛应用于AVR单片机开发的工具包,它集成了GCC编译器、汇编器以及其他必要的开发工具,使得开发者能够在Windows环境下轻松地进行AVR...

    Shellcoder’s Handbook: Discovering and exploiting Security Holes---中文CHM

    W.Richard.Stevens的UNP我算是认真看过加了不少旁注,APUE就没有那么认真了,而卷II的一半认真看过,写过读书笔记,卷III就没有看一页。道格拉斯的卷I、卷III是认真看过几遍,卷II就只断续看过。而很多技术文章,...

    USBGL20200709_USB编程_CH9328_ch9328通信协议_ch9328键盘_USB键盘_源码.zip

    在Windows系统中,通常使用WinUSB、USB HID类驱动或自定义USB设备驱动进行编程。USB编程需要理解USB协议栈、设备类规范以及相关的API调用。 2. **CH9328**:CH9328是一款USB到串行接口控制器,由中芯国际集成电路...

Global site tag (gtag.js) - Google Analytics