InicioInfocurso gratuito (leccion 10)

curso gratuito (leccion 10)

Info5/17/2009
ASM POR AEsoft. (lección 10).
--------------------------------------------------------------------
- funciones DOS:
- INT 21H (DOS-API)

- funciones BIOS:
- INT 10H (FUNCIONES DEL DRIVER DE VIDEO)
- INT 16H (FUNCIONES DEL DRIVER DE TECLADO)
--------------------------------------------------------------------

Hola de nuevo a todos los seguidores del CURSO DE ASM.

En las lecciones 7 y 8 hemos visto las más importantes instrucciones
con que contamos en Ensamblador del 8086. En próximas lecciones iremos
viendo el resto de instrucciones, según las vayamos necesitando.

En esta lección vamos a ver algo tan importante como ese conjunto de
instrucciones.
vamos a ver las principales interrupciones software (funciones) que
tenemos disponibles para usar en nuestros programas.

Mediante la llamada a una de estas funciones podemos leer un fichero,
cambiar de modo de vídeo, aceptar un carácter desde teclado, etc, etc.

Estas interrupciones software nos permiten trabajar con los distintos
subsistemas (teclado, vídeo, discos duros y disqueteras, etc..) de
una forma relativamente cómoda. Nos ofrecen las rutinas básicas para
trabajar con ellos.

Para cada uno de los tres servicios más importantes de cara al
programador (funciones DOS, funciones de pantalla y funciones de teclado),
vamos a enumerar las funciones fundamentales para empezar a trabajar.

Repito, la lista de funciones que se expone a lo largo de la lección,
no es completa. Para eso existen libros y manuales especiales.
Al final de la lección se ofrece bibliografía suficiente.

Conforme vaya avanzando el nivel del curso iremos viendo nuevos servicios
como la INT 33H (controlador del ratón), la INT 13H (Controlador de
disco), etc...



- funciones DOS
---------------
Las funciones DOS son todas aquellas interrupciones software de las que
está provisto el Sistema Operativo.
Estas funciones, entre las que se encuentra la INT 21H (la más importante
de todas), son utilizadas por el programador, y por el propio sistema
operativo para acceder a los distintos subsistemas del procesador como
son discos, teclado, etc...

Usaremos estas funciones cuando queramos: crear ficheros, borrar ficheros,
leer ficheros, solicitar memoria libre para trabajar con los datos de
nuestros programas, dejar programas residentes, etc, etc...

En definitiva, las funciones del DOS nos proporcionan un vínculo de
comunicación cómodo y seguro entre nuestro programa y los diferentes
subsistemas con los que podemos trabajar.

Veremos que esto también nos lo proporcionan las funciones BIOS, pero
a otro nivel más bajo.
Por ejemplo, mientras que las funciones DOS nos permiten trabajar con
ficheros, las funciones BIOS sólo nos permiten trabajar con discos en
función a pistas, sectores, etc. Es decir, más a bajo nivel.

En una próxima lección veremos la estructura interna de los discos:
Tanto la estructura física: cabezas (caras), cilindros (pistas),
sectores.... Como la estructura lógica que usa el MS-DOS:
BOOT RECORD, FAT, DIRECTORIO, CONTENIDO DE FICHEROS.
¦ +---------------+
(sector de arranque) (tabla de localización de ficheros)

Y volviendo a lo que nos ocupa: las funciones BIOS nos facilitan el
trabajo con la parte física: pistas, sectores, etc... Mientras que
las funciones DOS, nos permiten trabajar con la parte lógica: ficheros.

Por supuesto, al trabajar con la parte lógica (ficheros), el DOS debe
hacer uso de la parte física ó sectores (que es donde están almacenados
los ficheros). Para este trabajo, las mismas funciones DOS usan las
funciones BIOS.

