INT 16h es la forma abreviada de la interrupción 0x16. Esta interrupción se encarga de controlar el teclado del PC.
Esta interrupción se encarga de obtener funcionalidades básicas del teclado, es decir, se encarga de recoger las pulsaciones del teclado, obtener el estado del buffer del teclado, etc. La codificación estándar del teclado que ofrece la INT 16h es de un teclado Estadounidense. Para adaptar la codificación de la INT 16h a otro tipo de teclado (por ejemplo, un teclado español) hay que atender al scan-code de la tecla pulsada y realizar las operaciones convenientes para interpretar la tecla que se desea.
En los teclados de 101 letras o más, existen unas teclas que la INT 16h las interpreta como teclas expandidas, que tienen un scan-code distinto al de las teclas normales (por ejemplo, la tecla pausa).
AH = 00h | Teclado | Leer pulsación de tecla |
AH = 01h | Teclado | Obtener el estado del buffer del teclado |
AH = 02h | Teclado | Obtener el estado del teclado |
AH = 03h | Teclado | Establecer factor de repetición |
AH = 05h | Teclado | Simular la pulsación de una tecla |
AH = 0Ah | Teclado | Obtener el ID del teclado |
AH = 10h | Teclado expandido | Leer carácter del teclado expandido |
AH = 11h | Teclado expandido | Obtener estado del buffer del teclado expandido |
AH = 12h | Teclado expandido | Obtener estado del teclado expandido |
Parámetros:
AH = 00h | Leer pulsación de tecla |
Retorna:
AH = ?? | Scan-code de la tecla pulsada |
AL = ?? | Caracter ASCII de la tecla pulsada |
Ejemplo:
;Este ejemplo lee una tecla del teclado y si la tecla pulsada es la de la tecla "ñ" hace las modificaciones para
;que el contenido en AL sea la ñ.
inicio:
CALL leertecla ;Llamamos a la funcion de leer una tecla
MOV AH,0Eh ;Funcion teletype
INT 10h ;Mostramos la tecla en pantalla
JMP inicio ;Hacemos un bucle eterno
leertecla:
XOR AX,AX ;Funcion 0
INT 16h ;Llamamos al teclado
CMP AH,27h ;¿El scancode corresponde con el scancode de la tecla "ñ"?
JE cambiarletra ;Sí, así que cambiamos el contenido de AL
RET ;No, así que no realizamos otra operación
cambiarletra:
MOV AL,0A4h ;Ponemos la letra "ñ" en AL
RET ;Volvemos de la rutina