且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Win32汇编学习笔记(一)

更新时间:2022-09-16 16:23:14

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

Win32汇编学习笔记(一)@echo off
Win32汇编学习笔记(一)set Masm32Dir=E:\masm32  
Win32汇编学习笔记(一)set include=%Masm32Dir%\Include;%include%;D:\dyk\vc6\Include;D:\dyk\vc6\MFC\Include
Win32汇编学习笔记(一)set lib=%Masm32Dir%\lib;%lib%
Win32汇编学习笔记(一)set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%
Win32汇编学习笔记(一)echo on
Win32汇编学习笔记(一)

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

2,编写代码:

Win32汇编学习笔记(一).386
Win32汇编学习笔记(一).model flat,stdcall
Win32汇编学习笔记(一)option casemap:none
Win32汇编学习笔记(一)
Win32汇编学习笔记(一);引入头文件
Win32汇编学习笔记(一)
include windows.inc
Win32汇编学习笔记(一)include user32.inc
Win32汇编学习笔记(一)includelib user32.lib
Win32汇编学习笔记(一)include kernel32.inc
Win32汇编学习笔记(一)includelib kernel32.lib
Win32汇编学习笔记(一)
Win32汇编学习笔记(一);数据段
Win32汇编学习笔记(一)

Win32汇编学习笔记(一).data
Win32汇编学习笔记(一)szCaption  db 'Info',0   ;标题
Win32汇编学习笔记(一)
szText db 'Hello,World!',0  ;信息内容
Win32汇编学习笔记(一)

Win32汇编学习笔记(一);代码段
Win32汇编学习笔记(一)

Win32汇编学习笔记(一).code
Win32汇编学习笔记(一)start:
Win32汇编学习笔记(一)            invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK  ;打印"Hello,World"
Win32汇编学习笔记(一)
            invoke ExitProcess,NULL   ;结束当前进程
Win32汇编学习笔记(一)
end start
Win32汇编学习笔记(一)


3,进入代码目录,用nmake编译程序,出现下面的错误:
Win32汇编学习笔记(一)

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

Win32汇编学习笔记(一)EXE = Hello.exe        #指定输出文件
Win32汇编学习笔记(一)OBJS = Hello.obj        #需要的目标文件
Win32汇编学习笔记(一)
Win32汇编学习笔记(一)LINK_FLAG = /subsystem:windows    #连接选项
Win32汇编学习笔记(一)ML_FLAG = /c /coff        #编译选项
Win32汇编学习笔记(一)
Win32汇编学习笔记(一)$(EXE): $(OBJS) $(RES)
Win32汇编学习笔记(一)    Link $(LINK_FLAG) $(OBJS) $(RES)
Win32汇编学习笔记(一)
Win32汇编学习笔记(一).asm.obj:
Win32汇编学习笔记(一)    ml $(ML_FLAG) $<
Win32汇编学习笔记(一).rc.res:
Win32汇编学习笔记(一)    rc $<
Win32汇编学习笔记(一)
Win32汇编学习笔记(一)clean:
Win32汇编学习笔记(一)    del *.obj
Win32汇编学习笔记(一)    del *.res
Win32汇编学习笔记(一)

因为没有用到资源文件,所以RES这一项没有,再次用nmake进行编译:
Win32汇编学习笔记(一)

目录下生成如下图:
Win32汇编学习笔记(一)

运行Hello.exe,即完成第一个”Hello,World”了,
Win32汇编学习笔记(一)


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

      代码重新封装下:

Win32汇编学习笔记(一).386
Win32汇编学习笔记(一).model flat,stdcall
Win32汇编学习笔记(一)option casemap:none
Win32汇编学习笔记(一)
Win32汇编学习笔记(一);引入头文件
Win32汇编学习笔记(一)
include windows.inc
Win32汇编学习笔记(一)include user32.inc
Win32汇编学习笔记(一)includelib user32.lib
Win32汇编学习笔记(一)include kernel32.inc
Win32汇编学习笔记(一)includelib kernel32.lib
Win32汇编学习笔记(一)
Win32汇编学习笔记(一);数据段
Win32汇编学习笔记(一)

Win32汇编学习笔记(一).data
Win32汇编学习笔记(一)szCaption  db 'Info',0
Win32汇编学习笔记(一)szText db 'Hello,World!',0
Win32汇编学习笔记(一)
Win32汇编学习笔记(一).data?
Win32汇编学习笔记(一)szBuffer db 1024 dup (?)  ;1K的缓冲区
Win32汇编学习笔记(一)

Win32汇编学习笔记(一);代码段
Win32汇编学习笔记(一)
.code
Win32汇编学习笔记(一)
Win32汇编学习笔记(一);打印子程序,标题和文本通过eax,ebx分别传进来
Win32汇编学习笔记(一)
PrintInfo proc
Win32汇编学习笔记(一)                            invoke MessageBox,NULL,eax,ebx,MB_OK  ;打印"Hello,World"    
Win32汇编学习笔记(一)
                            ret
Win32汇编学习笔记(一)PrintInfo endp
Win32汇编学习笔记(一)
Win32汇编学习笔记(一)start:
Win32汇编学习笔记(一)            mov eax,offset szText ;eax中存放“文本”的地址
Win32汇编学习笔记(一)
            mov ebx,offset szCaption ;ebx中存放“标题”的地址
Win32汇编学习笔记(一)
            call PrintInfo
Win32汇编学习笔记(一)            invoke ExitProcess,NULL   ;结束当前进程
Win32汇编学习笔记(一)
end start


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/03/06/1094155.html,如需转载请自行联系原作者