Hemos dicho que la más importante de las funciones DOS es la INT 21H.
Pues bien, aparte de ésta, hay algunas más como son:
- INT 20H (Terminación de proceso).
- INT 22H (Dirección del gestor de terminación del programa en curso).
- INT 23H (Dirección del gestor de CTRL+C).
- INT 24H (Dirección del gestor de errores críticos).
- INT 25H (Lectura de sectores de disco).
- INT 26H (Escritura de sectores a disco).
- INT 27H (Dejar programa residente y salir).
- INT 28H a INT 2EH (Reservadas. No está permitido su uso al programador).
- INT 2FH (Interrupción múltiple ó Interrupción del Multiplexor).

La INT 20H es una de las muchas maneras de finalizar un programa.

Las interrupciones 22H, 23H y 24H las estudiaremos en la próxima lección,
cuando estudiemos la construcción de programas en ASM, y la gestión de
los mismos por parte del DOS.

Las interrupciones 25H y 26H se utilizan para leer y escribir sectores
de disco. Hemos visto antes que era la BIOS la que tenía este cometido.
La razón de ser de estas dos funciones es que utilizan un diferente
formato de referencia a los sectores. La BIOS trata a los sectores
del disco de forma física: Sector X del Cilindro Y de la Cabeza Z...
Mientras que el DOS enumera secuencialmente todos los sectores del
disco, desde (el sector 1 del cilindro 0 de la cabeza 0), hasta
el último sector del disco. Referenciando así a cada sector mediante un
sólo número de sector lógico.

La INT 27H es un método antiguo de dejar programas residentes en memoria.
No se suele utilizar. En su lugar, disponemos de la función 31h de la
INT 21H, que veremos a continuación.

Las funciones reservadas han sido pensadas por los programadores del
DOS, para uso exclusivo del mismo DOS, o son funciones vacías (sin
contenido) en previsión para un aumento de funciones en una próxima
versión del DOS.

La interrupción 2FH ó interrupción del Multiplexor, proporciona
información acerca del estado de ciertos programas residentes del DOS,
como son DOSKEY, PRINT, APPEND, SHARE, etc.
Podremos saber si están instalados o no, y en caso de que estén
instalados, la INT 2FH nos sirve como un interfaz ó vínculo de
comunicación con estos programas residentes.


- INT 21H (DOS-API)
-------------------
La mayoría de servicios ó funciones del sistema operativo MS-DOS se
obtienen a través de la interrupción software 21H.
Es por esto que se le denomina DOS-API:
DOS-APPLICATION-PROGRAM-INTERFACE, ó Interfaz entre programas de
aplicaciones y el MS-DOS.

La INT 21H está compuesta por un grupo de funciones.
Cuando se accede a la INT 21H, hay que indicar el número de función
que queremos ejecutar.
En determinadas casos, una función es tan compleja que necesita de
varias subfunciones para poder desempeñar todo su trabajo.
En este caso, deberemos indicar el número de esa función, y también el
número de la subfunción a la que queremos acceder dentro de esa función.

La llamada a la INT 21H se realizará como sigue:

+ Introducimos en (AH) el número de función a la que deseamos acceder.
+ En caso de que deseemos acceder a una subfunción dentro de una
función, debemos indicarlo introduciendo en (AL) el número de esa
subfunción.
+ Llamar a la INT 21H.

Aparte de los registros mencionados (AH y AL), la mayoría de funciones
requieren de otros registros para realizar su trabajo.
En estos registros se puede almacenar el comienzo de un buffer de disco
al trabajar con ficheros; el comienzo de una cadena de texto para sacar
por pantalla; etc..


Un ejemplo: Queremos usar la función 9h de la INT 21H para sacar por
pantalla una cadena de texto. Dicha cadena de texto se encuentra
almacenada a continuación de la etiqueta Cadena_De_Texto.

Procederemos como sigue:

Mov AH,9 ;indicamos número de función a ejecutar.
Mov DX,offset cadena_de_texto ;introducimos en DX la dirección donde
;se encuentra la cadena en cuestión.
INT 21H ;llamamos a la INT 21H, la cual ejecutará la función 9h.


