;将双字转换为十六进制字符串
;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