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:
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