A continuación vamos a ver las funciones básicas dentro de cada grupo
para empezar a programar en ensamblador.
No las vamos a ver todas, porque muchas de ellas ya no se usan, como son
las funciones de acceso a ficheros por el método FCB (que veremos cuando
hablemos de la estructura de los discos).
Tampoco veremos en un principio aquellas funciones que no vamos a utilizar
hasta pasado un buen tiempo, como son funciones relacionadas con la
información sobre el país, página de códigos, y unas pocas más que
sólo rara vez se utilizan.

De cualquier modo, siempre es interesante poder conocerlas todas, así
que si teneis oportunidad, hay por ahí manuales, libros, etc, en los
que vienen todas las funciones detalladas.


--------------- Funciones de la INT 21H -------------------


* Funciones de Entrada/Salida de caracteres *


+---------------------------------------------------------------------+
¦ INT 21H Función 01H ¦ ¦
+-----------------------------------------¦ ¦
¦ Entrada de Carácter con Eco (ó salida) ¦ ¦
+-----------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 01H ¦
¦ ¦
+ DEVUELVE: ¦
¦ AL = Código ASCII del Carácter leído. ¦
¦ ¦
+ EFECTO: ¦
¦ ¦
¦ Se lee un carácter del dispositivo de entrada estándar, y se ¦
¦ envía al dispositivo estándar de salida. Si al llamar a la ¦
¦ función no había ningún carácter disponible, se esperará a que ¦
¦ lo haya. ¦
¦ ¦
¦ Normalmente el dispositivo estándar de entrada es el teclado, ¦
¦ y el dispositivo estándar de salida es la pantalla. Es lo que ¦
¦ se conoce en MS-DOS como CON (de consola: teclado y pantalla). ¦
¦ ¦
¦ Tanto la Entrada como la Salida pueden ser redireccionadas. ¦
¦ Ya veremos lo que eso significa con más detalle. Sirva ahora que ¦
¦ es posible que los caracteres se puedan tomar de un dispositivo ¦
¦ diferente al teclado, y se puedan enviar a un dispositivo ¦
¦ diferente de la pantalla. ¦
¦ ¦
¦ Es decir, que como entrada podemos tener los caracteres de un ¦
¦ fichero, y como salida podríamos tener la impresora. ¦
¦ ¦
+ VERSION DE MS-DOS: 1.0 ó superior. ¦
¦ ¦
+ NOTAS: En la versión 1.0, se toma el carácter desde teclado, y se ¦
¦ envía hacia la pantalla. En la versión 1.0 del DOS, esta ¦
¦ función no admitía ninguna redirección de Entrada/Salida. ¦
¦ ¦
+---------------------------------------------------------------------+




+---------------------------------------------------------------------+
¦ INT 21H Función 02H ¦ ¦
+-----------------------------------------¦ ¦
¦ Salida de Carácter ¦ ¦
+-----------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 02H ¦
¦ DL = Código ASCII a enviar al dispositivo de salida. ¦
+ DEVUELVE: ¦
¦ NADA. ¦
¦ ¦
+ EFECTO: ¦
¦ ¦
¦ Se envía el carácter depositado en el registro DL al dispositivo ¦
¦ estándar de salida. ¦
¦ ¦
¦ La salida puede ser redireccionada hacia un fichero, impresora, etc ¦
¦ ¦
+ VERSION DE MS-DOS: 1.0 ó superior. ¦
¦ ¦
+ NOTAS: En la versión 1.0, se envía el carácter hacia la pantalla. ¦
¦ En la versión 1.0 del DOS, esta función no admitía ¦
¦ redirección de Salida. ¦
¦ ¦
+---------------------------------------------------------------------+



+---------------------------------------------------------------------+
¦ INT 21H Función 05H ¦ ¦
+-----------------------------------------¦ ¦
¦ Envío de Carácter a la Impresora ¦ ¦
+-----------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 05H ¦
¦ DL = Código ASCII a enviar al dispositivo de salida. ¦
+ DEVUELVE: ¦
¦ NADA. ¦
¦ ¦
+ EFECTO: ¦
¦ Se envía el carácter depositado en DL al puerto paralelo. ¦
¦ Si no se ha redireccionado la salida, el dispositivo por defecto ¦
¦ en el puerto paralelo de salida (LPT1 ó PRN) es la impresora. ¦
¦ ¦
+ VERSION DE MS-DOS: 1.0 ó superior. ¦
¦ ¦
+ NOTAS: En la versión 1.0, se envía el carácter hacia el primer ¦
¦ dispositivo de listado (PRN ó LPT1). ¦
¦ En versiones posteriores de MS-DOS, se puede redireccionar ¦
¦ la salida. ¦
¦ ¦
+---------------------------------------------------------------------+


