Muy buen post. Yo también tengo una función para pasar de Hex a ASCII:
La variable buffer la tengo definida asi:
Buffer db 1
y para usar la función:
stdcall Conversor_ASCII2 , eax
donde EAX es el valor Hex a pasar. La función retorna en EAX el número en ASCII.
Ya os habreis dado cuenta que esta función está pensada para números de 4 dígitos solamente, el motivo es que la uso para visualizar las coordenadas del ratón asi como otros datos que no requieren números grandes.
Se podría modificar para usar números más grandes, solamente que el valor no se devolvería en EAX sino en [Buffer].
Código [Seleccionar]
proc Conversor_ASCII2 uses ebx esi edi, datos
mov ecx, 3 ;Pongo el contador a 3
mov eax, [datos] ;Pongo en EAX el número a convertir
mov ebx, 0ah ;Se tendrá que dividir entre 10 = 0Ah
.repetir:
div bl ;AL = Resultado, AH =resto = número que importa.
mov [Buffer+ecx], ah ;Guardo aquí el resultado (AH).
add [Buffer+ecx],30h ;Le sumamos 30 para que quede el código en ascii
and eax, 0ffh ;Hacemos un filtro para dejar sólo AL (el resto)
dec ecx ;Restamos 1 al contador
cmp ecx, 0 ;Lo comparamos con 0
jl .fuera ;Si es inferior se sale
jmp .repetir ;Repetimos la operación, solo que ECX ahora vale menos.
.fuera:
mov eax, dword [Buffer] ;Ponemos en EAX el resultado.
ret ;Devolvemos el flujo del programa donde fue llamado
endp
La variable buffer la tengo definida asi:
Buffer db 1
y para usar la función:
stdcall Conversor_ASCII2 , eax
donde EAX es el valor Hex a pasar. La función retorna en EAX el número en ASCII.
Ya os habreis dado cuenta que esta función está pensada para números de 4 dígitos solamente, el motivo es que la uso para visualizar las coordenadas del ratón asi como otros datos que no requieren números grandes.
Se podría modificar para usar números más grandes, solamente que el valor no se devolvería en EAX sino en [Buffer].