你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
"hello,world!"win32汇编小程序(一)
 
"hello,world!"win32汇编小程序szText  db "Hello, world!",0

  szCaption db "Win32Asm",0

    .code
start:
    push MB_OK
    lea eax,szCaption
    push eax
    lea eax,szText
    push eax
    push NULL
    call messageboxa
    xor eax,eax
    push eax
    call exitprocess
    end start

  --------------------------------------------------

  编译链接:

  分下面两步进行:

  ml  /c /coff 3.asm 

  link /subsystem:windows /libpath:d:masm7lib 3.obj

  第一步编译生成3.obj文件

  /c 表示只编译,不链接

  /coff 表示生成COFF格式的目标文件

  第二步链接生成3.exe文件

  /subsystem:windows 表示生成windows文件

  /libpath:d:masm7lib 表示引入库的路径为:d:masm7lib。

  在安装Masm32后,引入库位于Masm32Lib目录下。

  也可设置环境变量Lib的值:在dos提示符下键入Set Lib=d:masm7lib,这样“链接”就可简单写成:

  link /subsystem:windows 3.obj,试想一下,在程序调试过程中,修改源程序是常用的事啦,每次编译链接都要带/libpath:...那该有多烦人呢。当然,我们也可在源程序中直接给出引入库的位置,这样,链接时就方便啦,如下:

  includelib d:masm7libkernel32.lib

  includelib d:masm7libuser32.lib

  --------------------------------------------------

  执行:在dos提示符下键入3,回车,出现一个消息框,哈哈,真正的Win32程序!

  --------------------------------------------------

  深入分析:

  看一下源程序,有这么两行:call messageboxacall exitprocess。大家一看都知道,这是子程序调用,但是我们并没写这样的子程序,事实上,这些是API函数。作为函数,我们在调用时可能需要传送给函数一些参数,程序怎么知道传送的参数有哪些,类型是什么呢?就是通过函数原型定义,如下所示:

  ExitProcess PROTO :DWORD

  MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD

  可以看出,ExitProcess有一个参数,MessageBoxA有四个参数,这些参数都是DWORD类型。

  在Win32中,参数的传递都是通过堆栈来完成的。象MessageBoxA这个函数有四个参数,究竟是左边的先压入堆栈还是右边的先入栈呢?.model flat,stdcall给出了答案。stdcall 指定参数是从右到左压入堆栈的,且调整堆栈是在子程序返回时完成的。在源程序中不需要用“add sp,值”来保持堆栈平衡。对MessageBox,在API手册中是这样定义的:

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089