Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/05/2007, 03:05
Avatar de Eternal Idol
Eternal Idol
 
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 9 meses
Puntos: 74
Re: MASM32-pasar valor hex a string

Pasar DWORDs no es un problema, es lo que acepta la pila y los registros comunes son de ese tamaño. El punto esta en que queres obtener el valor de ambas "cifras" decimales, es decir por cada byte original dos bytes en ASCII.

Para hacerlo tenes que pasarle a wsprintf (siguiendo el ejemplo de tu primer numero) primero 4 y despues 2 y no 042h. Esto se logra facilmente desplazando bits y "desactivando bits".

Si tenes el 042h para obtener el 4 hacemos esto:
Código:
mov eax, 042h
shr eax, 4
Para obtener el 2 hacemos:
Código:
mov eax, 042h
and eax, 0Fh
Estos numeros estan en hex/decimal (son solo bases) y los queremos en ASCII por lo tanto les sumamos el valor de '0' (48) antes de pasarselo a wsprintfA y aca un simple ejemplo para terminar:

Código:
.data
  hex_str db 12 dup(0)
  hex_format db "%x-%x", 0
.code
main:
	mov eax, 042h
	mov ecx, eax
	shr eax, 4
	add eax, '0'
	and ecx, 0Fh
	add ecx, '0'
	invoke wsprintfA, offset hex_str, offset hex_format, eax, ecx
	invoke MessageBoxA, 0, offset hex_str, offset hex_str, 0
	ret
end main
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO