La Web del Programador: Comunidad de Programadores
 
    Pregunta:  58345 - HORA DEL SISTEMA
Autor:  diana miranda
hola me pueden ayudar por favor...necesito imrpimir en la pantalla la hora del sistema conla funcion 2Ch de lainterrupcion 21h el porblema es que al momento de imrpimir me salen caracteres ascii y nolos numeros que deberian salir... como cambio ese codigo para que salga eñ numero especifico y no el simbolo.por fa ayudenme de urgencia

  Respuesta:  yerko chapanoff
Diana,
lo que pasa es que la instrucción para imprimir, lo que hace es imprimir el caracter ascii correspondiente al hexa que esté cargado en DL. Ahora supongamos que son las 5, rescatas la hora y se la asignas a DL y la imprimes directo: te aparecerá un caracter extraño, ya que ese caracter extraño es el equivalente en la tabla ascii al 5 en hexa.
Para corregir esto, hay un simple truco que consiste en sumarle 30h al valor hexa original, con lo cua se obtiene el valor hexa correspondiente al caracter deseado, en este caso "5". Suponiendo que tienes cargado el 5H en DL, haces ADD DL, 30H (quedará DL=35h) y luego MOV AH, 02H y luego INT 21, lo cual imprimirá el caracter equivalente al 35H en la tabla ascii que si revisas verás que es justamente el caracter "5".

Ahora este truco funciona sólo para un dígito, por lo que si tienes un número que tenga dos dígitos como la hora, lo que tienes que hacer primero es separar este número en 2 dígitos y luego aplicar el truco anterior para cada uno. Como los separamos? muy sencillo, tomas el número de 2 dígitos y lo divides por 10 (A en hexa), tras lo cual te quedará en el cuociente la decena (0 a 9) y en el resto las unidades (0 a 9). Ahora para la decena aplicas el truco anterior y lo imprimes, lo mismo para las unidades y ya tendrás la hora impresa por pantalla.

saludos,
Yerko Chapanoff