+---------------------------------------------------------------------+
¦ INT 21H Función 09H ¦ ¦
+-------------------------------------------¦ ¦
¦ Visualización de una cadena de caracteres ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 09H ¦
¦ DSX = Segementoesplazamiento de la cadena a visualizar. ¦
¦ DS debe apuntar al segmento donde se encuentra la cadena. ¦
¦ DX debe contener el desplazamiento de la cadena dentro de ¦
¦ ese segmento. ¦
+ DEVUELVE: ¦
¦ NADA. ¦
¦ ¦
+ EFECTO: ¦
¦ Se envía una cadena de caracteres al dispositivo estándar de salida.¦
¦ Si no se ha redireccionado la salida, la cadena se enviará a la ¦
¦ pantalla. ¦
¦ ¦
+ VERSION DE MS-DOS: 1.0 ó superior. ¦
¦ ¦
+ NOTAS: La cadena debe finalizar con un carácter $ (24H), para que ¦
¦ el DOS pueda reconocer el fin de la cadena. ¦
¦ ¦
+---------------------------------------------------------------------+


+---------------------------------------------------------------------+
¦ INT 21H Función 0BH ¦ ¦
+-------------------------------------------¦ ¦
¦ Comprobación del estado de la entrada ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 0BH ¦
+ DEVUELVE: ¦
¦ AL = 00H si no hay carácter disponible. ¦
¦ AL = FFH si hay algún carácter disponible. ¦
¦ ¦
+ EFECTO: ¦
¦ Se comprueba si hay algún carácter procedente del dispositivo ¦
¦ estándar de entrada. La entrada puede ser redireccionada. ¦
¦ Si no hay tal redirección, se comprueba el buffer de teclado. ¦
¦ ¦
+ VERSION DE MS-DOS: 1.0 ó superior. ¦
¦ ¦
+ NOTAS: En caso de que haya un carácter disponible, sucesivas ¦
¦ llamadas a esta función seguirán dando un valor verdadero ¦
¦ hasta que se recoja el carácter con alguna de las funciones ¦
¦ de entrada de carácter, como la función 01h. ¦
¦ ¦
+---------------------------------------------------------------------+



* Funciones de manejo de disco *

+---------------------------------------------------------------------+
¦ INT 21H Función 0EH ¦ ¦
+-------------------------------------------¦ ¦
¦ Selección de disco ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 0EH ¦
¦ DL = Código de la unidad (0=A , 1=B , etc...) ¦
+ DEVUELVE: ¦
¦ AL = Número de unidades lógicas del sistema. ¦
¦ ¦
+ EFECTO: ¦
¦ Selecciona una unidad de disco para que se convierta en la unidad ¦
¦ por defecto o actual. Ofrece además información acerca del número ¦
¦ total de unidades lógicas del sistema. ¦
¦ ¦
+ VERSION DE MS-DOS: 1.0 ó superior. ¦
¦ ¦
+ NOTAS: Una unidad física como un disco duro puede estar particionada¦
¦ en varias unidades lógicas designadas por C , D, E ,etc. ¦
¦ ¦
+---------------------------------------------------------------------+


+---------------------------------------------------------------------+
¦ INT 21H Función 19H ¦ ¦
+-------------------------------------------¦ ¦
¦ Obtener disco actual ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 19H ¦
+ DEVUELVE: ¦
¦ AL = Código de la unidad actual (0=A , 1=B , etc...) ¦
¦ ¦
+ EFECTO: ¦
¦ Devuelve el código de la unidad de disco activa o por defecto. ¦
¦ ¦
+ VERSION DE MS-DOS: 1.0 ó superior. ¦
¦ ¦
+ NOTAS: Las mismas que para la función 0EH ¦
¦ ¦
+---------------------------------------------------------------------+



