;将双字转换为十六进制字符串
;mov ecx, 16
DWordToStr proc dwValue : DWORD, szBuf :DWORD, dwSize : DWORD ; convert dword to string LOCAL szTemp[MAX_PATH] : byte ; save the regs push ebx push ecx push esi push edi ; reset the index xor ebx, ebx ; load the destions addr lea edi, szTemp ; set the de-Diver mov ecx, 16 ; save dwValue mov eax, dwValue xor edx, edx ; edx = 0, eax = dwValue ; if dwValue == 0, no need to deal .if eax == 0 mov byte ptr [edi + ebx], '0' ; szTemp[0] = '0' inc ebx ; number cnt = 0 .endif ; loop to count each dex number .while eax > 0 div ecx .if dl < 10 mov byte ptr [edi + ebx], '0' ; szTemp[nIndex] = '0' .else mov byte ptr [edi + ebx], 'A' sub dl, 10 .endif add byte ptr [edi + ebx], dl ; szTemp[nIndex] = '0' + number inc ebx ; ebx += 1 xor edx, edx .endw lea esi, szTemp mov edi, szBuf mov ecx, ebx xor ebx, ebx ; reverse the szTemp .while ecx > 0 mov al, byte ptr[esi + ecx - 1] mov byte ptr[edi + ebx], al inc ebx dec ecx .endw ; restore the regs and return pop edi pop esi pop ecx pop ebx ret DWordToStr endp