Int 16h

De Wikipedia, la enciclopedia libre
Ir a la navegación Ir a la búsqueda

INT 16h es la forma abreviada de la interrupción 0x16. Esta interrupción se encarga de controlar el teclado del PC.

Características[editar]

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).

Lista de servicios[editar]

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

INT 16h AH=00h - Leer pulsación de tecla[editar]

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

Véase también[editar]

Enlaces externos[editar]