Least Significant Bit

All in all we’re just another bit in the word

Resumen de las interrupciones del 8086

Posted by jayzeegp en agosto 21, 2008

En esta entrada vamos a hablar de las diferentes interrupciones para el microprocesador 8086.

Concepto: se interrumpe un programa que se está ejecutando en el procesador para tratar un proceso que se considera más urgente. Cuando termina la ejecución de este proceso, el procesador vuelve al programa interrumpido continuando donde lo tenía suspendido.

Pueden ser inicializadas por:

  • Periféricos: la interrupción será en ese caso EXTERNA, y debe enviarse a la entrada NMI o a la INTR. La primera no se puede enmascarar y la segunda es enmascarable por programa.
  • Por el propio 8086: produciendo una interrupción INTERNA.

La tabla de vectorización: toda interrupción aceptada conduce a la ejecución de un subprograma específico cuya dirección de comienzo (llamada puntero) se indica en las cuatro posiciones de memoria de una tabla. Las dos primeras contienen la dirección de base del segmento y las dos últimas el desplazamiento.

Durante la aceptación de la interrupción, el 8086 carga la dirección de base en el registro CS y el desplazamiento en el contador de programa IP.

El usuario puede elegir para cada una de las interrupciones internas y externas de su aplicación un número de vector entre 32 y 255. De la 5 a la 31 están reservadas por Intel y desde el 0 al 4 son las interrupciones ya definidas de este modo:

00010H Vector 4 Rebasamiento de capacidad (No enmascarable)

0000CH Vector 3 Punto de parada de software

00008H Vector 2 Interrupción NMI (No enmascarable)

00004H Vector 1 Paso a paso (modo traza) (Poner a 0 el bit T)

00000H Vector 0 División por 0 (No enmascarable)

Las interrupciones externas: como ya hemos dicho son generadas por periféricos. Las hay de tres tipos:

  • RESET (+ Prioridad) ACTIVA A ALTA
  • NMI ACTIVA POR FLANCO DE SUBIDA
  • INTR (- Prioridad) ACTIVA A ALTA

Reset:

ACTIVO A ALTA

Es una petición externa particular:

  • No puede recibir una petición de interrupción proveniente de un periférico.
  • La dirección de base del subprograma correspondiente no está contenida en la tabla de vectorización.
  • El microprocesador salta automáticamente a la dirección FFFF0H, donde el usuario coloca una instrucción de salto (JMP) que bifurca al 8086 al comienzo del programa.
  • Si se pone a 1 durante al menos 4 ciclos de reloj, desencadena el paro de toda actividad en el 8086.

NMI:

ACTIVA POR FLANCO ASCENDENTE

  • Se reserva para acontecimientos graves como:
    • Corte accidental de la alimentación
    • Un error de memoria
    • Un fallo de calidad en el bus
  • El vector asociado lleva el número 2.
  • La aceptación de una petición de interrupción sobre esta entrada comienza al final de la instrucción en curso.
  • Salva en la pila el contenido del registro de estado y luego el de los registros CS e IP. Coloca a cero los bits de estado I y T, lo que inhibe las interrupciones y el funcionamiento paso a paso.
  • A continuación, ejecuta el proceso de salto al subprograma relativo al vector 2, lo que consiste en cargar el puntero de este vector en los registros CS e IP.

INTR:

ACTIVA A ALTA

  • Es enmascarable mediante el bit I del registro de estado.
  • Si el programa ha autorizado las interrupciones, la CPU termina la instrucción en curso y ejecuta la secuencia de aceptación de la interrupción:
    • Guardar el contenido del registro de estado seguido por la dirección de retorno expresada por el contenido de los registros CS e IP.
    • Generar dos ciclos INTA’
      • Primer ciclo: el bus multiplexado está en estado de alta impedancia.
      • Segundo ciclo: la CPU lee el vector del bus de datos, es decir, el nº de la interrupción. Este número lo debe colocar directa o indirectamente el periférico en el bus de datos.
    • Multiplicar el vector por cuatro para obtener la primera dirección del puntero de la interrupción, es decir, la dirección del subprograma relativo a esta interrupción.
    • Esta dirección de 32 bits se carga en los registros CS e IP. El 8086 ejecuta el subprograma, que termina con una instrucción IRET cuya ejecución restituye en CS e IP la dirección de retorno salvada en la pila y en el registro de estado el valor de los indicadores.

Haz clic en la imagen para ir a una pagina interesante sobre el 8086

Interrupciones internas:

  • Automáticas
  • Por software

Interrupciones automáticas:

  • Interrupción 0 -> división imposible: esta interrupción se produce cuando el cociente de una división es demasiado grande para el registro previsto, lo que se produce en especial en el caso de una división por cero. Esta interrupción es NO ENMASCARABLE.
  • Interrupción 1 -> funcionamiento paso a paso (modo traza)
    • Si el programador coloca a 1 el bit T, el 8086 genera una interrupción interna al final de la ejecución de una instrucción.
    • El programador puede mostrar el contenido de los registros en el subprograma asociado al vector 1 y se tiene entonces un funcionamiento paso a paso.
    • El subprograma se termina con la instrucción IRET que restituye el contenido del registro de estado salvado en la pila de tal manera que el bit de eestado T vuelva a colocarse a 1 para continuar con el funcionamiento paso a paso.
  • Interrupción 4 -> rebasameinto de capacidad: se produce si se ha colocado a 1 el bit de estado O (Overflow) en el registro de estado debido a un rebasamiento de capacidad y si se ha insertado previamente y se ha ejecutado en el programa una instrucción INTO. Esta instrucción es especifica de un rebsamiento de capacidad y NO ES ENMASCARABLE.

Aunque estas tres interrupciones sean automáticas, las dos últimas necesitan una acción deliberada del programador.

Interrupciones por software:

  • Interrupción 3 -> punto de parada de software: esta interrupción es gnerada por el 8086 cuando se ejecuta la instrucción INT codificada en un solo objeto. La inserción de esta instrucción en el programa facililta la puesta a punto del mismo mediante la clásica técnica de los puntos de parada.
  • Interrupción N -> INT N (N distinto de 3): se expresa en dos bytes, indicando el segundo el número de la interrupción. No genera ciclos INTA’, ya que el vector lo suministra en la misma instrucción, lo cual pone a 0, I y T, lo que prohíbe las interrupciones y el funcionamiento paso a paso.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: