Está en la página 1de 13

Tipos de Interrupciones

Trabajo encargado

2013

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones 1.- MANEJO DE INTERRUPCIONES PARA MANEJAR ARCHIVOS


Un archivo es una coleccin de datos (bloques de octetos) que con un nombre se escriben o almacenan en algn dispositivo magntico (discos, cintas, etc.). Estos datos pueden ser despus ledos o recuperados del archivo. Para trabajar con archivos usando el lenguaje ensamblador el sistema operativo DOS provee varias formas. Una de ellas consiste en asignarle a un archivo un nmero de 16 bits al cual denominaremos descriptor del archivo (file handle). Por medio del descriptor se realizan las operaciones bsicas de escritura, lectura y movimiento de archivo. Las funciones del DOS para manejar archivos son: 1. 2. 3. 4. 5. Creacin Apertura Cierre Lectura Escritura : : : : : 3Ch 3Dh 3Eh 3Fh 40h

Todas se ejecutan con la INT 21h. A) Creacin de archivos: 3Ch Se debe tener: En AH el cdigo 3Ch. En DS:DX la direccin del comienzo del nombre del archivo a crearse (este nombre debe terminar con 0). En CX el valor 0 (modo normal de creacin). y se ejecutan con INT 21h. Resultado: si hay acarreo no se crea el archivo y AX resulta con el cdigo de error (por ejemplo, disco lleno). si no hay acarreo, se crea el archivo y AX resulta con el descriptor asignado.

B) Apertura de Archivos: 3Dh Se debe tener: En AH el cdigo 3Dh. En DS:DX la direccin de inicio del nombre del archivo a abrirse(este nombre debe terminar con 0). En AL el cdigo de acceso: 0 = slo lectura 1 = slo escritura 2 = lectura y escritura

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
y se ejecutan con INT 21h. Resultado: Si hay acarreo, no se puede abrir el archivo y AX contiene el cdigo de error (por ejemplo, archivo inexistente) Si no hay acarreo, se abre el archivo. C) Cierre de Archivos: 3Eh Se debe tener: En AH el cdigo 3Eh. En BX el descriptor del archivo a cerrar. y se ejecutan con INT 21h Resultado: Si hay acarreo no se puede cerrar el archivo y AX contiene el cdigo de error. Si no hay acarreo se cierra el archivo.

D) Lectura de archivos: 3Fh Se debe tener: En AH el cdigo 3Fh. En BX el descriptor del archivo a leer. En CX el numero de octetos. En DS:DX la direccin del rea de recepcin de datos (buffer). y se ejecuta con INT 21h. Resultado: Si hay acarreo, error de lectura con cdigo de error en AX Si no hay acarreo, en AX contiene el nmero de octetos ledos, siendo ste cero si se est en el final del archivo.

E) Escritura de archivos: 40h Se debe tener: En AH el cdigo 40h. En BX el descriptor del archivo. En CX el nmero de octetos a ser escritos. En DS:DX la direccin del rea de recepcin de datos (buffer). y se ejecuta con INT 21h.

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
Resultado: Si no hay acarreo la operacin de escritura ha sido correcta, y es incorrecta de otra manera.

2.- INTERRUPCIN PARA MANEJAR VIDEO


Todas se ejecutan con la interrupcin 10H. 00H = seleccionar el modo de video. Entrada: AH = 00H AL = nmero de modo. Salida: Modo cambiado y la pantalla borrada. 0F= leer el modo de video Entrada: AH = 0FH Salida: AL= modo de video actual. AH= nmero de columnas de caracteres. BH= nmero de la pgina.

