Win32汇编学习笔记(一)

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

None.gif @echo   off
None.gif
set  Masm32Dir = E: \ masm32  
None.gif
set  include = %Masm32Dir% \ Include ; %include% ; D: \ dyk \ vc6 \ Include ; D: \ dyk \ vc6 \ MFC \ Include
None.gif
set  lib = %Masm32Dir% \ lib ; %lib%
None.gif
set   path = %Masm32Dir% \ Bin ; %Masm32Dir% ; % PATH %
None.gif
echo   on
None.gif
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

2,编写代码:

None.gif . 386
None.gif.model flat,stdcall
None.gifoption 
casemap: none
None.gif
None.gif
; 引入头文件
None.gif
include windows. inc
None.gifinclude user32.
inc
None.gifincludelib user32.lib
None.gifinclude kernel32.
inc
None.gifincludelib kernel32.lib
None.gif
None.gif
; 数据段
None.gif

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

None.gif
; 代码段
None.gif

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


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


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

None.gif EXE  =  Hello . exe         # 指定输出文件
None.gifOBJS 
=  Hello . obj         # 需要的目标文件
None.gif
None.gifLINK_FLAG 
=   / subsystem :windows      # 连接选项
None.gifML_FLAG 
=   / / coff         # 编译选项
None.gif
None.gif
$( EXE ) $( OBJS )   $( RES )
None.gif    Link 
$( LINK_FLAG )   $( OBJS )   $( RES )
None.gif
None.gif
. asm . obj:
None.gif    ml 
$( ML_FLAG )   $<
None.gif
. rc . res:
None.gif    rc 
$<
None.gif
None.gifclean:
None.gif    
del  * . obj
None.gif    
del  * . res
None.gif

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

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

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


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

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

      代码重新封装下:

None.gif . 386
None.gif.model flat,stdcall
None.gifoption 
casemap: none
None.gif
None.gif
; 引入头文件
None.gif
include windows. inc
None.gifinclude user32.
inc
None.gifincludelib user32.lib
None.gifinclude kernel32.
inc
None.gifincludelib kernel32.lib
None.gif
None.gif
; 数据段
None.gif

None.gif.data
None.gifszCaption  db 
' Info ' , 0
None.gifszText db 
' Hello,World! ' , 0
None.gif
None.gif.data?
None.gifszBuffer db 
1024  dup (?)   ; 1K的缓冲区
None.gif

None.gif
; 代码段
None.gif
.code
None.gif
None.gif
; 打印子程序,标题和文本通过eax,ebx分别传进来
None.gif
PrintInfo proc
None.gif                            invoke MessageBox,NULL,eax,ebx,MB_OK  
; 打印"Hello,World"    
None.gif
                             ret
None.gifPrintInfo endp
None.gif
None.gif
start:
None.gif            
mov  eax,offset szText  ; eax中存放“文本”的地址
None.gif
             mov  ebx,offset szCaption  ; ebx中存放“标题”的地址
None.gif
             call  PrintInfo
None.gif            invoke ExitProcess,NULL   
; 结束当前进程
None.gif
end start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值