* Funciones de gestión de directorios *

+---------------------------------------------------------------------+
¦ INT 21H Función 39H ¦ ¦
+-------------------------------------------¦ ¦
¦ Crear directorio ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 39H ¦
¦ DSX = Segementoesplazamiento de una cadena ASCIIZ ¦
¦ con el nombre del directorio. ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Se crea un nuevo directorio usando la unidad de disco y la vía de ¦
¦ acceso especificada en la cadena ASCIIZ. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: En la versión 1.0 del MS-DOS no existían subdirectorios. ¦
¦ ASCIIZ es una cadena de códigos ASCII que termina con el ¦
¦ código ASCII 0h. ¦
¦ Así, si queremos crear un subdirectorio llamado PROGS dentro ¦
¦ del directorio DOS, la cadena ASCIIZ se definiría así: ¦
¦ Nombre_del_directorio db 'C:\DOS\PROGS',0 ¦
¦ Si en el momento de llamar a la función, la unidad activa es ¦
¦ la unidad C, no es necesario indicarlo. De igual forma, si ¦
¦ nos encontramos en el directorio DOS, tampoco necesitamos ¦
¦ indicarlo. ¦
¦ ¦
¦ Esta función se abortará (indicándolo mediante Cf y AX) si: ¦
¦ -la vía de acceso es incorrecta. ¦
¦ -el directorio a crear ya existe. ¦
¦ -el directorio a crear es un subdirectorio del Raiz, ¦
¦ y éste ya está lleno. ¦
¦ ¦
+---------------------------------------------------------------------+



+---------------------------------------------------------------------+
¦ INT 21H Función 3AH ¦ ¦
+-------------------------------------------¦ ¦
¦ Borrar directorio ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 3AH ¦
¦ DSX = Segementoesplazamiento de una cadena ASCIIZ ¦
¦ con el nombre del directorio a borrar. ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Se elimina el directorio indicado de la unidad de disco y la vía ¦
¦ de acceso especificada en la cadena ASCIIZ. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: En la versión 1.0 del MS-DOS no existían subdirectorios. ¦
¦ ¦
¦ Esta función se abortará (indicándolo mediante Cf y AX) si: ¦
¦ -la vía de acceso es incorrecta. ¦
¦ -el directorio especificado es el directorio activo. ¦
¦ -el directorio especificado no está vacío, es decir, ¦
¦ contiene algún fichero. ¦
¦ ¦
+---------------------------------------------------------------------+



+---------------------------------------------------------------------+
¦ INT 21H Función 3BH ¦ ¦
+-------------------------------------------¦ ¦
¦ Establecer directorio actual ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 3BH ¦
¦ DSX = Segementoesplazamiento de una cadena ASCIIZ ¦
¦ con el nombre del directorio. ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Establece como directorio actual el indicado mediante la cadena ¦
¦ ASCIIZ. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: En la versión 1.0 del MS-DOS no existían subdirectorios. ¦
¦ ¦
¦ Esta función se abortará (indicándolo mediante Cf y AX) si ¦
¦ la vía de acceso especificada en la cadena ASCIIZ es ¦
¦ incorrecta. ¦
¦ ¦
+---------------------------------------------------------------------+



+---------------------------------------------------------------------+
¦ INT 21H Función 47H ¦ ¦
+-------------------------------------------¦ ¦
¦ Obtener directorio actual ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 47H ¦
¦ DL = Código de la unidad (0 = unidad por defecto, actual; ¦
¦ 1 = A ; 2 = B ; etc...) ¦
¦ DS:SI = Segmentoesplazamiento de un buffer de 64 bytes. ¦
¦ Este buffer contendrá el nombre del directorio, con ¦
¦ toda la vía de acceso al mismo, en forma de cadena ¦
¦ ASCIIZ. ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Establece como directorio actual el indicado mediante la cadena ¦
¦ ASCIIZ. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: En la versión 1.0 del MS-DOS no existían subdirectorios. ¦
¦ ¦
¦ Esta función se abortará (indicándolo mediante Cf y AX) si ¦
¦ el código de unidad no es válido. Es decir, no se especifica ¦
¦ una unidad válida. ¦
¦ ¦
¦ La vía de acceso que antecede al nombre del directorio no ¦
¦ incluye el código '\' (directorio raiz), ni el identificador ¦
¦ de la unidad. ¦
¦ El nombre de directorio acaba con el carácter 00h que cierra ¦
¦ la cadena ASCIIZ. ¦
¦ ¦
+---------------------------------------------------------------------+