3.- INTERRUPCIONES PARA MANEJO DE MOUSE Todas se ejecutan con la interrupcin 10H. 01H= seleccionar tipo de cursor. Entrada: AH = 01H CH = nmero de la lnea para iniciar. CL = nmero de la ltima lnea. Salida:

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
Tamao del cursor modificado. 02H= Seleccionar posicin de cursor. Entrada: AH = 02H CH = nmero de pgina (normalmente 0). CL = nmero de hilera (comenzando con 0). DL = nmero de columna (comenzando con 0). Salida: Cambia el cursor a una nueva posicin. 03H= Leer posicin de cursor. Entrada: AH = 03H BH = nmero de pgina Salida: CH = lnea inicial (tamao de cursor). CL = lnea final (tamao del cursor). DH = hilera actual. DL = columna actual. 08H= Leer atributo/carcter en la posicin actual del cursor. Entrada: AH = 08H BH = nmero de pgina. Salida: AL = cdigo del carcter ASCII. AH = atributo del carcter. Nota: Esta funcin no avanza el cursor. 09H= Escribir atributo/carcter en la posicin actual del cursor. Entrada: AH = 09H

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
AL = cdigo del carcter ASCII. BH = nmero de pgina. BL = atributo del carcter. CX = nmero de carcter para escribir. Salida: Nota: Esta funcin no avanza el cursor. 0AH= Escribir carcter en la posicin actual del cursor. Entrada: AH = 0AH AL = cdigo del carcter ASCII. BH = nmero de pgina. CX = nmero de carcter para escribir. Salida: Nota: Esta funcin no avanza el cursor.

4.- INTERRUPCIONES PARA MANEJAR TECLADO


Interruptor para teclado: 16H AH 00H 01H 02H 03H 04H 05H FUNCION Leer el carcter Obtener el estado del teclado Obtener las banderas del teclado Establecer el rango de repeticin Establecer el toque del teclado Empujar el cdigo de carcter y examinar

5.- PROGRAMAS RESIDENTES


Un programa residente o TSR es un programa normal y corriente que, tras ser cargado, permanece parcial o totalmente en memoria al finalizar su ejecucin. Ello es posible utilizando una funcin especfica del sistema operativo. Los programas residentes pueden ser activados mediante una combinacin de teclas o bien actuar con cierta periodicidad, asociados a la interrupcin del temporizador. Tambin pueden interceptar funciones del DOS o de la BIOS para cambiar o modificar su funcionamiento. Al final, casi siempre resulta totalmente inevitable desviar alguna

6
E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
interrupcin hacia una nueva rutina que la gestione, con objeto de activar el programa residente. Como en casi todos los aspectos de la programacin, existen unos cuantos principios fundamentales que conviene respetar: Los programas residentes no deben alterar el funcionamiento normal del resto del ordenador. Esto significa que deben preservar el estado de todo lo que van a modificar durante su ejecucin, restaurndolo despus antes de retornar al programa principal, lo cual no se limita por supuesto a los registros de la CPU, sino que incluye tambin la pantalla, los discos, el estado de la memoria expandida y extendida, etc. Cuando se produce la interrupcin que activa el programa residente, los registros de la CPU pueden tener un valor que hay que interpretar o bien pueden ser aleatorios. Este ltimo es el caso de la interrupcin peridica del temporizador: el programa residente slo puede fiarse de CS:IP, los dems registros debern ser inicializados antes de empezar a operar (lgicamente, habrn de ser primero preservados para ser restaurados al final). No se pueden invocar libremente desde un programa residente los servicios del sistema operativo. Si el lector es la primera vez que oye esto, quiz se quede extraado. Tal vez se pregunte qu sucedera si desde un programa residente se llama (pongamos por ejemplo, una vez cada segundo) a la funcin de impresin del DOS para sacar una 'A' por la pantalla. Lo que puede suceder -y acabar sucediendo, si no a la primera 'A', a la segunda o la tercera- es que el ordenador se cuelgue. Esto es debido a que el DOS es un sistema operativo no reentrante, entre otras razones porque conmuta a una pila propia al ser invocado. Por ello, si se llama a un servicio del DOS desde un programa residente, es posible que en ese momento el DOS ya estuviese realizando otra funcin del programa principal y lo que vamos a conseguir es que se vuelva loco y pierda el control cuando se acabe la tarea residente (el contenido previo de la pila ha sido destrozado). Para utilizar el DOS desde un programa residente hay que conocer cmo estn organizadas las pilas del sistema operativo, as como determinar el estado del DOS para saber si se puede interrumpir en ese momento o si hay que esperar. Utilizar el DOS es prcticamente indispensable a la hora de acceder al disco, por lo que ms adelante en este captulo lo veremos con detenimiento. Para utilizar el DOS hay que emplear funciones ms o menos secretas del sistema no documentadas por Microsoft, si bien esto no es peligroso: esta empresa las utiliza y las ha utilizado siempre profusamente en sus propios programas, por lo que resulta ms que seguro esperar que futuras versiones del DOS sigan soportndolas. La BIOS no es tampoco completamente reentrante. Por fortuna, la BIOS utiliza la pila del programa que le llama. Por ello, para utilizar funciones de la BIOS desde un programa residente basta con asegurar que el sistema no est ya ejecutando una funcin BIOS incompatible (normalmente, una interrupcin 10h en el caso de las funciones de vdeo o la 13h en las de disco). El hardware puede ser accedido sin limitaciones desde los programas residentes, si bien el nivel de uso que puede hacerse est limitado por el sentido comn (puede haber problemas, por ejemplo, si un programa residente cambia la posicin del cabezal de un disquete cuando el programa principal estaba ejecutando una funcin del DOS o la BIOS para acceder al disquete).

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
Los programas residentes tienen una causa que provoca su activacin. Si cuando ya estn activos, se vuelve a reproducir la causa, estamos ante un problema de reentrada que compete exclusivamente al programador. Por lo general, se suele denegar una demanda de activacin cuando el programa residente ya estaba activo (si el programa tiene pila propia esto es adems obligatorio). Pongamos por caso que se pulsa CTRL-ALT-R para mostrar un reloj residente en pantalla, qu suceder si se vuelve a pulsar CTRL-ALT-R con el reloj ya activado? Para solucionar esto, existen dos caminos: uno de ellos es utilizar una variable que indique que el programa ya est activo. El otro, es utilizar para desactivar el programa la misma secuencia de teclas que para activarlo. Lgicamente, los programas que realicen algo peridicamente (pongamos por caso 18,2 veces por segundo) basta con que se limiten a no pillarse los dedos, esto es, utilizar menos de 1/18,2 segundos de tiempo de CPU para sus tareas.

