interrupciones del procesador y teclado

23
UNIVERSIDAD NACIONAL DE PIURA FACULTAD DE INGENIERÍA INDUSTRIAL ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA

Upload: gerardo-pingo

Post on 25-Dec-2015

234 views

Category:

Documents


6 download

DESCRIPTION

En este trabajo se descrriben las interrupciones del procesador y las asociadas al teclado

TRANSCRIPT

UNIVERSIDAD NACIONAL DE PIURAFACULTAD DE INGENIERÍA INDUSTRIAL

 ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA

INTRODUCCION El teclado es uno de los dispositivos más usados y conocidos en el mundo de la informática. Su misión es la de interfaz entre el usuario y la maquina. Es decir la comunicación entre ambos.Para llevar a cabo esta comunicación, el primer paso es la activación de la tecla por parte del usuario. De ello resulta una señal eléctrica que expresa la posición de la tecla, esta señal se gestiona en el procesador del teclado, que se encuentra directamente en el. El presente trabajo de investigación, consta en su contenido sobre las interrupciones y funciones que se asocian al teclado y podernos dar cuenta de la importancia de las de las mismas que nacen de la necesidad de ejecutar un proceso en un instante preciso, y por tanto se considera su intervención. Cuando termina la ejecución de este proceso, la CPU vuelve al programa principal, continuando su tarea cíclica justo donde se dejo. También cabe señalar que abordaremos temas tales como: interrupciones de Intel 8086 y como es que se gestionan, conoceremos acerca de buffer del teclado y su estado, así como también la interrupción 16h que maneja la entrada y salida del teclado, así como sus funciones.

Interrupciones del procesador

Interrupción.- Evento que altera la secuencia en el momento que el procesador ejecuta las instrucciones. Es generada por el hardware del sistema de cómputo.

Esto es lo que pasa cuando ocurre la interrupción

El sistema operativo toma el control (es decir, el hardware pasa el control al sistema operativo).

El sistema operativo guarda el estado del proceso interrumpido. En muchos sistemas esta información se guarda en el bloque de control de proceso interrumpido.

El sistema operativo analiza la interrupción y transfiere el control a la rutina apropiada para atenderla; en muchos sistemas actuales el hardware se encarga de esto automáticamente.

La rutina del manejador de interrupciones procesa la interrupción.

Se restablece el estado del proceso interrumpido (o del “siguiente proceso”).

Se ejecuta el proceso interrumpido (o el “siguiente proceso”).

Clases de Interrupciones   Existen seis clases de interrupciones:

Interrupciones SVC (supervisor call, llamadas al supervisor).

Interrupciones de E/S. Interrupciones externas. Interrupciones de Reinicio. Interrupciones de verificación del

programa. Interrupciones de verificación de la

máquina.

¿QUE SON LAS INTERRUPCIONES DEL INTEL 8086?

Son señales enviadas por alguno de los periféricos que advierten al procesador que ha habido actividad en dicho periférico.

Por ejemplo cuando pulsamos alguna tecla, el teclado envía una señal de que ha sido pulsada una tecla a su vez envía el código binario de la tecla pulsada.

¿CÓMO SE GESTIONAN LAS INTERRUPCIONES DEL INTEL 8086?

Las interrupciones del Intel 8086 se gestionan por el Controlador de interrupciones.

Dicho controlador tiene cuatro registros (memorias) de 16 bits cada uno. Cada uno de estos registros tiene una función específica y gracias a ellos se van a gestionar funciones como las prioridades de los periféricos, peticiones de servicio etc.

Los Registro

Registro IRR

marca las peticiones de los periféricos

Registro IMR

lógica que selecciona la prioridad

Registro IPR

está en el puerto 21h y da permisos a las peticiones

de las interrupciones. Pasa si es 0 y no pasa si es 1.

está en el puerto 20h y es el encargado de avisar al

procesador que ha ocurrido una interrupción

Registro de

Control

marca que peticiones se están

activando

Registro ISR

