Duda de ensamblador

¿Alguien sabe como terminar la ejecución de un programa en ensamblador cuando el usuario pulse la tecla Return?

Yo lo que hacía hasta ahora era esto:
mov ah,01h
int 21h
cmp al,0Dh
je TERMINA

El problema de esto es que aunque cuando pulses Return salte a TERMINA, el programa se queda constantemente esperando a que pulses alguna tecla. Yo lo que quiero es que el programa vaya a su bola y cuando se pulse Return, se termine.

Supongo que esto se hara con interrupciones, pero ¿habría alguna forma de hacerlo sin? Creo que no pero weno :p
Pues hace mucho que no toco el ensamblador
pero a parte de por interrupciones (que seria la forma más
correcta) creando tu propio manejador de interrupción.

Creo recordar que hay formas de sondear las teclas
del teclado sin bloquear el programa
(una interrupcion que te dice si el buffer del teclado
esta lleno)
De manera que dentro de el bucle principal del programa podrás hacer
que periódicamente revise si hay algo en el teclado.

Esto es menos ortodoxo pero no se me ocurre que se pueda hacer
de otro modo.

PD:
Esto iría mejor en pc-> varios
Depende de que ensamblador sea,yo nada mas que he usado uno pero,creo que depende
Perdon, esto es para un INTEL :-P

Harl, ¿sabrías hacerlo de alguna de las 2 formas?
Puedes hacer esto dentro de tu propio manejador de la interrupcion de teclado:

in al,60h
y en AL tendras el valor de la tecla. Pero es el Scancode, no el codigo ASCII. Es decir que el ESC por ejemplo es 01, no 27 :P

Si AL es 0xE0 es porque la tecla es una de las extendidas, en cuyo caso debes repetir el proceso para pillar su codigo.


P.D.- Esto funcionaba en MSDOS, igual si estas programando algo que vaya a funcionar bajo Windows o Linux hay algo que modifique el comportamiento de esta rutina. Solo lo digo para que conste, porque yo solo lo use en DOS XD
4 respuestas