6.- MTODO DE LOS VECTORES DE INTERRUPCIN.


El mtodo ms simple es tambin el ms simpln -intil- y consiste en apoyarse en los vectores de interrupcin. Por ejemplo, si el programa qued residente interceptando la interrupcin 9, basta con mirar a dnde apunta dicha interrupcin y comprobar un grupo de bytes o alguna identificacin que permita determinar si el programa que la gestiona es ya una copia de l mismo. El inconveniente de este mtodo, fcil de deducir, es que si se carga ms de un programa residente que emplee la INT 9, slo el ltimo cargado ser capaz de encontrarse a s mismo en memoria.

8
E.P. INGENIERA INFORMTICA

Tipos de Interrupciones

ANEXOS - EJEMPLOS
Programa Interrupciones para manejar archivos
;En el siguiente programa se crea el archivo "Texto" y se escribe en el los 12 primeros octetos del area de datos cadena Datos segment arch DB "Texto",0 ;nombre termina con 0 cadena DB "Archivo cerrado" mens_error DB "no se puede crear: " Datos ends programa segment ASSUME CS: progama,DS:DATOS comienzo: mov ax,datos ; cargasegmento de datos en DS mov ds,ax mov dx,offset arch ; nombre de achivo en DS:DX mov cx,0 ; modo normal de creacion mov ah,3Ch ; funcin para crear archivo int 21h jnc abierto ; si no hay acarreo,imprimir mensaje de error y saltar a fin mov dx, offset mens_error mov ah,09h int 21h jmp fin abierto: xchg ax,bx ; poner descriptor en bx mov dx,offset cadena ; y direccion de cadena mov cx,9h ; escribir 9 octetos mov ah,40h ; en archivo int 21h cierre: mov ah,3Eh ; funcion para cerrar archivo int 21h ; asociado a bx fin: mov ah,4Ch int 21h programa ends end comienzo

9
E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
Programas Residentes
; El siguiente programa residente no realiza tarea alguna, tan slo es una demostracin de la manera general de proceder para crear un programa ;residente. En principio, el cdigo de instalacin est colocado al final, con objeto de no dejarlo residente y economizar memoria. datos SEGMENT ASSUME CS:demores, DS:demores ORG 100h inicio: JMP main controla_int08 PROC PUSHF CALL CS:ant_int08 ; llamar al gestor normal de INT 8 STI CMP CS:in10,0 JNE fin_int08 ; estamos dentro de INT 10h ; ; Colocar aqu el proceso a ejecutar 18,2 veces/seg. ; que puede invocar funciones de INT 10h fin_int08: IRET controla_int08 ENDP controla_int10 PROC INC CS:in10 ; indicar entrada en INT 10h PUSHF CALL CS:ant_int10 DEC CS:in10 ; fin de la INT 10h IRET controla_int10 ENDP in10 DB 0 ; mayor de 0 si hay INT 10h ant_int08 LABEL DWORD ant_int08_off DW ? ant_int08_seg DW ? ant_int10 LABEL DWORD ant_int10_off DW ? ant_int10_seg DW ? ; Dejar residente hasta aqu. main: PUSH ES MOV AX,3508h INT 21h ; obtener vector de INT 8 MOV ant_int08_seg,ES MOV ant_int08_off,BX

