itoa PROC ; IN: EAX = INT32, ECX = *psz
push edi
test eax, eax
mov edi, ecx
jnz short noZero
lea eax, [ecx+1]
mov byte ptr[ecx], '0'
pop edi
mov byte ptr[eax], 0
ret 0
noZero:
jge short supEgZero
mov byte ptr [edi], '-'
neg eax
inc edi
supEgZero:
push esi
mov ecx, eax
mov esi, edi
supZero:
mov eax, -858993459
mul ecx
mov eax, edx
shr eax, 3 ; EAX = EAX / 10
mov edx, ecx ; EDX = old EAX
lea ecx, [eax+eax*4]
add ecx, ecx ; ECX = EAX * 10
sub edx, ecx ; EDX = EAX % 10
add dl, '0'
mov [edi], dl
mov ecx, eax
inc edi
test eax, eax
jnz short supZero
mov byte ptr[edi], 0
mov eax, edi
reverStr:
cmp esi, edi
jae i32toaExit
dec edi
mov cl, [esi]
mov dl, [edi]
mov [edi], cl
mov [esi], dl
inc esi
jmp short reverStr
i32toaExit:
pop esi
pop edi
ret 0
itoa ENDP
mets la valeur dans EAX et l'adresse d'un buffer dans ECX puis
call itoa
ciao...
[ Lien ]BruNews, MVP VC++