用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码

  这几天在用MASM32按Time Protocol(RFC868)协议编写网络对时程序,现在基本完成了。将其中一些有用的函数代码整理了一下。

  我们需要将本地系统时间转换为UTC格式发送给时间服务器,相关转换代码如下:

BaseTimeLowequ0D53E8000h
BaseTimeHighequ19DB1DEh
;:::::::::::::::::::::::::::::::::::::::::::::::::::
FileTime2DateStampproclpFileTime:dword
;:::::::::::::::::::::::::::::::::::::::::::::::::::
movecx,lpFileTime
moveax,[ecx]
movedx,[ecx+4]
subeax,BaseTimeLow
sbbedx,BaseTimeHigh

movecx,10000000
divecx

RET
FileTime2DateStampendp


;::::::::::::::::::::::::::::::::::::::::
GetLocalTimeStampproc
;::::::::::::::::::::::::::::::::::::::::
localstSystemTime:SYSTEMTIME
localstFileTime:FILETIME

invokeGetSystemTime,addrstSystemTime
invokeSystemTimeToFileTime,addrstSystemTime,addrstFileTime
invokeFileTime2DateStamp,addrstFileTime

ret
GetLocalTimeStampendp


  时间服务器返回的是从1900年1月1日午夜到现在的秒数,将其转换为本地时间的相关代码如下:

;::::::::::::::::::::::::::::::::::::::::::::::::::::
_MemCpyproclpD,lpS,dwSize
;::::::::::::::::::::::::::::::::::::::::::::::::::::
movesi,lpS
movedi,lpD
movecx,dwSize
repmovsb

ret
_MemCpyendp


g_szFmtDateTimedb"%d-%d-%d%d:%d:%d",0
;::::::::::::::::::::::::::::::::::::::::::::::::::::
printDateTimeprocdwTimeStamp:dword
;::::::::::::::::::::::::::::::::::::::::::::::::::::
localbuf[30]:byte
localstSysTime:SYSTEMTIME
localstFileTime:FILETIME
localstLocFileTime:FILETIME
localli:LARGE_INTEGER


invokeRtlZeroMemory,addrstSysTime,sizeofstSysTime

movstSysTime.wYear,1900
movstSysTime.wMonth,1
movstSysTime.wDay,1

invokeSystemTimeToFileTime,addrstSysTime,addrstFileTime
invoke_MemCpy,addrli,addrstFileTime,sizeofstFileTime

moveax, dwTimeStamp
movedx,10000000
muledx;edx=10000000

leaedi,li.QuadPart
add[edi],eax
adc[edi+4],edx

invoke_MemCpy,addrstFileTime,addrli,sizeofli
invokeFileTimeToLocalFileTime,addrstFileTime,addrstLocFileTime

leaedi,stSysTime

;push edi
invokeFileTimeToSystemTime,addrstLocFileTime,edi;edi=addrstSysTime
;pop edi


movzxeax,(SYSTEMTIMEptr[edi]).wYear
movzxebx,(SYSTEMTIMEptr[edi]).wMonth
movzxecx,(SYSTEMTIMEptr[edi]).wDay
movzxedx,(SYSTEMTIMEptr[edi]).wHour
movzxesi,(SYSTEMTIMEptr[edi]).wMinute
movzxedi,(SYSTEMTIMEptr[edi]).wSecond

invokewsprintf,addrbuf,addrg_szFmtDateTime,eax,ebx,ecx,edx,esi,edi
invokeStdOut,addrbuf

ret
printDateTimeendp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值