Está en la página 1de 14

Arquitectura de Computadoras:

Interrupciones en Assembler
Docente: Lucas Benjamín Cicerchia

lucas.cicerchia@itt.unnoba.edu.ar
lbcicerchia@docentes.unsada.edu.ar
Interrupciones Assembler

¿Qué es una interrupción?

• Una interrupción es muy similar a una llamada a subrutina:


implica la suspensión del programa en ejecución y la
bifurcación hacia una rutina especial de atención a la
interrupción
• Existen dos tipos principales
• Interrupciones por hardware
• Interrupciones por software
Interrupciones Assembler

Interrupciones por Hardware

• Se dan en respuesta a eventos de hardware (ej. el usuario


presiona una tecla)
• Cuando se produce una interrupción por hardware, el
procesador interrumpe inmediatamente el programa en
ejecución y ejecuta la subrutina de atención a la
interrupción o ISR (Interrupt Service Routine)
• El programa interrumpido continuará luego de que
termine la ISR sin enterarse de que algo haya pasado ya
que:
• Antes de invocar a la ISR, el procesador salva el registro
de flags y la dirección del IP en la pila.
• Las ISR resguardan los valores de todos los registros
• Al terminar, la ISR restaura el valor de los registros
guardados y ejecuta la instrucción IRET que restaura el IP
y el registro de flags.
Interrupciones Assembler

Interrupciones por Hardware (Cont.)

• La CPU posee una serie de entradas llamadas líneas de


solicitud de interrupción (IRQs).
• Cada dispositivo de hardware que necesita actualizarse
regularmente está asociado a un IRQ en particular. (Ej. el
teclado usa el IRQ1).
• Cuando el dispositivo provoca un evento, envía una señal
a la CPU usando la línea de IRQ asociada.
• Entonces, la CPU detiene lo que está haciendo y pasa el
control a la ISR.
Interrupciones Assembler

Ejemplo

• Cuando se presiona una tecla en el teclado, se envía una


señal por el IRQ1
• La CPU detiene el procesamiento y ejecuta la ISR asociada
al IRQ1.
• La ISR chequea el estado del teclado y almacena el código
de la tecla presionada en un buffer.
• Finalmente, se ejecuta la instrucción IRET para volver a la
ejecución normal.
• Ahora, cuando el programa necesite leer del teclado, en
realidad no se lee el estado del teclado sino que se lee el
buffer.
Interrupciones Assembler

¿Por qué?

• ¿Por qué hacer esto y no leer simplemente el estado del


teclado cuando se lo necesite?
• Porque se perderían muchísimos caracteres. Imaginar un
procesador de textos que funciona lento.
• Al utilizar el mecanismo de interrupciones, el teclado se
lee en forma independiente del procesamiento del
programa.
Interrupciones Assembler

Interrupciones por Software

• Las interrupciones por software son, en realidad, un


conjunto de subrutinas especiales.
• Estas subrutinas pueden estar almacenadas en el BIOS o
ser parte del sistema operativo.
• La diferencia entre invocar una subrutina e invocar una
interrupción por software es la instrucción a utilizar.
• Para las interrupciones por software se utiliza la
instrucción INT.
Interrupciones Assembler

Interrupciones del DOS

• El sistema operativo DOS (o lo que queda de él en


Windows, hoy en día) utiliza la INT 21h para permitir
acceder a varios servicios.
• Según qué función queramos utilizar, deberemos
establecer un código función en AH y quizá parámetros
en otros registros.
• ¿Se acuerdan de esto?
MOV AX, 4C00h
INT 21h
Interrupciones Assembler

Entrada desde teclado (Caracter)

• Operación:
• Leer un único carácter del teclado y mostrarlo en
pantalla
• Parámetros:
AH = 01h

• Devuelve:
• AL = código ASCII del carácter leído
Interrupciones Assembler

Salida por Pantalla (Caracter)

• Operación:
• Mostrar un único carácter en pantalla
• Parámetros:
• AH = 02h
• DL = código ASCII del carácter a mostrar
Interrupciones Assembler

Salida por Pantalla (String)

• Operación:
• Mostrar un String en pantalla
• Parámetros:
• AH = 09h
• DX = Dirección del String a mostrar
• El String debe estar terminado por el carácter “$”
Interrupciones Assembler

Entrada desde teclado (String)

• Operación:
• Leer un String desde teclado y almacenarlo en
memoria
• Parámetros:
• AH = 0Ah
• DX = Dirección de memoria donde almacenar del
String leído
• El buffer de memoria debe tener el siguiente formato:
• Offset 0: Cantidad máxima de caracteres a leer
(incluido el “enter”).
• Offset 1: Lugar para almacenar el número de
caracteres leídos.
• Offset 2: A partir de este byte se almacenará el
string, debe haber espacio suficiente como para
almacenar un string de la longitud indicada en el
offset 0.
Interrupciones Assembler

Entrada de String: Ejemplo

• ; Buffer de 6 posiciones (5 caracteres + enter) inicializados


; con el $ (siempre con $)
; El 1er 6 es la cantidad de caracteres y el 0 es la posición
; donde se guardara la cantidad de caracteres ingresados.
• buffer DB 6, 0, 6 dup ("$"), "$"
• ;Otra forma de escribirlo
; buffer DB 6,0,"$","$","$","$","$","$","$"
• ...
• mov ah, 0Ah
• mov dx, offset buffer
• int 21h
Preguntas

¿PREGUNTAS?

También podría gustarte