* Funciones de manejo de Ficheros *


+---------------------------------------------------------------------+
¦ INT 21H Función 3CH ¦ ¦
+-------------------------------------------¦ ¦
¦ Crear Fichero ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 3CH ¦
¦ CX = Atributos del fichero: ¦
¦ 00H Fichero Normal. ¦
¦ 01H Fichero de Sólo Lectura. ¦
¦ 02H Fichero Oculto. ¦
¦ 03H Fichero de Sistema. ¦
¦ DSX = Segmentoesplazamiento de una cadena ASCIIZ con ¦
¦ el nombre de fichero. ¦
¦ ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ AX = Handle o manejador de fichero. ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Si el fichero indicado mediante la cadena ASCIIZ ya existía, ¦
¦ entonces se vacía su contenido, quedando con longitud 0. ¦
¦ Si el fichero no existía, entonces se crea. ¦
¦ En ambos casos, el fichero se abre, y se devuelve un Handle ó ¦
¦ manejador de fichero para los restantes accesos a dicho fichero. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: ¦
¦ Esta función se abortará (indicándolo mediante Cf y AX) si: ¦
¦ -La vía de acceso indicada en la cadena ASCIIZ es errónea. ¦
¦ -Se va a crear el fichero en el directorio raiz y éste ya ¦
¦ está lleno. ¦
¦ ¦
¦ El Handle es un número mediante el cual se referencia a un ¦
¦ fichero dado. De esta forma es más cómodo trabajar con ¦
¦ ficheros. Para cada uno de los ficheros con que trabajemos, ¦
¦ tendremos un número (Handle) que lo representará. ¦
¦ ¦
+---------------------------------------------------------------------+



+---------------------------------------------------------------------+
¦ INT 21H Función 3DH ¦ ¦
+-------------------------------------------¦ ¦
¦ Abrir Fichero ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 3DH ¦
¦ AL = Modo de acceso. ¦
¦ ¦
¦ Bits 0-2: Permiso de lectura/escritura. ¦
¦ 000b Acceso de sólo lectura. ¦
¦ 001b Acceso de sólo escritura. ¦
¦ 010b Acceso de lectura/escritura. ¦
¦ ¦
¦ Bit 3: 0b (Reservado). ¦
¦ ¦
¦ Bits 4-6: Modo de compartición de Fichero. ¦
¦ 000b Sólo el programa actual puede acceder ¦
¦ al archivo. ¦
¦ 001b Sólo el programa actual puede acceder ¦
¦ al archivo. ¦
¦ 010b Otro programa puede leer el archivo, ¦
¦ pero no escribir en él. ¦
¦ 011b Otro programa puede escribir en el ¦
¦ archivo, pero no leerlo. ¦
¦ 100b Otro programa puede leer y escribir en¦
¦ el archivo. ¦
¦ ¦
¦ Bit 7: Bit de 'herencia' ó Handle-flag. ¦
¦ 0b Si el handle se hereda por un programa ¦
¦ hijo. ¦
¦ 1b Si el handle no se hereda. ¦
¦ ¦
¦ DSX = Segmentoesplazamiento de una cadena ASCIIZ con ¦
¦ el nombre de fichero. ¦
¦ ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ AX = Handle o manejador de fichero. ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Mediante esta función se habre un fichero ya existente, y se ¦
¦ devuelve un Handle para acceder al fichero en lo sucesivo. ¦
¦ ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: ¦
¦ El puntero de fichero se coloca sobre el primer byte del ¦
¦ fichero. ¦
¦ ¦
+---------------------------------------------------------------------+