CICLO DE RECONOCIMIENTO DE INTERRUPCIÓN  

 1.- Tras la activación de una línea IR, el controlador activa la salida INTR señalándole a la CPU la existencia de una interrupción activada.

2.- Al recibir la señal, el procesador da un pulso en su salida INTA indicando que comienza un ciclo de reconocimiento de interrupción. (En el modo máximo la respuesta será el código de reconocimiento de interrupción en las señales S0-2 que será utilizado por el controlador de bus para generar la señal INTA)

3.- Al recibir el controlador el pulso por su entrada INTA comienza a arbitrar las interrupciones recibidas y selecciona la más prioritaria.

4.- Se emite un segundo pulso por la línea INTA del procesador (o controlador de bus) que utiliza el controlador para depositar en el bus el vector correspondiente a la interrupción de mayor prioridad.

5.- El procesador obtiene la dirección de la rutina de interrupción a partir de este dato y salta a ella. Almacena el registro de flags y la dirección de retorno, deshabilita las interrupciones y comienza a ejecutar la rutina. 

 

EL TECLADO

El teclado se comunica con la BIOS a través de puertos de comunicación controlados por las interrupciones de la BIOS.

Cada vez que se pulsa una tecla se generan dos bytes de información sobre la tecla pulsada:

El identificador de la tecla llamado también byte auxiliar o primer código.

El código ASCII correspondiente a esa tecla si existe llamado también byte auxiliar o segundo código.

EL TECLADO

En el caso de que el segundo código sea cero, ello indica que la tecla es especial y que no existe código ASCII asociado como por ejemplo las teclas de funciones, las teclas de control del cursor, etc. En este caso deben de examinarse el primer código que es normalmente el identificador de la tecla y que se llama código extendido.

En el teclado se pueden pulsar combinaciones de teclas, estas teclas se llaman modificadores (Alt, Shift, Ctrl...).

  En el caso de que se teclee directamente el código ASCII

(alt + número decimal del código), el primer código será cero y el segundo código contiene el código tecleado.

BUFFER DEL TECLADO

El código de las teclas que se van pulsando en el teclado, pasan a una memoria o buffer de 30 bytes, si cada tecla tiene dos bytes asociados, esta memoria o buffer podrá guardar los códigos correspondientes a las últimas 15 teclas pulsadas

BYTES DE ESTADO DEL

TECLADO

Distribución de los bits dentro del byte

“KB_FLAG”

Distribución de los bits dentro del byte “KB_FLAG_1”

0. Tecla Shift derecha (Pulsado = 1).1. Tecla Shift izquierda (Pulsado = 1).2. Tecla CTRL (Pulsado = 1).3. Tecla ALT (Pulsado = 1).4. Tecla Bloque Desplazamiento (Encendido = 1)5. Tecla Bloque Numérico (Encendido = 1)6. Tecla Bloque Mayúsculas (Encendido = 1)7. Tecla Insertar (Encendido = 1)

0. No se usa.1. No se usa.2. No se usa.3. CTRL Bloque numérico (Encendido = 1).4. Tecla Bloque Desplazamiento (Pulsado = 1).5. Tecla Bloque Numérico (Pulsado = 1).6. Tecla Bloque Mayúsculas (Pulsado = 1).7. Tecla Insertar (Pulsado = 1).

INTERRUPCIONES ASOCIADAS AL TECLADO

