Departamento de Sistemas e Informática Programación en Assembler - Clase 4 Digital II Interrupciones Una interrupción es una llamada generada por hardware (o software) que interrumpe al programa principal y transferirá el control a un procedimiento previamente definido (servicio de interrupción). Las interrupciones son de especial utilidad cuando se conectan dispositivos E/S que usualmente requiere su atención a velocidades de transferencias mas o menos bajas. (ej. Teclado) El 8086 tiene dos terminales de entrada a través de los cuales se solicitan interrupciones (INTR y NMI) y una de salida (INTA) que reconoce la interrupción solicitada. Adicionalmente existen instrucciones que pueden generar un ciclo de interrupción (INT, INTO, INT3, BOUND). Clase 4– Interrupciones y DVIO– Digital II 2 Interrupciones Vectores de Interrupción Es un número de 4 bytes, cada vector contiene la dirección (CS:IP) de un procedimiento de servicio de interrupción previamente establecido. Tabla de vectores de Interrupción (IVT) Existen 256 vectores de interrupción distintos que ocupan los primeros 1024 bytes de la memoria (00000h-003FFh). En un sistema estándar, los primeros 32 vectores están reservados para usos específicos el resto (32-255) están disponibles para el usuario. Clase 4– Interrupciones y DVIO– Digital II Tipo 255 … 0Ch – Tipo 3 Sobreflujo 08h – Tipo 2 NMI 04h – Tipo 1 Trap 00h - Tipo 0 División por cero 3 Interrupciones Mecanismo de interrupción Cuando el microprocesador termina la ejecución de una instrucción verifica si existe alguna interrupción activa (pines NMI, INTR o instrucción INT), si esto es así se desencadena el siguiente proceso: Se salva el contenido del registro de FLAGS en la pila Se desactivan las interrupciones (IF, TF) Se salva el contenido del registro CS en la pila. Se salva el contenido del registro IP en la pila. Se recupera el contenido del vector de la interrupción solicitada y se coloca en CS:IP de modo que se ejecute la rutina de servicio de interrupción. Clase 4– Interrupciones y DVIO– Digital II 4 Interrupciones Mecanismo de interrupción Las instrucciones STI y CLI activan y desactivan respectivamente las interrupciones. Para retornar de una rutina de servicio de interrupción debe utilizarse la instrucción IRET, la cual vuelve a habilitar las interrupciones deshabilitadas durante el llamado. Clase 4– Interrupciones y DVIO– Digital II 5 Dispositivos Virtuales I/O Espacio de entrada salida Como sabemos la instrucción mov [BX],AX graba datos en el espacio de memoria, en forma análoga las intrucciones in y out leen o escriben datos en otro espacio que conocemos como espacio de entrada salida. Usualmente en un sistema microprocesado en el espacio de entrada salida se mapean todos los dispositivos físicos que permiten al sistema comunicarse con el medio exterior. Cuando hablamos del espacio de entrada salida, en lugar de direcciones hablamos de “puertos” Clase 4– Interrupciones y DVIO– Digital II 6 Dispositivos Virtuales I/O Dispositivos virtuales Para poder utilizar el espacio de entrada salida en el emu8086 es necesario mapear dispositivos en él. En nuestro caso estos dispositivos son virtuales ya que están implementados por software que emulan el comportamiento de un dispositivo real. Llamamos dispositivos virtuales de Entrada/Salida (DVIO), a los elementos emulados por el módulo de software realizado por la Cátedra. Clase 4– Interrupciones y DVIO– Digital II 7 Dispositivos Virtuales I/O Mapa de entrada salida Los DVIO pueden dividirse en dispositivos de entrada, de salida o de entrada/salida según el sentido de la transferencia de datos. En nuestro caso los DVIO se encuentran mapeados según el esquema mostrado Clase 4– Interrupciones y DVIO– Digital II 8 Dispositivos Virtuales I/O Listado de interrupciones Algunos DVIO generan pedidos de interrupción al microprocesador cuando corresponde. La siguiente tabla muestra todos los dispositivos y en caso de generar interrupciones se indica su “tipo” Clase 4– Interrupciones y DVIO– Digital II 9 Dispositivos Virtuales I/O Ejemplo de DVIO utilizando interrupciones Escribir un programa en assembler que contabilice la cantidad de pulsaciones pares de un botón conectado al sistema. Ejemplos de DVIO sin utilizar interrupciones Referirse al help de los DVIO y sus correspondientes ejemplos de utilización. Clase 4– Interrupciones y DVIO– Digital II 10 Gracias! Clase3 – Pila y Procedimientos– Digital II 11