Win32汇编学习笔记(一)

简介:

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

@echo  off
set Masm32Dir=E:\masm32  
set include=%Masm32Dir%\Include;%include%;D:\dyk\vc6\Include;D:\dyk\vc6\MFC\Include
set lib=%Masm32Dir%\lib;%lib%
set  path=%Masm32Dir%\Bin;%Masm32Dir%;% PATH%
echo  on

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

2,编写代码:

. 386
.model flat,stdcall
option  casemap:none

; 引入头文件
include windows. inc
include user32. inc
includelib user32.lib
include kernel32. inc
includelib kernel32.lib

; 数据段

.data
szCaption  db  ' Info ', 0    ; 标题
szText db  ' Hello,World! ', 0   ; 信息内容

; 代码段

.code
start:
            invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK   ; 打印"Hello,World"
            invoke ExitProcess,NULL    ; 结束当前进程
end start


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
.model flat,stdcall
option  casemap:none

; 引入头文件
include windows. inc
include user32. inc
includelib user32.lib
include kernel32. inc
includelib kernel32.lib

; 数据段

.data
szCaption  db  ' Info ', 0
szText db  ' Hello,World! ', 0

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

; 代码段
.code

; 打印子程序,标题和文本通过eax,ebx分别传进来
PrintInfo proc
                            invoke MessageBox,NULL,eax,ebx,MB_OK   ; 打印"Hello,World"    
                             ret
PrintInfo endp

start:
             mov eax,offset szText  ; eax中存放“文本”的地址
             mov ebx,offset szCaption  ; ebx中存放“标题”的地址
             call PrintInfo
            invoke ExitProcess,NULL    ; 结束当前进程
end start


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/03/06/1094155.html,如需转载请自行联系原作者
目录
相关文章
|
IDE API 开发工具
Win32汇编开发环境介绍和RadAsm简明教程
Win32汇编开发环境介绍和RadAsm简明教程 现在很多朋友都在学习汇编语言,一方面汇编语言是大学计算机课程的必修课,另一方面则是为了从其它语言转到汇编语言来,无论什么原因,我认为学习汇编语言是 件很有趣的事,学习它不但可以深入了解编程语言的内部表现,也是进一步了解操作系统的途径。
967 0
|
IDE API 开发工具
Win32汇编开发环境介绍和RadAsm简明教程
Win32汇编开发环境介绍和RadAsm简明教程 现在很多朋友都在学习汇编语言,一方面汇编语言是大学计算机课程的必修课,另一方面则是为了从其它语言转到汇编语言来,无论什么原因,我认为学习汇编语言是 件很有趣的事,学习它不但可以深入了解编程语言的内部表现,也是进一步了解操作系统的途径。
1023 0
|
IDE API 开发工具
Win32汇编开发环境介绍和RadAsm简明教程
Win32汇编开发环境介绍和RadAsm简明教程 现在很多朋友都在学习汇编语言,一方面汇编语言是大学计算机课程的必修课,另一方面则是为了从其它语言转到汇编语言来,无论什么原因,我认为学习汇编语言是 件很有趣的事,学习它不但可以深入了解编程语言的内部表现,也是进一步了解操作系统的途径。
1964 0
|
6月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
206 2
|
21天前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
21天前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
|
6月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
538 0