INTERRUPCIONES DE ENTRADA/SALIDA

Download Report

Transcript INTERRUPCIONES DE ENTRADA/SALIDA

CLASE 13
INTERRUPCIONES
E
INTERRUPCIONES DE
ENTRADA/SALIDA
© Jaime Alberto Parra Plaza
Pbn - 13 - 1
TEMA 1
INTERRUPCIONES
© Jaime Alberto Parra Plaza
Pbn - 13 - 2
El microprocesador provee un mecanismo
para que la comunicación con los
periféricos sean fácil de implementar, éste
es el de las interrupciones. Puede decirse
que un uP cuando está activo estará en
una de dos situaciones:
• Ejecutando el programa actual
• Atendiendo una interrupción
© Jaime Alberto Parra Plaza
Pbn - 13 - 3
Una instrucción de interrupción, en su
forma más simple, permite llamar una
subrutina.
Estas subrutinas han sido implementadas
para darle al usuario la capacidad de
interactuar con los servicios disponibles
en la BIOS o en la parte interna del
sistema operativo, ya sea para
comunicarse con los periféricos o para
manejar el sistema de archivos.
© Jaime Alberto Parra Plaza
Pbn - 13 - 4
La dirección de inicio de las subrutinas se
almacena en una tabla al comienzo de la
RAM (tabla de vectores de interrupción), la
cual es accesible a cualquier programa. La
subrutina que es invocada se conoce como
servicio de interrupción.
La sintaxis de la orden es:
INT
n
donde n es un número entre 0 y 255.
© Jaime Alberto Parra Plaza
Pbn - 13 - 5
Cuando aparece esta orden, el uP realiza la
siguiente secuencia de pasos:
•
•
•
•
•
•
•
•
Detectar la instrucción
Guardar IP, CS y banderas en la pila
Multiplicar el número de int. por 4
Cargar CS e IP con los nuevos valores
Ejecutar el código en la nueva dirección
Continuar ejecutando hasta llegar a IRET
Retraer de la pila IP, CS y banderas
Continuar el programa anterior
© Jaime Alberto Parra Plaza
Pbn - 13 - 6
1. DETECTAR LA INSTRUCCIÓN:
uP
MEMORIA
CS
IP
INT 7
© Jaime Alberto Parra Plaza
Segmento
de código
actual
Pbn - 13 - 7
2. GUARDAR IP, CS Y
BANDERAS EN LA PILA:
uP
MEMORIA
CS
IP
Flags
Pila
© Jaime Alberto Parra Plaza
Pbn - 13 - 8
3. MULTIPLICAR n POR 4:
p
n*4
Para el ejemplo:
p
7*4
p
28
© Jaime Alberto Parra Plaza
Pbn - 13 - 9
4. CARGAR CS E IP CON LOS
VALORES APUNTADOS POR p:
IP
CS
0:[p]
0:[p+2]
Estos valores son el segmento y el
desplazamiento del servicio a la interrupción
y se llaman vectores de interrupción.
© Jaime Alberto Parra Plaza
Pbn - 13 - 10
MEMORIA
uP
IP
CS
28
29
30
31
primer Kilobyte
© Jaime Alberto Parra Plaza
Pbn - 13 - 11
5. EJECUTAR EL CÓDIGO QUE
INDICA LA NUEVA DIRECCIÓN:
MEMORIA
uP
1a. instrucción
CS
IP
IRET
última instrucción
nuevo segmento de Código
© Jaime Alberto Parra Plaza
Pbn - 13 - 12
6. CONTINUAR EJECUTANDO EL
SERVICIO HASTA HALLAR LA ORDEN IRET
(RETORNAR DE INTERRUPCIÓN):
MEMORIA
uP
CS
IP
© Jaime Alberto Parra Plaza
IRET
Pbn - 13 - 13
7.EXTRAER DE LA PILA LOS ANTIGUOS
VALORES DE CS, IP Y BANDERAS:
uP
MEMORIA
CS
IP
Flags
Pila
© Jaime Alberto Parra Plaza
Pbn - 13 - 14
8. CONTINUAR LA EJECUCIÓN DEL
PROGRAMA ANTERIOR:
MEMORIA
uP
CS
INT 7
Segmento
de Código
actual
IP
© Jaime Alberto Parra Plaza
Pbn - 13 - 15
El sistema operativo MS-DOS se compone
de una serie de miniprogramas, que dan
soporte al manejo de recursos físicos y de
recursos lógicos.
Todo el sistema operativo está hecho en
assembly puro y llano, igual al que se usa
para crear programas de usuario.
La estructura del DOS es:
© Jaime Alberto Parra Plaza
Pbn - 13 - 16
COMMAND. COM
Manejadores de
Dispositivos Estándares
MSDOS. SYS
IO.SYS y BIOS
© Jaime Alberto Parra Plaza
Pbn - 13 - 17
INTÉRPRETE DE
COMANDOS
(COMMAND.COM)
Interacciona con el usuario y traduce las
órdenes que éste ingresa en llamados a
los programas que realizan esas tareas.
© Jaime Alberto Parra Plaza
Pbn - 13 - 18
MANEJADORES DE
DISPOSITIVOS
ESTÁNDARES
Traducen órdenes de alto nivel en
comandos para los periféricos. Estas
rutinas pueden ser invocadas por el
Intérprete de Órdenes o por un programa
de usuario.
© Jaime Alberto Parra Plaza
Pbn - 13 - 19
MANEJADORES DE
RECURSOS LÓGICOS
(MSDOS.SYS)
Funciones para manejo de archivos y de
directorios. Traducen órdenes abstractas
como abrir archivo o cambiar directorio a
las órdenes físicas que hacen tales
labores.
© Jaime Alberto Parra Plaza
Pbn - 13 - 20
DRIVERS DE RECURSOS
FÍSICOS (IO.SYS)
Funciones y Servicios para manejo de
periféricos a nivel físico. Estas rutinas,
que actúan en coordinación con las
rutinas de la ROM-BIOS, se entienden
con los periféricos a nivel hardware.
© Jaime Alberto Parra Plaza
Pbn - 13 - 21
Cuando el sistema se inicializa, se cargan las
funciones de MSDOS.SYS e IO.SYS desde
disco y se llena la tabla de vectores de
interrupción con las direcciones de cada
función.
Estas funciones usualmente están en la ROM
BIOS o, si son actualizaciones, en el IO.SYS.
Pueden incluso estar en la memoria
convencional, si el usuario ha decidido
remplazar la función de atención nativa por
una creada por él o por un proveedor.
© Jaime Alberto Parra Plaza
Pbn - 13 - 22
Ejemplos de funciones disponibles:
Soporte Lógico:
Crear directorio
Abrir archivo
Leer archivo, etc.
Soporte Físico:
Inicializar impresora
Mover cursor
Cambiar modo de pantalla
Leer teclado
Escribir vídeo, etc.
© Jaime Alberto Parra Plaza
Pbn - 13 - 23
Tanto las funciones DOS (de MSDOS.SYS)
como las funciones BIOS (de IO.SYS) se
invocan con números de interrupción.
Es natural que las funciones DOS sean de
“más alto nivel”, pues no se relacionan
directamente con el hardware, como sí lo
hacen las interrupciones BIOS.
Prácticamente, casi todas las funciones DOS
están incluídas en una sola interrupción,
la INT 21H, cada función se discrimina
dando el número de la función.
© Jaime Alberto Parra Plaza
Pbn - 13 - 24
El esquema típico de llamado es:
MOV
AH, nf
; nf es el número de función a solicitar
; llenar, eventualmente, otros registros con
; información necesaria para la función
INT
21H
; invocar los servicios DOS
; recoger, si corresponde, valores
; retornados por la función en registros
; específicos
© Jaime Alberto Parra Plaza
Pbn - 13 - 25
TEMA 2
INTERRUPCIONES DE
ENTRADA / SALIDA
(E/S)
© Jaime Alberto Parra Plaza
Pbn - 13 - 26
De todos los servicios, aquéllos que son
indispensables para crear programas de
cierta utilidad, son los que permiten
interactuar con un usuario, es decir, los
servicios de entrada de información por
teclado y los servicios de salida de
información por vídeo.
Cada servicio de interrupción será
explicado siguiendo el siguiente formato:
© Jaime Alberto Parra Plaza
Pbn - 13 - 27
función: un nombre significativo,
preferiblemente el nombre de la función
equivalente en lenguaje C, si existe.
propósito: explica qué hace la función.
entrada: muestra qué parámetros recibe la
función y en qué registros deben colocarse.
© Jaime Alberto Parra Plaza
Pbn - 13 - 28
salida: indica qué valor(es) retorna la
función y en qué registros quedan ubicados.
observación: campo opcional, que se coloca
cuando se requiera dar una explicación más
amplia sobre alguno de los campos
anteriores.
ejemplo: código que muestra cómo usar la
función.
© Jaime Alberto Parra Plaza
Pbn - 13 - 29
INTERRUPCIONES DE ENTRADA:
Las funciones básicas con la entrada
estándar (teclado) son:
1. Indagar si se ha pulsado alguna tecla
2. Leer una tecla sin mostrarla en pantalla
3. Leer una tecla mostrándola en pantalla
Antes de ver estas funciones, es conveniente
aclarar unos aspectos sobre el teclado:
© Jaime Alberto Parra Plaza
Pbn - 13 - 30
TECLAS Y CÓDIGOS:
El teclado original del IBM poseía sólo las
teclas para edición básica:
a. Letras: a, b, c, ........, y, z.
b. Números: 0, 1, ......, 8, 9.
c. Signos de puntuación: , ; . : !, etc.
d. Teclas de edición: TAB, ENTER,
ESCAPE, BackSpace, etc.
© Jaime Alberto Parra Plaza
Pbn - 13 - 31
Cada una de estas teclas puede
asociarse con un código ASCII entre 1
y 255 (no se usan todos) y casi todas
tienen un símbolo asociado que puede
escribirse en pantalla.
A este teclado se le llama estándar y a
las teclas que en él están se les llama
normales.
© Jaime Alberto Parra Plaza
Pbn - 13 - 32
Los teclados actuales poseen teclas
adicionales:
a. De función: F1, F2, etc.
b. De movimiento del cursor:
HOME, PgUp, etc.
c. De combinación: CTRL-tecla,
ALT-tecla.
© Jaime Alberto Parra Plaza
,
,
Pbn - 13 - 33
A este teclado se le llama extendido y a las
teclas adicionales se les llama especiales.
Para diferenciar las teclas especiales de las
normales, se les asigna a aquéllas un
código de 2 bytes:
El primero siempre es el carácter NULO
(ASCII 0) y el segundo es el código de la
tecla. Estas teclas por lo general no tienen
un símbolo asociado, así que cuando se
intenta imprimir en pantalla no siempre
se obtiene un símbolo significativo.
© Jaime Alberto Parra Plaza
Pbn - 13 - 34
INTERRUPCIONES PARA ENTRADA
BÁSICA:
1. DETECTAR ESTADO DEL TECLADO:
Función:
kbhit()
Propósito: Detectar si una tecla ha sido
pulsada
Entrada:
AH = 0BH
Salida:
AL = FFH si hay carácter
disponible,
AL = 00H si no hay.
© Jaime Alberto Parra Plaza
Pbn - 13 - 35
Ejemplo:
WAIT:
MOV
INT
IF23:
CMP
JE
JMP
© Jaime Alberto Parra Plaza
AH, 0BH
21H
AL, 0FFH ; hay tecla pulsada?
KEYPRESSED ; si: procesarla
WAIT
; no: esperar
Pbn - 13 - 36
2. LEER TECLA SIN HACER ECO:
Función:
Propósito:
getch()
Leer una tecla sin hacer eco a la
pantalla (sin mostrarla)
Entrada:
AH = 08H
Salida:
AL = carácter leído
Observación:
Si el carácter leído es 0, indica un carácter
especial, en este caso debe invocarse el
servicio nuevamente para obtener el
código de la tecla especial.
© Jaime Alberto Parra Plaza
Pbn - 13 - 37
Ejemplo:
WAIT_ESC:
MOV AH, 08H
INT
21H
IF14:
CMP AL, 27
; ¿pulsada ESC?
JE
BYE
; si: terminar
JMP
WAIT_ESC ; no: esperar
© Jaime Alberto Parra Plaza
Pbn - 13 - 38
3. LEER TECLA HACIENDO
ECO A LA PANTALLA:
Función:
Propósito:
getche()
Leer una tecla haciendo
eco a la pantalla
(mostrándola)
Entrada:
AH = 01H
Salida:
AL = carácter leído
Observaciones: Igual que getch().
© Jaime Alberto Parra Plaza
Pbn - 13 - 39
Ejemplo:
MOV
INT
CMP
JNE
MOV
INT
MOV
MOV
© Jaime Alberto Parra Plaza
AH, 01H
21H
AL, 00H
; ¿es especial?
NORMAL_KEY
AH, 01H
; sí es especial, ...
21H
; ... leer el código
tecla, AL
tipo, ‘E’
; < sigue >
Pbn - 13 - 40
; < viene >
JMP
CONTINUE
NORMAL_KEY:
MOV tecla, AL
MOV tipo, ‘N’
CONTINUE:
© Jaime Alberto Parra Plaza
Pbn - 13 - 41
INTERRUPCIONES PARA SALIDA
BÁSICA:
1. ESCRIBIR UN CARACTER EN
PANTALLA:
Función:
putch()
Propósito: Escribir un carácter ASCII en
la pantalla
Entrada:
AH = 02H,
DL = carácter a escribir
Salida:
Ninguna.
© Jaime Alberto Parra Plaza
Pbn - 13 - 42
Ejemplo:
MOV
MOV
INT
© Jaime Alberto Parra Plaza
DL, ‘A’
AH, 02H
21H
; escribir la letra A
Pbn - 13 - 43
MANEJO DE CADENAS:
La interrupción 21H posee servicios tanto
para leer cadena (funciones 0AH y 3FH)
como para escribir cadena (funciones 09H
y 40H). Sin embargo, el instructor
desaprueba su uso, puesto que precisan
que las cadenas estén en un formato que
es incompatible con los estándares para
manejo de cadenas.
© Jaime Alberto Parra Plaza
Pbn - 13 - 44
CADENAS ASCIIZ:
Dado que una cadena es una sucesión de
caracteres, se precisa, para su adecuado
manejo, saber dos cosas:
• El código en que se representan los
caracteres
• El número de caracteres que forman la
cadena
© Jaime Alberto Parra Plaza
Pbn - 13 - 45
El estándar que usan la mayoría de
computadores y de sistemas para
representar cadenas es el llamado
ASCIIZ cuyo nombre indica que:
• Los caracteres se representan usando el
código ASCII
• La longitud de la cadena es desconocida,
pero se sabe que termina con el carácter
ASCII 0 o carácter NULO
© Jaime Alberto Parra Plaza
Pbn - 13 - 46
Para manipular cadenas, se utilizarán dos
funciones implementadas por el instructor
(explicadas en detalle posteriormente).
Este enfoque ofrece dos ventajas:
• Se comprende que, cuando el sistema
operativo no ofrece un servicio que se
requiere, puede crearse a partir de los que
si ofrece
• Es un excelente ejemplo para aprender a
implementar funciones
© Jaime Alberto Parra Plaza
Pbn - 13 - 47
FUNCIONES GETS Y PUTS:
Se han implementado dos macros que
permiten leer (gets) o escribir (puts) una
cadena.
Gets lee una sucesión de caracteres y le
añade un terminador NULO.
Puts escribe en pantalla una cadena que sea
terminada por ASCII 0.
© Jaime Alberto Parra Plaza
Pbn - 13 - 48
LEER UNA CADENA:
Función:
gets max, cadena
Propósito: Leer caracteres desde el
teclado hasta que se presione
ENTER o hasta que se lean
max caracteres
Entrada:
max: máximo número de
caracteres a leer (hasta 255)
cadena: puntero a un
buffer en memoria donde se
alojará la cadena leída
Salida:
Ninguna.
© Jaime Alberto Parra Plaza
Pbn - 13 - 49
Ejemplo:
Respuesta DB
50 DUP (?)
; buffer para guardar la cadena
...
...
Gets
49, Respuesta
; dar el máximo de caracteres permitidos, ...
; ... se debe dejar un byte libre para el final ...
; ... de cadena
© Jaime Alberto Parra Plaza
Pbn - 13 - 50
ESCRIBIR UNA CADENA:
Función:
Propósito:
Entrada:
Salida:
© Jaime Alberto Parra Plaza
puts cadena
Escribir los caracteres de
cadena en pantalla hasta
encontrar un carácter ASCII 0
cadena: puntero a un
buffer en memoria donde
reside la cadena a escribir
Ninguna.
Pbn - 13 - 51
Ejemplo:
Mensaje
DB
“¡Hola mundo!”, 0
; cadena a escribir (¡recordar el terminador!)
...
...
Puts
Mensaje
; interactuar con el mundo real
© Jaime Alberto Parra Plaza
Pbn - 13 - 52
INTERRUPCIONES
HARDWARE
Lo descrito hasta ahora corresponde a las
llamadas interrupciones software, nombre
que indica que los servicios se invocan
desde dentro de un programa. Existen
también las interrupciones hardware en
donde la petición de servicio se hace
desde fuera del microprocesador, ya sea
desde un periférico o un chip de soporte.
© Jaime Alberto Parra Plaza
Pbn - 13 - 53
A grandes rasgos, para activar una
interrupción por hardware, se debe
colocar un valor binario 0 en una entrada
de control del uP llamada también INT.
Cada vez que el uP realiza una
instrucción, consulta el estado de esta
línea y, si está en 0, procede a entrar en
un estado llamado atención a interrupción
hardware.
© Jaime Alberto Parra Plaza
Pbn - 13 - 54
En este estado se realiza un intercambio de
información entre el uP y el elemento que
solicita el servicio (SR), siendo un
proceso en el cual intervienen
activamente entidades hardware y
software.
Para que la comunicación tenga éxito,
ambas partes deben estar de acuerdo en
comunicarse siguiendo un protocolo
común:
© Jaime Alberto Parra Plaza
Pbn - 13 - 55
ATENCIÓN A UNA INT. HARDWARE:
• El SR activa el pin INT
• El uP termina de ejecutar la instrucción
actual y consulta el pin INT
• Como el pin INT está activado procede a
responder activando el pin INTA
• El SR coloca en el bus de datos el número
de interrupción que desea
• El uP procede a realizar el servicio
© Jaime Alberto Parra Plaza
Pbn - 13 - 56
PREGUNTA 13
¿Cómo utiliza el computador el chip PIC
8259 (controlador de interrupciones
programable) para aumentar la
capacidad de atención de interrupciones
del microprocesador?.
© Jaime Alberto Parra Plaza
Pbn - 13 - 57
< FIN DE LA CLASE 13 >
© Jaime Alberto Parra Plaza
Pbn - 13 - 58