+---------------------------------------------------------------------+
¦ INT 21H Función 3EH ¦ ¦
+-------------------------------------------¦ ¦
¦ Cerrar Fichero ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 3EH ¦
¦ BX = Handle. ¦
¦ ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Mediante esta función se cierra un fichero que estuviera abierto. ¦
¦ Se utiliza el Handle para indicar el fichero a cerrar. ¦
¦ Tras cerrar el fichero, dicho Handle se libera para nuevos ficheros.¦
¦ Se vuelvan al disco todos los buffers internos asociados al fichero.¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: ¦
¦ Si por error se llamara a esta función con el valor 0, se ¦
¦ cerraría el dispositivo de entrada estándar (teclado), que ¦
¦ tiene asociado ese handle 0. En cuyo caso no se aceptarían ¦
¦ datos del teclado. ¦
¦ Si el valor del handle fuera 1, se cerraría la pantalla, y ¦
¦ no se enviarían caracteres a la pantalla. ¦
¦ Hay en total 5 handles reservados para referenciar a ¦
¦ diferentes dispositivos: ¦
¦ ¦
¦ Handle 0 ---> Dispositivo estándar de entrada. (CON). ¦
¦ Handle 1 ---> Dispositivo estándar de salida. (CON). ¦
¦ Handle 2 ---> Dispositivo estándar de error. (CON). ¦
¦ Handle 3 ---> Dispositivo auxiliar estándar. (AUX). ¦
¦ Handle 4 ---> Dispositivo estándar de listado. (PRN). ¦
¦ ¦
¦ Normalmente, el handle 0 referencia al teclado. ¦
¦ El handle 1, a la pantalla. ¦
¦ El handle 2, a la pantalla. Se utiliza a la hora de mostrar ¦
¦ errores. Por eso lo de dispositivo de error. ¦
¦ El handle 4, a la impresora. ¦
¦ El handle 3 referencia a un dispositivo auxiliar. ¦
¦ ¦
¦ ¦
+---------------------------------------------------------------------+



+---------------------------------------------------------------------+
¦ INT 21H Función 3FH ¦ ¦
+-------------------------------------------¦ ¦
¦ Lectura de Fichero o dispositivo. ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 3FH ¦
¦ BX = Handle. ¦
¦ CX = Número de bytes a leer. ¦
¦ DSX = Segmentoesplazamiento del buffer donde se ¦
¦ depositarán los carateres leidos. ¦
¦ ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ AX = Bytes transferidos. ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Dado un handle válido, se realiza una transferencia desde el ¦
¦ fichero referenciado por ese handle hacia el buffer de memoria ¦
¦ especificado mediante DSX. Se transferirán tantos caracteres ¦
¦ como se especifique en CX. Acto seguido, se actualiza el puntero ¦
¦ de fichero hasta el carácter que sigue al bloque leido. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: ¦
¦ Si se devuelve el flag Cf con valor (0), pero AX=0, esto ¦
¦ quiere decir que el puntero de fichero estaba apuntando ¦
¦ al final de fichero, y por eso no se ha podido leer ningún ¦
¦ carácter. ¦
¦ Si se devuelve el flag Cf con valor (0), pero el contenido ¦
¦ del registro AX es menor que la cantidad de bytes a leer, ¦
¦ (indicado mediante CX antes de llamar a la función), esto ¦
¦ significa que se produjo algún error, o que no se pudo leer ¦
¦ todos los caracteres solicitados, porque se llegó al final ¦
¦ de fichero. ¦
¦ ¦
¦ Mediante esta función es posible leer caracteres del teclado,¦
¦ usando el handle 0. ¦
¦ ¦
+---------------------------------------------------------------------+



