Anda di halaman 1dari 14

FACULTAD DE INGENIERA INDUSTRIAL

ESCUELA PROFESIONAL DE INGENIERA INFORMTICA


ING. FLIX RIGO REQUENA
MICROCOMPUTADORAS I

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

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

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:

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.

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:

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.

E.P. INGENIERA INFORMTICA

Tipos de Interrupciones
CL = nmero de la ltima lnea.

Salida:
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.

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.

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

FUNCION

00H

Leer el carcter

01H

Obtener el estado del teclado

02H

Obtener las banderas del teclado

03H

Establecer el rango de repeticin

04H

Establecer el toque del teclado

05H

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

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.

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

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

; fin del cdigo residente


; redondeo a prrafo
; bytes -> prrafos
; terminar residente

ENDS
END inicio

Programa Interrupciones Del Teclado

11
E.P. INGENIERA INFORMTICA

Tipos de Interrupciones

; 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
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

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

; Leer posicin del cursor


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

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

; 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

14
E.P. INGENIERA INFORMTICA

Anda mungkin juga menyukai