Curso de Asembler - Interrupciones

9 - Interrupciones


Curso gratis creado por Pablo Barrón Ballesteros ( Wintermute ) .
04 Noviembre 2005
< anterior | 1 .. 7 8 9 10 11 .. 15 | siguiente >
A ‚stas alturas del curso estar‚is diciendo: bueno, vale, he aprendido

a mover registros, a meterlos en la pila, etc,... ¨ pero cómo actúo con

el exterior ?. Porque por mucho registro que tenga no voy a escribir por

ejemplo un car cter en la pantalla. Bieeeeeen, pues aquí est , son las

interrupciones.

La primera cosa que tenemos que hacer es saber como funcionan las

interrupciones. Son principalmente subrutinas de la BIOS o el DOS que

pueden ser llamadas por un programa, por ejemplo la función 21h est

dedicada especialmente a tratamiento de archivos.

Para utilizarlas, tendremos que poner los registros con un determinado

valor para que se realice el propósito que buscamos. Cada interrupción

tiene varias funciones, y podremos elegir cual ejecutamos según el valor

de AH.

El formato de la órden es INT X, donde X puede ir desde 1 a 255 ( aunque

normalmente se escribe en formato hexadecimal ).

Cuando se ejecuta una interrupción, el ordenador empuja todos los flags

a la pila, un 'PUSHF', y despu‚s mira en la tabla de vectores de

interrupción, de la que hablar‚ m s adelante, para transferir el control

del programa al punto que indica esa tabla respecto a la interrupción

pedida mediante un 'CALL'. Cuando la interrupción ha terminado, acabar  con

un IRET, que es una combinación entre 'POPF' y 'RET'.

La tabla de Vectores de Interrupción es una tabla de direcciones para

la dirección a la que debe saltar cada interrupción. Comienza en la

dirección de memoria 0000:0000 y acaba en la 0000:0400, siendo cada

dirección de 4 bytes de longitud. Para averiguar cual corresponde a cada

interrupción, no hay m s que multiplicar el número de interrupción por

cuatro. Por ejemplo, la dirección de memoria donde est  el punto al que

salta una INT 21h, es 0000:21h*4. Ahí se contienen el CS e IP a los que

saltar  el programa cuando se ejecute la interrupción. Estos valores, son

modificables, pero hay que tener mucho cuidado con ello.

Y ahora voy a ponerme algo m s mundano, si no hab‚is entendido ‚sto al

menos saber 'qu‚ hace', quiz  así adem s los que os hay is perdido pod is

retornar m s adelante. Vamos con un ejemplo de uso de una interrupción:

jmp mesaltomsg      ; Esto lo hago porque ejecutar el texto

;puede traer consecuencias imprevisibles

archivo:        db 'c:\command.com',0 ; el 0 que va despu‚s es necesario

; en operaciones con archivos, o no

; funcionar .

mesaltomsg:     mov ax,4100h        ; Al ir a llamar a la interrupción, AH

;( que aquí es 41h ), indica la función

;de dicha interrupción que se quiere

;ejecutar. En ‚ste caso es la 41h, que

;significa borrar un fichero

mov dx,OFFSET archivo   ; En dx cargamos la dirección del

;offset con la etiqueta archivo,

;o sea, si la etiqueta archivo est

;en :0014h, ese ser  ahora el valor

;de DX. Como vemos, no sólo basta

;con tener AX actualizado para poder

;usar la interrupción.

Int 21h                 ; Ejecutamos la interrupción 21h en

;su función 41h, borrar un fichero.

Voy a detallar un poco m s, ¨ por qu‚ en dx pongo la dirección del offset

de archivo ?. Porque la función de la Int21h que busco necesita par metros.

Cuando AH vale 41h, función de borrar fichero, necesita ciertos par metros,

y ‚sto es que en DS:DX se encuentre la cadena de caracteres que indica el

fichero a buscar.

Como DS vale lo mismo que CS si no lo hemos cambiado, tan sólo hace

falta hacer que DX apunte al lugar donde est  la cadena de caracteres con

el nombre del archivo.

Vamos con otro ejemplo. Ahora, queremos cambiar el nombre de un fichero.

La interrupción para ello es la 21h, y la función que queremos es la 56h,

con lo que en AH tendremos que poner ese valor.

El par DS:DX, es la dirección de la cadena que contiene la unidad, camino

y nombre del fichero, tal y como sucedía en el anterior ejemplo, y ES:DI

la dirección de la cadena que contiene la nueva unidad, camino y nombre.

Vamos con el programa:

Mov     ah,56h                  ; No hace falta inicializar al, como

;hicimos antes, no tiene ninguna

;importancia su contenido.

Mov     dx,OFFSET anterior      ; Ds ya est  apuntando a ‚ste segmento,

;sólo tendremos que asignar Dx

Mov     di,OFFSET posterior     ; Di apunta al nuevo nombre, Es no ha

;sido variado de ninguna manera.

Int     21h                     ; Si en ‚ste directorio de halla el

;archivo de DS:DX, cambia su nombre al

;de ES:DI

Int     20h                     ; Devuelve el control al Ms-dos.

anterior:       db  'berilio.com',0

posterior:      db  'magnesio.com',0

En resumen, cambiar  el nombre del archivo berilio.com a magnesio.com

si ‚ste se encuentra en el directorio.

Hay innumerables cosas que se pueden hacer con las interrupciones:

escribir textos, leer del teclado, cambiar modos de pantalla, escribir

en archivos, leerlos, ejecutarlos,... demasiado para ponerlo aquí, aunque

al final del curso os podr‚is encontrar m s ejemplos.

Recomiendo tener a mano la lista de interrupciones de Ralf Brown, que

es una aut‚ntica biblia de las interrupciones, o las guías Norton. El caso

es que es imposible sab‚rselas de memoria, y es mejor tener una buena

obra de consulta al lado. La lista de interrupciones de Ralf Brown es

f cil de encontrar, y ocupa cerca de un disco completo, con largos archivos

de texto, y se actualiza de vez en cuando.

Para dar una idea en general y que sep is cómo buscar lo que necesit is,

aquí est n las interrupciones que m s se usan y sus funciones en general,

símplemente para orientaros al buscar.

Interrupción 21h: Apuesto a que es la que m s utilizar‚is, con ella se

consigue el acceso a la fecha y hora del sistema, gestión de ficheros,

funciones de dos referidas al disco, para la gestión de directorios, y

algunas de lectura/escritura en el teclado y pantalla, adem s de la gestión

de la memoria.

Interrupción 13h: Funciones de BIOS que se refieren al disco.

Interrupción 10h: Gestión de la pantalla en modo alfanum‚rico, gestión

de la pantalla en modo gr fico.

Interrupciones 25h y 26h: Funciones de dos de acceso directo al disco,

escribir y leer sectores...

Interrupción 17h: Impresora.
< anterior | 1 .. 7 8 9 10 11 .. 15 | siguiente >

Autor y licencia de 'Curso de Asembler'


Curso gratis de Pablo Barrón Ballesteros ( Wintermute ) . CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.