汇编语言GetDateTime代码分析(20)

 

 

本文代码来自于《Intel汇编语言程序设计》(第四版)第11章---------32位windows编程。

 

GetDateTime其实是作者Irvine32库文件中的一个函数,它用来返回一个64位的整数,这个数值是自1601年1月1日开始的以100纳秒为单位的计数值。重要的是微软使用这个数值来作为文件的日期和时间。WIN32 SDK文档中给出的获得系统日期和时间的步骤如下:

 

1.调用一个函数(例如GetLocalTime)来填写SYSTEMTIME结构。

2.用SystemTimeToFileTime函数来讲SYSTEMTIME结构转换到FILETIME结构。

3.将FILETIME结构中的结果拷贝到一个64位的QWORD中。

 

其中FILETIME结构将一个64位的QWORD值划分为2个DWORD值:

 

FILETIME STRUCT

      loDateTime DWORD ?

      hiDateTime DWORD ?

FILETIME ENDS

 

 

下面是GetDateTime函数代码:

 

;------------------------------------------------------------------------------------

GetDateTime PROC

      pStartTime : PTR QWORD                ; 程序接收一个指向QWORD的指针

      LOCAL sysTime : SYSTEMTIME , fileTime : FILETIME    ; 程序定义了两个局部变量,分别是SYSTEMTIME 类型和FILETIME 类型

;

; Gets and saves the  current local date/time as a

; 64-bit integer ( in the Win32 FILETIME format).

;------------------------------------------------------------------------------------

; Get the system local time

       INVOKE GetLocalTime ,             ; 按照微软的建议,先得到一个时间,将它填充到SYSTEMTIME 结构中

       ADDR sysTime

 

; Convert the SYSTEMTIME to FILETIME

       INVOKE SystemTimeToFileTime,   ; 然后又按照微软的建议,将SYSTEMTIME 结构中的内容填充到FILETIME结构中

       ADDR sysTime,          ; SYSTEMTIME 结构

       ADDR flTime              ; FILETIME 结构

 

; Copy the FILETIME to a 64-bit integer

       mov esi , pStartTime               ; 然后我们再按照微软的建议执行第三步,这里先得到这个64位QWORD的地址

       mov eax , flTime.loDateTime   ; 将FILETIME 结构中的loDateTime段赋给eax

       mov DWORD PTR [esi] , eax    ; 讲eax 赋值到64位的pStartTime的低4字节中

       mov eax ,  flTime.hiDateTime   ; 将FILETIME 结构中的hiDateTime段赋给eax

       mov DWORD PTR [esi+4] , eax  ; 讲eax 赋值到64位的pStartTime的高4字节中

       ret                                          ; 按照微软的建议,我们得到了日期和时间,返回主函数

GetDateTime ENDP

 

 

 

代码结束。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值