Tiene dos significados distintos, aunque relacionados: Para software de alto nivel, es una condición especial (a

menudo un código de error o una excepción , generada normalmente desde el teclado. La combinación usada suele ser Control-C (de 'Cancelar'). Se usa en algunos lenguajes de programación para permitir salir de un bucle infinito o programa muy largo en el interprete de comandos sin tener que finalizar todo el proceso.

  Para software de bajo nivel y hardware, una interrupción

de teclado es la interrupción que se genera cada vez que se presiona alguna tecla (no necesariamente una combinación especial) para ayudar a la CPU a manejar la entrada. Una de estas interrupciones puede generar la propagación de una interrupción de las anteriores.

 

INTERRUPCIONES ASOCIADAS AL TECLADO

Int 16h

se encarga de controlar el teclado

del PC

obtener el estado del buffer del teclado, etc.

se encarga de recoger las

pulsaciones del teclado

Lista de servicios de la

INT 16h

AH = 00h Teclado Leer pulsación de tecla

AH = 01h TecladoObtener el estado del buffer del teclado

AH = 02h Teclado Obtener el estado del teclado

AH = 03h TecladoEstablecer factor de repetición

AH = 05h TecladoSimular la pulsación de una tecla

AH = 0Ah Teclado Obtener el ID del teclado

AH = 10h Teclado expandidoLeer carácter del teclado expandido

AH = 11h Teclado expandidoObtener estado del buffer del teclado expandido

AH = 12h Teclado expandidoObtener estado del teclado expandido

COMPROBAR SI HAY CARACTERES EN EL BUFFER DEL TECLADO

Con este servicio podemos examinar el buffer del teclado para saber si hay alguna tecla que ha sido pulsada y aún no ha sido atendida.

Entrada: AH = 01h Salida: Si el buffer está vacío pone ZF = 1.

Si el buffer no está vacío pone:

ZF = 0.

AH = byte auxiliar de la tecla pulsada.

AL = Código ASCII del carácter pulsado.

LECTURA DEL BYTE DE ESTADO DEL TECLADO

Con este servicio podemos leer el byte de estado del teclado “KB_FLAG” que nos informa del estado de pulsación o no de las teclas modificadoras.

Entrada: AH = 02H Salida: AL = byte de estado del teclado

LEER UN CARÁCTER DEL TECLADO SIN ECO Y SIN CHEQUEO DE BREAK

Esta función no espera a que se pulse una tecla en el caso de que se haya pulsado alguna tecla, el carácter quedará recogido en AL, pero si no ha sido pulsada ninguna tecla el registro AL quedará a cero.

Entrada: AH = 06H Salida: AL = Carácter tecleado (0 si no se ha pulsado nada).

ESPERAR PARA LEER CARÁCTER DEL TECLADO SIN ECO Y SIN CONTROL DE

BREAKEspera a que el usuario pulse una tecla y la devuelve en AL sin

escribirla en pantalla y sin atender a posibles pulsaciones de CTRL + Break.

Entrada: AH = 07H Salida: AL = Carácter tecleado (0 si no se ha pulsado nada).

ESPERAR PARA LEER CARÁCTER DEL TECLADO SIN ECO Y SIN CONTROL DE BREAK

Espera a que el usuario pulse una tecla y la devuelve en AL sin escribirla en pantalla y sin atender a posibles pulsaciones de CTRL + Break.

Entrada: AH = 07H Salida: AL = Carácter tecleado (0 si no se ha pulsado nada).

LEER CARACTERES DE TECLADO Y ALMACENARLOS EN MEMORIA

Espera a que el usuario teclee una serie de caracteres finalizados por la tecla ENTER y los almacena en una zona de memoria. Estos caracteres quedan almacenados en la dirección indicada en DS:DX y el primer byte de esta zona de memoria indica el número máximo de caracteres que caben incluido el enter. Tras llamar a esta función, el segundo byte de este bloque de memoria especifica el número de caracteres que el usuario a tecleado y que comienzan a partir del tercer byte.

Entrada: AH = 0AH

DS:DX= dirección del área de memoria.

CHEQUEA SI HAY ALGÚN CARÁCTER DISPONIBLE (CON CHEQUEO DE CTRL +

BREAK)Comprueba si el usuario ha tecleado algún carácter y devuelve el

valor FFh en el registro AL en el caso de que haya alguno esperando cero si el buffer del teclado está vacío.

Entrada: AH = 0BH Salida: AL = FFh si carácter disponible.

AL = 00h si carácter no disponible.

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 ;Funcionteletype

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