Professional Documents
Culture Documents
INTEGRANTES:
ALZAMORA CHINININ Ivett.
CRUZ RAMREZ Edgardo.
CUNAYQUE MARTNEZ
Segundo.
2012
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
: 3Ch
Apertura
: 3Dh
Cierre : 3Eh
Lectura : 3Fh
Escritura
: 40h
2
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
1 = slo escritura
2 = lectura y escritura
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:
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).
3
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
En DS:DX la direccin del rea de recepcin de datos (buffer).
y se ejecuta con INT 21h.
Resultado:
Entrada:
AH = 00H
AL = nmero de modo.
Salida:
Modo cambiado y la pantalla borrada.
Entrada:
AH = 0FH
Salida:
AL= modo de video actual.
AH= nmero de columnas de caracteres.
BH= nmero de la pgina.
Entrada:
AH = 01H
CH = nmero de la lnea para iniciar.
Tipos de Interrupciones
CL = nmero de la ltima lnea.
Salida:
Tamao del cursor modificado.
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.
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.
Entrada:
AH = 08H
BH = nmero de pgina.
Salida:
AL = cdigo del carcter ASCII.
AH = atributo del carcter.
Nota: Esta funcin no avanza el cursor.
5
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
Entrada:
AH = 09H
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.
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.
FUNCION
00H
Leer el carcter
01H
02H
03H
04H
05H
6
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
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
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).
7
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
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).
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.
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
9
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
end comienzo
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
10
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
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
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
11
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
12
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
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
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
13
E.P. INGENIERA INFORMTICA
Tipos de Interrupciones
POP DX
POP BX
POP AX
RET
ImprimeLetra ENDP
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
14
E.P. INGENIERA INFORMTICA