用MASM32按Time Protocol(RFC868)協議編寫網路對時程式中的一些有用的函數代碼

來源:互聯網
上載者:User

  這幾天在用MASM32按Time Protocol(RFC868)協議編寫網路對時程式,現在基本完成了。將其中一些有用的函數代碼整理了一下。

  我們需要將本地系統時間轉換為UTC格式發送給時間伺服器,相關轉碼如下:

 

BaseTimeLow equ 0D53E8000h
BaseTimeHigh equ 19DB1DEh
;:::::::::::::::::::::::::::::::::::::::::::::::::::
FileTime2DateStamp proc lpFileTime: dword
;:::::::::::::::::::::::::::::::::::::::::::::::::::
 mov ecx, lpFileTime
 mov eax, [ecx]
 mov edx, [ecx+4]
 sub eax, BaseTimeLow
 sbb edx, BaseTimeHigh

 mov ecx, 10000000
 div ecx

 RET
FileTime2DateStamp endp

;::::::::::::::::::::::::::::::::::::::::
GetLocalTimeStamp proc
;::::::::::::::::::::::::::::::::::::::::
    local stSystemTime: SYSTEMTIME
    local stFileTime: FILETIME

    invoke GetSystemTime, addr stSystemTime
    invoke SystemTimeToFileTime, addr stSystemTime, addr stFileTime
    invoke FileTime2DateStamp, addr stFileTime

    ret
GetLocalTimeStamp endp

 

  時間伺服器返回的是從1900年1月1日午夜到現在的秒數,將其轉換為本地時間的相關代碼如下:

 

;::::::::::::::::::::::::::::::::::::::::::::::::::::
_MemCpy proc  lpD, lpS, dwSize
;::::::::::::::::::::::::::::::::::::::::::::::::::::
    mov     esi, lpS
    mov     edi, lpD
    mov     ecx, dwSize
    rep     movsb

    ret
_MemCpy endp

g_szFmtDateTime db "%d-%d-%d %d:%d:%d", 0
;::::::::::::::::::::::::::::::::::::::::::::::::::::
printDateTime proc dwTimeStamp: dword
;::::::::::::::::::::::::::::::::::::::::::::::::::::
    local buf[30]: byte
    local stSysTime: SYSTEMTIME
    local stFileTime: FILETIME
    local stLocFileTime: FILETIME
    local li: LARGE_INTEGER

    
    invoke RtlZeroMemory, addr stSysTime, sizeof stSysTime
    
    mov stSysTime.wYear, 1900
    mov stSysTime.wMonth, 1
    mov stSysTime.wDay, 1
    
    invoke SystemTimeToFileTime, addr stSysTime, addr stFileTime
    invoke _MemCpy, addr li, addr stFileTime, sizeof stFileTime

    mov eax,  dwTimeStamp
    mov  edx, 10000000
    mul  edx; edx=10000000

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

    invoke _MemCpy, addr  stFileTime, addr li, sizeof li
    invoke FileTimeToLocalFileTime, addr stFileTime, addr stLocFileTime

    lea edi, stSysTime

    ;push edi
    invoke FileTimeToSystemTime, addr stLocFileTime, edi    ;edi=addr stSysTime
    ;pop edi


    movzx eax, (SYSTEMTIME ptr [edi]).wYear
    movzx ebx, (SYSTEMTIME ptr [edi]).wMonth
    movzx ecx, (SYSTEMTIME ptr [edi]).wDay
    movzx edx, (SYSTEMTIME ptr [edi]).wHour
    movzx esi, (SYSTEMTIME ptr [edi]).wMinute
    movzx edi, (SYSTEMTIME ptr [edi]).wSecond

    invoke wsprintf, addr buf, addr g_szFmtDateTime, eax, ebx, ecx,edx, esi, edi
    invoke StdOut, addr buf

    ret
printDateTime endp

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.