汇编语言GetDateTime代码分析(20)
2009-10-23 11:56
267 查看
本文代码来自于《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
代码结束。
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
代码结束。
相关文章推荐
- 汇编语言32位控制台读取用户输入字符程序代码分析(17)
- 高级语言的一段汇编代码分析
- 32位汇编语言学习笔记(10)--分析for循环的汇编代码
- 汇编语言表格驱动分支选择代码分析(4)
- 汇编语言裁剪字符串代码分析(11)?
- 汇编代码对应的高级语言分析
- 汇编语言醉汉走路代码分析(15)
- 汇编语言写文件读文件代码分析(18)
- 汇编语言数组求和代码分析
- 王爽 汇编语言第二版 实验8 代码详细分析
- 汇编语言AAA指令多字节加法代码分析(5)
- 汇编语言冒泡排序算法代码分析(12)
- 32位汇编语言学习笔记(8)--分析do-while循环的汇编代码
- 汇编代码对应的高级语言分析
- 汇编语言计时器代码分析(19)
- 汇编语言值传递和引用传递代码分析(6)
- 汇编语言二分查找排序代码分析(13)
- 32位汇编语言学习笔记(9)--分析while循环的汇编代码
- linux 内核源代码情景分析——linux 内核源码中的汇编语言代码
- 汇编语言秒表程序代码分析(21)