10
E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
MOV AX,3510h INT 21h ; obtener vector de INT 10h MOV ant_int10_seg,ES MOV ant_int10_off,BX POP ES LEA DX,controla_int08 MOV AX,2508h INT 21h ; nueva rutina de INT 8 LEA DX,controla_int10 MOV AX,2510h INT 21h ; nueva rutina de INT 10h PUSH ES MOV ES,DS:[2Ch] ; direccin del entorno MOV AH,49h INT 21h ; liberar espacio de entorno POP ES LEA DX,main ADD DX,15 MOV CL,4 SHR DX,CL MOV AX,3100h INT 21h datos ENDS END inicio ; fin del cdigo residente ; redondeo a prrafo ; bytes -> prrafos ; terminar residente

Programa Interrupciones Del Teclado


; este programa captura la tecla que se presione y la muestra en su codigo ASCII pila SEGMENT STACK DB 58 DUP (?) pila ENDS datos SEGMENT m1 DB "Ingrese la cantidad de trminos", 0Ah,0Dh,'$' m2 DB "(Max 24)$" m3 DB 0Ah,0Dh,"Ya me voy",'$' buff2 DB 5 DUP (3) nro DB ? BUFF DB 6 DUP ('$') datos ENDS cod SEGMENT ASSUME CS: cod, DS: Datos, ss: pila inicio: MOV AX, Datos MOV DS, AX CALL Teclas

11

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
MOV AH,4CH INT 21H Teclas PROC PUSH AX A1: MOV AH, 01 ;Esperar a que se presione una tecla INT 16H JZ A1 MOV AH, 00 ;Leer el caracter del teclado INT 16H CALL ConvCadAL CALL ImprimeCad CMP AL, 0H JNE NOIGUAL XCHG AL, AH CALL ConvCadAL CALL ImprimeCad XCHG AL, AH NOIGUAL: CMP AL, 1BH JNE A1 POP AX RET Teclas ENDP ConvCadAL PROC push ax push bx push cx push dx push si MOV CX, 1 MOV AH, 0 MOV SI, 0 MOV BX, 0AH DIVIDIR: MOV DX, 0 INC SI DIV BX PUSH DX CMP AX, 0 JA DIVIDIR MOV BX, offset BUFF ACADENA: POP AX ADD AX, 30H MOV byte ptr[BX], AL INC BX DEC SI CMP SI, 0 JA ACADENA MOV BYTE PTR [BX], '$' pop si pop dx pop cx

12

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
pop bx pop ax RET ConvCadAL ENDP ImprimeLetra PROC PUSH AX PUSH BX PUSH DX MOV AH, 03H MOV BH, 0 INT 10H INC DL MOV AH, 02H INT 10H MOV AH, 0AH MOV CX, 1 INT 10H POP DX POP BX POP AX RET ImprimeLetra ENDP

; Leer posicin del cursor ;DH: fila, DL: columna ;Incrementar la columna actual ;Posicionar el cursor ;Escribir caracter en posicion actual

ImprimeCad PROC PUSH AX PUSH BX PUSH DX MOV BX, OFFSET BUFF MOV AL,byte ptr [BX] MOV AH, 03H MOV BH, 0 INT 10H INC DL inc dl MOV AH, 02H INT 10H ; Leer posicin del cursor ;DH: fila, DL: columna ;Incrementar la columna actual ;Posicionar el cursor

SEGUIR: CMP AL, '$' JE FINIMP INC BX CALL ImprimeLetra MOV AL,byte ptr[BX] JMP SEGUIR FINIMP: POP DX POP BX POP AX RET ImprimeCad ENDP cod ENDS END inicio

13
E.P. INGENIERA INFORMTICA

También podría gustarte