`
deepfuture
  • 浏览: 4412978 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80136
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70364
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103607
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:286603
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15056
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67816
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32293
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46075
社区版块
存档分类
最新评论

WIN32汇编-HELLO,WORLD!

阅读更多



 

 我们用WIN32汇编构建第一个WINODWS程序,这个程序完成显示一个带问号的对话框,对话框的内容是现在系统时间。

   首先,打开MASM32Editor(在桌面上可以找到图标),在里面输入以下代码:
     .386
     .model flat, stdcall
     option casemap :none  
;#################################################################
     include windows.inc
     include user32.inc
     include kernel32.inc
     include gdi32.inc
     include masm32.inc
     
     includelib user32.lib
     includelib kernel32.lib
     includelib gdi32.lib
     includelib masm32.lib
;#################################################################
   .data?
      szbuffer db 100 dup(?)
   .data
      szcaptionName db "我的HELLO,WORLD!",0
      szbegin db "现在时间:"
      sztext db 100 dup(?)
;#################################################################  .code
start:
;程序的入口
       call _callgetnow
       invoke MessageBox,NULL,offset szbegin,offsetszcaptionName,MB_ICONQUESTION or MB_OK
       invoke ExitProcess,eax
;#################################################################
_callgetnow proc
    pushad
  invokeGetDateFormat,LOCALE_USER_DEFAULT,DATE_LONGDATE,NULL,NULL,addrsztext,100
    invokeGetTimeFormat,LOCALE_USER_DEFAULT,LOCALE_NOUSEROVERRIDE,NULL,NULL,addrszbuffer,100
   
    invokeszCatStr,addr sztext,addr szbuffer
    popad
    ret
_callgetnow endp
;#################################################################
end start
  将上述代码保存为HELLOWORLD.ASM后,对程序进行编译。
  在编译前参照下图设置好系统的环境变量,path变量加上x:\masm32\bin,lib变量加上x:\masm32\lib,include变量加上x:\masm32\include。
  确环境变量设置好后,进入DOS窗口开始编译。
   首先运行ml,编译成coff文件格式
  然后运行LINK,进行链接,生成EXE文件,


  大功造成,运行一下试试效果吧!


 下面我们接着来做一个有些难度的helloworld,这个程序将系统时间直接显示在桌面上。程序源代码如下:
    .386
     .model flat, stdcall
     option casemap :none  
;#########################################################################
     include windows.inc
     include user32.inc
     include kernel32.inc
     include gdi32.inc
     include masm32.inc
     
     includelib user32.lib
     includelib kernel32.lib
     includelib gdi32.lib
     includelib masm32.lib
;#########################################################################
   .data?
      szbuffer db 100 dup(?)
   .data
      szmssucesscap db "HELLO,WORLD!深入",0
      szmssucesstext db "在桌面的(300,300)处显示了当前时间",0
      szmscap db "错误",0
      szmstext1 db "无法在桌面上显示!",0
      szmstext2 db "无法得到全屏DC!",0
      szbegin db "现在时间:"
      sztext db 100 dup(?)
;#########################################################################
    .code
start:
;程序的入口
       _showtext  proto :DWORD
       call _callgetnow
       invoke _showtext,offset szbegin
       invoke ExitProcess,eax
;#########################################################################
_callgetnow proc
    pushad
  invokeGetDateFormat,LOCALE_USER_DEFAULT,DATE_LONGDATE,NULL,NULL,addrsztext,100
    invokeGetTimeFormat,LOCALE_USER_DEFAULT,LOCALE_NOUSEROVERRIDE,NULL,NULL,addrszbuffer,100
   
    invokeszCatStr,addr sztext,addr szbuffer
    popad
    ret
_callgetnow endp
;#########################################################################
_showtext proc  lpsztext:DWORD
    LOCAL@Desktopdc:HDC
    LOCAL@dwcolor:DWORD
   
    pushad
    mov@dwcolor,00FF0000h
    invokeGetWindowDC,NULL
    cmpeax,0
    jne @f
    invokeMessageBox,NULL,offset szmstext2,offset szmscap,MB_ICONERROR
    @@:
    mov@Desktopdc,eax
    invokelstrlen,lpsztext
    movebx,eax
    invokeSetBkMode,@Desktopdc,TRANSPARENT
    invokeSetTextColor,@Desktopdc,@dwcolor
    invokeTextOut,@Desktopdc,300,300,lpsztext,ebx
    invokeMessageBox,NULL,offset szmssucesstext,offsetszmssucesscap,MB_ICONINFORMATION
    cmpeax,0
    jne @f
    invokeMessageBox,NULL,offset szmstext1,offset szmscap,MB_ICONERROR
    @@:
    popad
    ret
_showtext endp
;#########################################################################
end start
 
以上程序中有几个重要的GDI相关的API,下面简要介绍一下
(1)
invoke SetBkMode,@Desktopdc,TRANSPARENT
设置背景方式为透明
(2)
invoke SetTextColor,@Desktopdc,@dwcolor
设置字体颜色为蓝色
(3)
invoke TextOut,@Desktopdc,300,300,lpsztext,ebx
在300,300处显示文本
(4)
invoke GetWindowDC,NULL
取得桌面DC
(5)
mov @dwcolor,00FF0000h
设置颜色为蓝色。@dwcolor是一个DWORD型的变量,
  可以在相关头文件中找到这样的定义:
typedef DWORD COLORREF;
因此COLORREF类型的变量就是DWORD型变量。
 COLORREF变量如何表示颜色呢,只有一个双字大小,它的表示格式是(16进制):
0x00bbggrr
bb表示蓝色,gg表示绿色,rr表示红色
00FF0000h:蓝
0000ff00h:绿
000000FFh:红
程序运行效果如下:

笔者几年前用WIN32汇编做的几个小作品,欢迎大家试用
掂花即时朗读王
 http://skycn.net/soft/36318.html
掂花反键盘鼠标记录器
  • 大小: 67.3 KB
  • 大小: 21.4 KB
  • 大小: 12.8 KB
  • 大小: 7.7 KB
  • 大小: 11.6 KB
2
0
分享到:
评论

相关推荐

    第一个汇编程序-Hello World

    第一个汇编程序-Hello World 调用MessageBoxA弹出对话框

    罗云斌win32汇编.rar

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    Win32汇编语言编程(罗云彬编)

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    win32汇编程序设计教程

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    Win32汇编语言程序设计(罗云彬)chm

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    Windows环境下32位汇编语言程序设计:罗云彬2013最新版随书资源

    《Windows环境下32位汇编语言程序设计》从编写应用程序的角度,从“HelloWorld"这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。Windows环境下32位...

    Windows环境下32位汇编语言程序设计(典藏版)分卷压缩:Part1/2

    Windows环境下32位汇编语言程序设计(典藏版)(带书签):本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过70多个实例逐步深入Win32汇编语言编程的...

    win32asm汇编语言-罗云彬

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    win32 汇编 视频教程

    1. **编写简单的Hello World程序**:从最基础的程序入手,了解汇编语言的基本语法。 2. **实现简单的计算器**:通过编写一个小型的计算器程序,学习如何在汇编中实现算术运算。 3. **制作一个简单的文本编辑器**:...

    Win32汇编语言教程

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    Win32汇编语言 罗云彬

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    nasm代码-Hello, world!

    在汇编语言中,"Hello, world!"程序通常涉及到系统调用,用来向屏幕输出文本。下面是一个使用NASM编写的简单示例: ```nasm section .data hello db 'Hello, world!',0 section .text global _start _start: ;...

    Win32汇编开发环境介绍和RadAsm简明教程

    通过《Win32汇编开发环境介绍和RadAsm简明教程(第二版)》这份资料,你可以逐步掌握这些知识,从创建简单的“Hello, World!”程序开始,逐渐深入到复杂的系统编程和底层优化。实践中遇到问题时,可以查阅相关的技术...

    Windows环境下32位汇编语言程序设计

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    Win32汇编语言程序设计

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    win32汇编源程序设计

    接下来,我们将通过一个经典的Hello World程序来介绍如何使用Win32汇编语言进行编程。 ##### 1. DOS环境下的Hello World程序 在DOS环境下,Hello World程序通常是这样的: ```asm section .data szHello db '...

    Win32汇编项目模板 Win32 Assembly Project

    - Win32汇编项目模板可能包含一个简单的示例程序,例如"Hello, World!",展示如何调用Windows API来显示一个消息框。 3. **Windows API**: - Windows API是Windows操作系统提供的函数库,包含了用于执行各种任务...

    win32汇编语言教程,不能错过的好教程

    9. **案例分析**:通过实际的例子,如创建一个简单的“Hello, World!”程序,或者更复杂的窗口应用程序,来巩固所学知识。 10. **实践项目**:提供实际的编程项目,鼓励读者将理论知识应用于实践中,以提高编程技能...

    Windows环境下32位汇编语言程序设计(典藏版)分卷压缩:Part2/2

    Windows环境下32位汇编语言程序设计(典藏版)(带书签):本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过70多个实例逐步深入Win32汇编语言编程的...

Global site tag (gtag.js) - Google Analytics