INTERRUPCIONES 5.
1 Definicin
Las interrupciones, son instrucciones que detienen la ejecucin del programa y colocan el apuntador de instrucciones en una localidad de memoria especfica donde se reanudar el procesamiento. La tabla 5.1, contiene cuatro tipos de instrucciones de interrupcin. La ms til de todas es la propia instruccin de interrupcin: INT tipo de interrupcin
5.2 Forma en que se ejecuta una interrupcin
Cuando se encuentra esta instruccin, el control se transfiere a la direccin contenida en la localidad especificada por accionar 4 veces el tipo de interrupcin. Por ejemplo, la interrupcin 10H transfiere el control a la localidad de memoria cuya direccin est contenida en 0000:00040. Instruccin HLT INT tipo de Interrupcin Propsito Alto Comentarios
INTO
IRET
La ejecucin de esta instruccin detiene toda actividad del microprocesador Interrupcin La secuencia de operaciones que desencadena esta instruccin es la siguiente: El contenido de SP se decrementa en 2 y se colocan en stack todas las banderas. De estas, IF y TF son restablecidas. SP vuelve a decrementarse en 2 y se enva al stack CS. Una vez hecho esto, se carga CS con la palabra de orden superior de la direccin del segmento que aparece en la tabla de vectores de interrupcin de palabras dobles. A continuacin SP vuelve a decrementarse en 2 y se enva IP al stack para salvar el desplazamiento. IP se carga con el desplazamiento contenido en la palabra menos significativa en el vector de interrupcin. El apuntador al vector de interrupcin correspondiente es igual tipo de interrupcin x 4. Interrupcin si existe Esta interrupcin se ejecuta solo si OF = 1 Trabaja de la misma manera que la INT con la sobre flujo excepcin de que DOS hace que apunte directamente a una instruccin IRET. Regreso de Esta instruccin regresa al control en el punto donde interrupcin ocurri la interrupcin. Tanto CS como IP son cargados desde el stack
Tabla 5.1 Grupo de Instrucciones de Interrupcin Existen tres tipos de interrupcin las de Intel, las de BIOS y las del DOS, aqu, solo se tratarn las dos ltimas. Dentro del esquema del de una PC, vista como una pirmide, las interrupciones, tomaran la siguiente forma:
Programas de Aplicacin (Software) DOS (Rutinas de Bajo Nivel ) BIOS (Basic Input Output System Rutinas de Muy Bajo Nivel ) HW (Hardware)
El uso de las interrupciones nos ayuda en la creacin de programas, utilizndolas nuestros programas son ms cortos, es ms fcil entenderlos y usualmente tienen un mejor desempeo debido en gran parte a su menor tamao. Este tipo de interrupciones podemos separarlas en dos categoras: las interrupciones del sistema operativo DOS y las interrupciones del BIOS. 5.3 Interrupciones del BIOS La diferencia entre ambas es que las interrupciones del sistema operativo son ms fciles de usar pero tambin son ms lentas ya que estas interrupciones hacen uso del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho ms rpidas pero tienen la desventaja que, como son parte del hardware son muy especficas y pueden variar dependiendo incluso de la marca del fabricante del circuito. 5.4 Interrupciones del DOS La eleccin del tipo de interrupcin a utilizar depender nicamente de las caractersticas que le quiera dar a su programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las del DOS).
Algunas de las interrupciones mas usuales, son : Int 10H (interrupcin del BIOS) Int 16H (Interrupcin del BIOS) Int 17H (Interrupcin del BIOS) Int 21H (interrupcin del DOS) Entrada/salida de video. Entrada/salida de teclado. Entrada/salida de la impresora. Mltiples llamadas a funciones del DOS.
Interrupcin 10H - Entrada /Salida de video
Entrada Salida AH = 0 AL = Modo de video Nada AH = 1 CH = Lnea inicial (superior del Nada cursor) CL = Lnea final AH = 2 BH = Nmero de pgina DH = Rengln DL = Columna Nada AH = 3 BH = Nmero de pgina BH = Nmero de pgina CH = Lnea inicial del cursor CL = Lnea final del cursor AH = 4 DH = Rengln DL = Columna AH = 5 AL = Nmero de pgina Nada AH = 6 AL = Nmero de lneas BH = Atributo para rea limpiada CH = Rengln superior CL = Columna Izquierda DH = Rengln inferior DL = Columna derecha Nada AH = 7 AL = Nmero de lneas BH = Atributo para rea limpiada CH = Rengln superior CL = Columna Izquierda DH = Rengln inferior DL = Columna derecha Nada AH = 8 AH = Byte del atributo BH = Nmero de pgina AL = Carcter AH = 9 AL = Carcter ASCII BH = Nmero de pgina BL = Byte de atributo CX = Nmero de carcter Nada AH = 10 BH = Nmero de pgina CX = Nmero de carcter escrito Nada
Propsito Establecer modo de video
Establecer tipo de cursor
Establecer posicin del cursor
Leer posicin y tipo de cursor Leer posicin del cursor Seleccionar pgina de video activa
Desplaza ventana hacia arriba
Desplaza ventana hacia abajo Leer carcter y atributo
Escribe carcter y atributo (El cursor no se mueve) Escribe carcter (El cursor no se mueve)
Interrupcin 10H- Continuacin Entrada AH = 14 BH = Nmero de pgina AL = Carcter AH = 15 Salida Propsito Escribe carcter (El cursor si se mueve)
Nada AH = Nmero de columnas AL = Modo de despliegue BH = Pgina activa
Obtiene modo de video actual
La interrupcin 10H tiene 16 opciones bsicas, aqu solo trataremos las mas usuales, estas opciones, son controladas por el registro AH en el momento de generar la interrupcin. Modos de video Modo 0,1 2,3 4,5 6 7 13 14 15,16 17,18
Tipo Texto Texto (CGA) Grfico (CGA) Grfico Texto (Monocromo) (VGA) Grfico (VGA) Grfico (VGA) Grfico (VGA) Grfico
Dimensiones 40 x 25 80 x 25 320 x 200 640 x 200 80 x 25 320 x 200 640 x 200 460 x 350 640 x 480
Pginas 0-7 0-3 0 0 0 0 0 0 0
Interrupcin 16H (Interrupcin del BIOS) Entrada/salida de teclado. Cuando se usa esta interrupcin con AH = 0, detiene la ejecucin del programa y espera hasta que se lee el siguiente carcter proveniente del teclado, y coloca su cdigo ASCII en el registro AL. Asociado a cada carcter existe un cdigo de barrido (scan code) el cual es ledo en el registro AH. Para cada tecla existe un cdigo de barrido (en total 83 cdigos). El cdigo ASCII normal consta de 128 caracteres. El conjunto de caracteres de la IBM PC consta de 256 caracteres (ASCII extendido). Cuando se introduce un carcter desde el teclado, ste lo almacena en un buffer que puede contener hasta 20 bytes de informacin. Cuando se presiona o libera una tecla, se coloca un byte en el buffer del teclado. Este byte contiene un 1 o un 0 en el bit 7 que corresponde a la presin o liberacin respectivamente, y los siete bits restantes contienen el cdigo de barrido. Es necesario colocar por separado primero en el buffer el byte correspondiente a cada tecla porque algunas entradas requieren que se presionen dos teclas al mismo tiempo antes de que cualquiera de ellas sea liberada. El cdigo de barrido es traducido en un carcter del ASCII extendido una vez que se carga en memoria el contenido del buffer del teclado. Si INT 16H se emplea con AH = 1, entonces la bandera de cero contiene el estado del buffer. Si ZF = 1, entonces el buffer est vaco; ZF = 0 significa que se tiene informacin disponible en el buffer y que el cdigo del primer carcter disponible est en AX. Cuando esta interrupcin se utiliza con AH = 2, AL contiene el byte de estado del teclado. La mayor limitacin de INT 16H es que est orientada a caracteres. Esta interrupcin pertenece al sistema operativo DOS.
Entrada AH = 0
Salida Propsito AH = Cdigo de examinacin Leer un carcter del teclado para teclas de control AL = Cdigo ASCII
AH = 1
AH = 2
ZF = 1 No hay tecla disponible en el buffer ZF = 0 hay informacin en el Leer status del teclado buffer AL = Byte de banderas del Regresa las banderas del Teclado teclado
Banderas del teclado Bits 7 6 5 4
1 X
0 X
X X X X X X 1 = Presionado o habilitado
Significado Shift Izquierdo Shift Derecho Tecla Ctrl Tecla Alt Scroll Lock Num Lock Caps Lock Tecla Insert
La mayor limitacin de INT 16H es que est orientada a caracteres. Quiz hubiese sido ms deseable que manejar entradas formadas por cadenas enteras de caracteres. Afortunadamente existen otra interrupcin que hace lo anterior: INT 21H. Esta interrupcin que pertenece al sistema operativo (DOS), tiene una flexibilidad mayor para el manejo de I/O del teclado. Cabe mencionar que para manejar I/O de teclado es preferible utilizar INT 21H que INT 16H.
Interrupcin 17H: I/O de la impresora
Esta interrupcin se utiliza para comunicar la impresora conectada al sistema. Al igual que con la mayor parte de las rutinas de interrupcin, el valor contenido en AH determina cual opcin de interrupcin es seleccionada. Cuando AH=0, el servicio de interrupcin imprime el carcter ASCII contenido en AL. Algunas impresoras no responden de manera adecuada al conjunto de caracteres ASCII contenido en AL. Algunas impresoras no responden de manera adecuada al conjunto de caracteres ASCII extendido de IBM y nicamente imprimen los primeros 128 caracteres que pertenecen al ASCII normal. Se debe consultar los manuales de su impresora para ver de que manera trata los otros 128 caracteres. Dado que es necesario crear cambios de lnea, retornos de carro y otros movimientos de la cabeza de impresin debe ser el siguiente: ASCII, Carcter 08H 0AH 0CH 0DH Funcin Retroceso Avance de lnea Nueva Forma Retorno de Carro
Cuando AH=1, un llamado a INT 17H inicializa la impresora; cuando AH=2 la interrupcin proporciona, en AH al byte de estado de la impresora. La funcin de cada bit en este byte est descrita en el listado del BIOS (rutina PRINTER__10) contenido en el manual IBM Technical Reference. El nmero de impresoras predeterminado, es 0 y debe proporcionarse a la interrupcin en el registro DX. El BIOS soporta hasta tres impresoras al mismo tiempo (numeradas de 0 al 2). Interrupcin 21H: Llamadas a funciones del DOS
La interrupcin 21H tiene muchas opciones y estas se escogen dependiendo del contenido en AH. La siguiente tabla basada en el manual DOS Technical Reference, es un listado de estas funciones junto con una breve descripcin e las mismas. Las funciones 5E00, 5E02, 5E03, 5F02, 5F03 y 5F04 se seleccionan especificando la opcin en la palabra completa del registro AX. AH 3A 3B 3C 3D 3E Propsito Elimina subdirectorio Cambio de directorio Crear Archivo Abre Archivo Cierra manejador archivo Tipo Disco Disco Archivo Archivo de Archivo Descripcin Funcin RMDIR DS:DX apunta a la cadena que contiene los nombres de la unidad de discos y la ruta Funcin CHDIR DS:DX apunta a la cadena que contiene los nombres de la unidad de discos y la ruta Funcin CREATE: si el archivo al que apunta DS:DX no existe se abre un nuevo archivo DS:DX apunta al archivo; AL = 0 (Solo lectura), 1 (Solo escritura) o 2 (escritura/ lectura) BX= Manejador de archivo; se cierra el archivo, se actualiza el directorio y se remueven los buffers internos del archivo BX = manejador de archivo, CX = nmero de bytes que se desea leer DS:DX = buffer a ser cargado; depus de la llamada, AX = nmero de bytes ledos Operacin inversa a 3F Elimina una entrada del directorio asociada con el nombre del archivo apuntado en DS:DX Vase el manual DOS Technical Reference
3F
Lectura desde Archivo archivo/dispositivo Escritura en un archivo/dispositivo Borra archivo del directorio Mueve el apuntador de lectura/escritura del archivo Cambia modo de un archivo Control de I/O para dispositivos Manejador de archivo duplicado Fuerza duplicacin en el manejador de archivo Obtiene directorio actual Archivo Archivo Archivo
40 41 42
43 44 45 46 47
Archivo I/O Archivo Archivo Disco
Vase el manual DOS Technical Reference Vase el manual DOS Technical Reference A la entrada BX = manejador de archivo al terminar AX = duplicado Fuerza a que el manejador CX se refiera al mismo archivo en la misma posicin que el manejador en BX DL = nmero de la unidad de disco; DS:DI = apuntador al rea del usuario de 64 bytes, la que contiene el directorio; AX contiene el cdigo de error BX = Nmero de prrafos, y AXL0000 apunta a los bloques de asignacin Libera la memoria asignada con 48H Modifica los bloques para contener el tamao de un bloque nuevo. ES = Bloque del segmento BX = tamao en prrafos del nuevo bloque Permite que un programa de aplicacin ejecute otro. Al termino de ste, el control vuelve al primer programa DS:DS apunta al programa y ES:BX apunta a un bloque de parmetros. Para la carga Finaliza el proceso en ejecucin Vase el manual DOS Technical Reference Encuentro del primer nombre de un archivo indicado que se iguala al nombre de un archivo que apunta DS:DX. CX = atributo de bsqueda
48 49 4A
Asigna memoria
Memoria
Libera memoria asignada Memoria Modifica los bloques de Memoria memoria asignada Carga/ejecuta programa Control
4B
4C 4D 4E
Termina proceso Control Obtiene el cdigo de Diversos retorno Encuentra el primer Archivo archivo indicado
AH 4F
Tabla 21H Continuacin Propsito Tipo Encuentra el siguiente Archivo archivo indicado
54 56 57 59 5A 5B 5C
Obtiene el estado de verificacin Renombra un archivo Obtiene y coloca fecha y hora de un archivo Obtiene error extendido (DOS 3.00 y 3.10) Crea un archivo nico (DOS 3.00 y 3.10) Crea un nuevo archivo (DOS 3.00 y 3.10) Abre/Cierra acceso a un archivo (DOS 3.00/3.10)
Diversos Archivo Diversos Error Archivo Archivo Archivo
Descripcin Es igual al 4EH con la excepcin de que se encuentra el segundo archivo. La DTA contiene, en este caso informacin proporcionada por 4eH o por una llamada previa a 4FH Regresa el valor de la verificacin con 2EH en AL Modifica el nombre de un archivo DS:DX con EX:DI A la entrada AL=0 (obtener) o AL=1 (fijar), BX=manejador de archivo, CX = hora y DX = fecha Proporciona informacin adicional de un error (Vase el manual DOS Technical Reference) Genera un archivo apuntado por DS:DX (la ruta debe terminar con /) CX = atributo Genera un nuevo archivo apuntado por DS:DX, CX= atributo AL = 0 (abre) o AL=1 (cierra), BX= manejador de archivo, CX= Byte menos significativo del desplazamiento, SI = parte ms significativa, DI= parte menos significativa DS:DX apunta a la localidad donde se regresa, el nombre de la computadora BX= ndice de la lista redireccionada; CX= longitud de la cadena; DS:SI apunta a la cadena que ser colocada delante de todos los archivos a imprimirse Opuesto al 5E02 Regresa asignaciones de la red
5E00 Obtiene el nombre de la Diversos mquina (DOS 3.10) 5E02 Inicializacin de la Red impresora 5R03 Obtiene el estado de la impresora 5F02 Obtiene entrada de la lista redireccionada (DOS 3.10) 5F03 Redirecciona dispositivo (DOS 3.10) 5F04 Cancela redireccin 62 Obtiene PSP (DOS 3.00 y 3.10) Red Red
Red Red Diversos
Principalmente para redes Principalmente para redes Proporciona en BX el segmento prefijo del programa (PSP)