应天论坛

 找回密码
 参与我们

QQ登录

只需一步,快速开始

搜索
查看: 920|回复: 0

用Win32汇编写的"奥运会开幕倒计时牌"

[复制链接]

68

主题

72

帖子

451

积分

少校

勘查大队长

Rank: 6Rank: 6

积分
451
发表于 2017-5-6 18:59:19 | 显示全部楼层 |阅读模式
用Win32汇编写的"奥运会开幕倒计时牌"

[mw_shl_code=asm,true];这个小程序的功能是:把北京奥运会的开幕时间换算成秒数,
;然后获取本地时间,也换算成秒数,将前者减去后者,(如果相
;减后,数值小于或等于0,则提醒,点OK退出)把得到
;的时间再换算成天数时数分数秒数,并显示出来.
;呵呵~~方法很笨,但超简单的啦.希望牛哥牛弟批评指正
;=================================================
;作者:ONEPROBLEM  2008年7月24日
;=================================================
                .386
                .model flat,stdcall
                option casemap:none

include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib

ID_DIALOG        equ        1
ICO_MAIN        equ        1
IDB_MAIN        equ        1
IDC_DAY                equ        100
IDC_HOUR        equ        101
IDC_MINUTE        equ        102
IDC_SECOND        equ        103
IDC_BMP                equ        104

                .data?
               
hInstance        dd        ?
hWinMain        dd        ?
hBmp                dd        ?
idTimer                dd        ?
OlymTimeCount        dd        ?
NowTimeCount        dd        ?

                .const
szCaption        db        '友情提醒',0
szText                db        '2008北京奥运会开幕了! Welcome to BeiJing!',0
;================================================================
                .code
               
_Getlocaltime        proc        _hWnd
                local        @stTime:SYSTEMTIME

                pushad
                invoke        GetLocalTime,addr @stTime
                movzx        eax,@stTime.wMonth
                mov        ebx,2678400                ;把月份换算成秒数
                mul        ebx
                mov        NowTimeCount,eax
               
                movzx        eax,@stTime.wDay
                mov        ebx,86400                ;把天数换算成秒数
                mul        ebx
                add        NowTimeCount,eax
               
                movzx        eax,@stTime.wHour
                mov        ebx,3600                ;把时数换算成秒数
                mul        ebx
                add        NowTimeCount,eax
               
                movzx        eax,@stTime.wMinute        ;把分数换算成秒数
                mov        ebx,60
                mul        ebx
                add        NowTimeCount,eax
               
                movzx        eax,@stTime.wSecond
                add        NowTimeCount,eax
               
                mov        eax,22190888             ;开幕时间在8月8日20时8分8秒,这是换算成的秒数
                sub        eax,NowTimeCount
                .if        eax <=0
                        invoke        MessageBox,hWinMain,offset szText,offset szCaption,MB_OK
                        invoke SendMessage,hWinMain,WM_CLOSE,0,0
                .endif
                mov        OlymTimeCount,eax    ;以下将这个数换算成倒计时"天时分秒"
               
                mov        edx,0                     ;在此eax不用重新赋值
                mov        ebx,86400
                div        ebx
                mov        OlymTimeCount,edx        ;重新保存余数
                invoke        SetDlgItemInt,hWinMain,IDC_DAY,eax,FALSE
               
                mov        eax,OlymTimeCount
                mov        edx,0
                mov        ebx,3600
                div        ebx
                mov        OlymTimeCount,edx
                invoke        SetDlgItemInt,hWinMain,IDC_HOUR,eax,FALSE
               
                mov        eax,OlymTimeCount
                mov        edx,0
                mov        ebx,60
                div        ebx
                mov        OlymTimeCount,edx
                invoke        SetDlgItemInt,hWinMain,IDC_MINUTE,eax,FALSE
               
                mov        eax,OlymTimeCount
                invoke        SetDlgItemInt,hWinMain,IDC_SECOND,eax,FALSE
                popad
                ret
               
_Getlocaltime        endp
;======================================================================
_ProcDlgMain        proc        uses ebx edi esi,hWnd,uMsg,wParam,IParam
                mov        eax,uMsg
               
                .if        eax == WM_INITDIALOG
                        push        hWnd
                        pop        hWinMain
                        invoke        LoadIcon,hInstance,ICO_MAIN
                        invoke        SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
                        invoke        LoadBitmap,hInstance,IDB_MAIN
                        mov        hBmp,eax
                        invoke        SendDlgItemMessage,hWnd,IDC_BMP,STM_SETIMAGE,IMAGE_BITMAP,hBmp
                        invoke        SetTimer,NULL,NULL,1000,addr _Getlocaltime
                        mov        idTimer,eax
                       
                .elseif        eax == WM_COMMAND
                        mov        eax,wParam
                        .if        ax == IDCANCEL
                                invoke        KillTimer,NULL,idTimer
                                invoke        EndDialog,hWnd,NULL
                        .endif
                               
                .elseif        eax == WM_CLOSE
                        invoke        KillTimer,NULL,idTimer
                        invoke        EndDialog,hWnd,NULL
                       
                .else
                        mov        eax,FALSE
                        ret
                .endif
                mov        eax,TRUE
                ret
                       
_ProcDlgMain        endp
;========================================================================
start:
                invoke        GetModuleHandle,NULL
                mov        hInstance,eax
                invoke        DialogBoxParam,hInstance,ID_DIALOG,NULL,offset _ProcDlgMain,NULL
                invoke        ExitProcess,NULL
               
                end        start[/mw_shl_code]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 参与我们

本版积分规则

QQ|Archiver|手机版|小黑屋|应天社区 ( 湘ICP备17015224号 )

GMT+8, 2024-12-22 18:19 , Processed in 0.093750 second(s), 25 queries .

Powered by Discuz!

© 2001-2017 Comsenz Inc.


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@yzqz.cn

快速回复 返回顶部 返回列表