+---------------------------------------------------------------------+
¦ INT 21H Función 40H ¦ ¦
+-------------------------------------------¦ ¦
¦ Escritura en Fichero o dispositivo. ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 40H ¦
¦ BX = Handle. ¦
¦ CX = Número de bytes a escribir. ¦
¦ DSX = Segmentoesplazamiento del buffer desde donde se ¦
¦ van a tomar los caracteres a escribir. ¦
¦ ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ AX = Bytes transferidos. ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Dado un handle válido, se realiza una transferencia desde el ¦
¦ buffer de memoria indicado mediante DSX hacia el fichero o ¦
¦ dispositivo referenciado por el Handle. ¦
¦ Se transferirán tantos caracteres como se especifique en CX. ¦
¦ Acto seguido, se actualiza el puntero de fichero una posición por ¦
¦ delante del bloque escrito, para que futuras escrituras no ¦
¦ 'machaquen' los datos que ya hubiera. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: ¦
¦ Si se devuelve el flag Cf con valor (0), pero AX=0, esto ¦
¦ quiere decir que el dispositivo en el que se encuentra ¦
¦ el fichero ya estaba lleno antes de la llamada a esta ¦
¦ función. ¦
¦ Si se devuelve el flag Cf con valor (0), pero el contenido ¦
¦ del registro AX es menor que la cantidad de bytes a escribir,¦
¦ (indicado mediante CX antes de llamar a la función), esto ¦
¦ significa que se produjo algún error, o que no se pudo ¦
¦ escribir todos los caracteres solicitados, porque se ha dado ¦
¦ una condición de disco lleno. ¦
¦ ¦
¦ Mediante esta función es posible escribir caracteres en la ¦
¦ pantalla, usando el handle 1. ¦
¦ ¦
+---------------------------------------------------------------------+



+---------------------------------------------------------------------+
¦ INT 21H Función 41H ¦ ¦
+-------------------------------------------¦ ¦
¦ Borrar Fichero. ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 41H ¦
¦ DSX = Segmentoesplazamiento de la cadena ASCIIZ ¦
¦ con el nombre del fichero a borrar. ¦
¦ ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Se borra el fichero indicado mediante la cadena ASCIIZ. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: ¦
¦ La función se abortará si: ¦
¦ - La vía de acceso contenida en la cadena ASCIIZ es errónea. ¦
¦ - Si el fichero a borrar es de sólo lectura. ¦
¦ ¦
+---------------------------------------------------------------------+


+---------------------------------------------------------------------+
¦ INT 21H Función 42H ¦ ¦
+-------------------------------------------¦ ¦
¦ Establecer puntero de fichero. ¦ ¦
+-------------------------------------------+ ¦
¦ ¦
+ LLAMADA: ¦
¦ AH = 42H ¦
¦ AL = Código de desplazamiento: ¦
¦ 00h Desplazamiento desde el inicio del fichero. ¦
¦ 01h Desplazamiento desde la posición actual del ¦
¦ puntero. ¦
¦ 02h Desplazamiento desde el final del fichero. ¦
¦ ¦
¦ BX = Handle del fichero. ¦
¦ CX = Mitad más significativa del desplazamiento. ¦
¦ DX = Mitad menos significativa del desplazamiento. ¦
¦ ¦
+ DEVUELVE: ¦
¦ Si se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 0 ¦
¦ DX = Mitad más significativa del puntero actualizado. ¦
¦ AX = Mitad menos significativa del puntero actualizado.¦
¦ ¦
¦ Si NO se ejecutó correctamente: ¦
¦ Flag de acarreo (Cf) = 1 ¦
¦ AX = Código de error. ¦
¦ ¦
+ EFECTO: ¦
¦ Cambia el valor del puntero de fichero, permitiendo así un acceso ¦
¦ aleatorio al fichero. Podremos, mediante esta función, escribir y ¦
¦ leer caracteres en cualquier posición del fichero, sin pasar por ¦
¦ las anteriores. ¦
¦ ¦
+ VERSION DE MS-DOS: 2.0 ó superior. ¦
¦ ¦
+ NOTAS: ¦
¦ Independientemente del tipo de llamada, el valor del puntero ¦




Datos archivados del Taringa! original
0puntos
33visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
1visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

b
brandon666🇦🇷
Usuario
Puntos0
Posts6
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.