Capítulo – 6
Introducción a los conceptos básicos de la computadora
Introducción
Algunas veces, en algunos casos, cuando intenta recuperar los datos o está realizando cualquier tarea de resolución de problemas de datos y disco (o puede ser cualquier otra tarea relacionada con el sistema), es muy conveniente usar el comando DEBUG de DOC.
También es posible que, en algunos casos particulares, le resulte fácil realizar esa tarea en particular con la ayuda de DEBUG y luego con la programación. Tomemos un ejemplo. La siguiente codificación de depuración será suficiente para realizar la copia de seguridad de DBR. Simplemente escriba las siguientes líneas:
DEBUG BKDBR.BIN
L 100 2 0 1
R CX
200
W
Q
Aquí puede ver que solo escribiendo las pocas líneas anteriores puede evitar escribir un programa. Veamos otro ejemplo de codificación que carga la copia de seguridad de DBR en el disco
¡Recuerda siempre! No intente esto sin el conocimiento completo. Asegúrate de lo que vas a hacer. Un uso descuidado de las siguientes Instrucciones puede causar una gran pérdida de datos, ya que el mal uso de las Instrucciones puede hacer que toda su información del disco sea inaccesible.
DEBUG BKDBR.BIN
W 100 2 0 1
Q
Al ver la codificación de este ejemplo, puede adivinar fácilmente cuánto puede ayudarlo cuando más lo necesita. Además, no es posible programar en todas las situaciones. Sin embargo, dentro de un límite de casos simples del problema, para usar las instrucciones de ensamblaje, solo tiene que copiar debug.exe/debug.com en su disco de arranque y comenzar a escribir el código.
El funcionamiento y los ejemplos descritos en este capítulo y en este libro son compatibles únicamente con la arquitectura de la familia de procesadores Intel x86.
En primer lugar, necesitamos obtener un poco de conocimiento de los conceptos básicos de la arquitectura informática para comprender los términos utilizados en las próximas secciones mientras se describe el funcionamiento y los ejemplos en diferentes pasos. Háganos saber algunos conceptos básicos de la arquitectura de la computadora:
Conceptos básicos
Procesador central
Esta parte también se conoce como unidad central de procesamiento o CPU, la cual a su vez está compuesta por la unidad de control y la unidad aritmética y lógica. Sus funciones consisten en leer y escribir el contenido de las celdas de memoria, reenviar datos entre celdas de memoria y registros especiales, y decodificar y ejecutar las Instrucciones de un programa. El procesador tiene una serie de celdas de memoria que se usan con mucha frecuencia y, por lo tanto, forman parte de la CPU.
Estas celdas se conocen con el nombre de registros. Un procesador puede tener una o dos docenas de estos registros. La unidad aritmética y lógica de la CPU realiza las operaciones relacionadas con cálculos numéricos y simbólicos.
Por lo general, estas unidades solo tienen capacidad para realizar operaciones muy elementales, como la suma y resta de dos números enteros, la multiplicación y división de números enteros, el manejo de los bits de los registros y la comparación del contenido de dos registros. Las computadoras personales se pueden clasificar por lo que se conoce como tamaño de palabra, es decir, la cantidad de bits que el procesador puede manejar a la vez.
Memoria Central
Es un conjunto de celdas, fabricadas con semiconductores, utilizadas para procesos generales, como la ejecución de programas y el almacenamiento de información para las operaciones. Cada una de estas celdas puede contener un valor numérico y tienen la propiedad de ser direccionables. Esto es que se pueden distinguir unos de otros por medio de un número único o una dirección para cada celda. El nombre genérico de estas memorias es Random Access Memory o RAM.
La principal desventaja de este tipo de memoria es que los circuitos integrados pierden la información que tienen almacenada cuando se interrumpe el flujo eléctrico. Este fue el motivo de la creación de memorias cuya información no se pierde cuando se apaga el sistema. Estas memorias reciben el nombre de Read Only Memory o ROM.
Para que la PC procese información, es necesario que esta información esté en celdas especiales llamadas registros. Los registros son grupos de 8 o 16 flip-flops.
Un flip-flop es un dispositivo capaz de almacenar dos niveles de tensión, uno bajo, normalmente de 0,5 voltios, y otro, normalmente de 5 voltios. El nivel bajo de energía en el flip-flop se interpreta como apagado o 0, y el nivel alto como encendido o
- Estos estados generalmente se conocen como bits, que son la unidad de información más pequeña en una computadora.
Un grupo de 16 bits se conoce como palabra; una palabra se puede dividir en grupos de 8 bits llamados bytes, y los grupos de 4 bits se denominan nibbles.
Registros de CPU
La CPU tiene 4 registros internos, cada uno de 16 bits. Los primeros cuatro, AX, BX, CX y DX son registros de uso general y también se pueden usar como registros de 8 bits, si usados de tal forma es necesario referirse a ellos por ejemplo como: AH y AL, que son los bytes alto y bajo del registro AX. Esta nomenclatura también es aplicable a los registros BX, CX y DX.
Los registros conocidos por sus nombres específicos:
Registrarse |
Nombre específico |
HACHA |
Acumulador |
BX |
Registro básico |
CX |
Registro de conteo |
DX |
Registro de datos |
DS |
Registro de segmento de datos |
ES |
Registro de segmento adicional |
SS |
Registro de segmento de batería |
CS |
Registro de segmento de código |
BP |
Registro de punteros base |
SI |
Registro de índice de fuente |
DI |
Registro de índice de destino |
SP |
Registro de puntero de batería |
IP |
Registro de puntero de instrucción siguiente |
F |
Registro de banderas |
Sin embargo, usaremos estos registros en la programación de interrupciones a través de C en los próximos capítulos en detalle, pero aprender los conceptos básicos del lenguaje ensamblador aquí será ideal y nos ayudará a través de la programación de operaciones de disco, etc.
Es posible visualizar los valores de los registros internos de la UCP mediante el programa Debug. Para comenzar a trabajar con Debug, escriba el siguiente mensaje en su computadora:
C:/>Depurar <Intro>
En la siguiente línea aparecerá un guión, este es el indicador de Depuración, en este momento se pueden introducir las Instrucciones de Depuración mediante el siguiente comando:
- r <Intro>
Se muestra todo el contenido de los registros internos de la CPU. Una alternativa para visualizarlos es utilizar la "r" comando usando como parámetro el nombre del registro cuyo valor se quiere ver. Por ejemplo:
-rbx <Intro>
Esta instrucción solo mostrará el contenido del registro BX y el indicador de depuración cambiará de "-" a ":"
Cuando el indicador es así, es posible cambiar el valor del registro que se vio escribiendo el nuevo valor y <Enter>, o se puede dejar el valor anterior presionando Enter sin escribir ningún otro valor.
Es posible cambiar el valor del registro flag, y usarlo como estructura de control en nuestros programas como veremos más adelante. Cada bit del registro tiene un nombre y significado especial, la siguiente lista describe el valor de cada bit, encendido o apagado y su relación con las operaciones del procesador:
Overflow
NV = there is no overflow
OV = there is an overflow
Direction
UP = forward
DN = backward
Interrupts
DI = deactivated
EI = activated
Sign
PL = positive
NG = negative
Zero
NZ = it is not zero
ZR = it is zero
Auxiliary Carry
NA = there is no auxiliary carry
AC = there is auxiliary carry
Parity
PO = uneven parity
PE = even parity
Carry
NC = there is no carry
CY = there is carry
Estructura del ensamblador
En lenguaje ensamblador las líneas de código tienen dos partes, la primera es el nombre de la Instrucción que se va a ejecutar, y la segunda son los parámetros del comando. Por ejemplo:
AÑADIR ah, bh
Aquí "AGREGAR" es el comando a ejecutar; en este caso una adición y "ah" así como "bh" son los parámetros.
El nombre de las Instrucciones en lenguaje se compone de dos, tres o cuatro letras. Estas instrucciones también se denominan nombres mnemotécnicos o códigos de operación, ya que representan una función que realizará el procesador. Hay algunos comandos que no requieren parámetros para su funcionamiento, así como otros que solo requieren un parámetro.
A veces, las instrucciones se usan de la siguiente manera:
ADD al,[170]
Los corchetes del segundo parámetro nos indican que vamos a trabajar con el contenido de la celda de memoria número 170 y no con el valor 170; esto se conoce como dirección directa.
Ahora estamos listos para codificar nuestro primer programa con la ayuda de debug. Vamos a crear un programa que sirva para ilustrar lo que hemos estado viendo, y lo que haremos será sumar dos valores que introduciremos directamente en el programa.
El primer paso es iniciar la depuración, este paso solo consiste en escribir debug <Enter> en el aviso del sistema operativo.
Para ensamblar un programa en Debug, el "a" (ensamblar) se utiliza el comando. Cuando se usa este comando, la dirección donde desea que comience el ensamblaje se puede dar como parámetro, si se omite el parámetro, el ensamblaje se iniciará en la localidad especificada por CS:IP, generalmente 0100h, que es la localidad donde se ejecutan los programas. con extensión .COM debe iniciarse. Y será el lugar que usaremos ya que solo Debug puede crear este tipo específico de programas.
Si bien en este momento no es necesario dar la "a" comandar un parámetro, es recomendable hacerlo para evitar problemas una vez que se utilicen los Registros CS:IP, por lo tanto tecleamos:
-a0100 <Enter>
Cuando se hace esto aparecerá algo como esto en la pantalla: 0C1B:0100 y el cursor se coloca a la derecha de estos números, tenga en cuenta que los primeros cuatro dígitos, en sistema hexadecimal, pueden ser diferentes, pero los últimos cuatro deben ser 0100 , ya que es la dirección que indicamos como inicio. Ahora podemos introducir las Instrucciones:
0C1B:0100 mov ax,0002; puts the 0002 value on the ax register
0C1B:0103 mov bx,0004; puts the 0004 value on the bx register
0C1B:0106 add ax,bx; the content of bx is added to the content of ax
0C1B:0108 int 20; provoques the termination of the program.
0C1B:010A
No es necesario escribir los comentarios que van después de ";". Una vez que se ha escrito el último comando, int 20, <Enter> se presiona sin escribir nada más, para volver a ver el indicador del Depurador.
La última línea escrita no es propiamente una Instrucción en ensamblador, sino que es un llamado a una interrupción del sistema operativo, estas interrupciones nos ahorran una gran cantidad de líneas y son muy útiles para acceder a las funciones del sistema operativo.
Para ejecutar el programa que escribimos, la "g" se usa el comando, y cuando se use veremos un mensaje que dice:
"El programa terminó normalmente". Naturalmente, con un mensaje como este, no podemos estar seguros de que el programa haya realizado la suma, pero hay una manera simple de verificarlo, usando la "r" comando del Debug podemos ver el contenido de todos los registros del procesador, simplemente digitamos:
-r <Enter>
Cada registro con su respectivo valor real aparecerá en la pantalla así:
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A OF DB
Existe la posibilidad de que los registros contengan valores diferentes, pero AX y BX deben ser iguales, ya que son los que acabamos de modificar.
Otra forma de ver los valores, mientras se ejecuta el programa, es usar la dirección donde queremos que termine la ejecución y mostrar los valores de los registros como parámetro para "g", en este caso sería : g108, esta Instrucción ejecuta el programa, se detiene en la dirección 108 y muestra el contenido de los registros.
Se puede hacer un seguimiento de lo que está pasando en los registros usando la "t" comando (trace), la función de este comando es ejecutar línea por línea lo ensamblado, mostrando cada vez el contenido de los registros.
Para salir de Depuración, utilice la "q" (salir) comando.
Ventajas del Ensamblador
La primera razón para trabajar con ensamblador es que brinda la oportunidad de conocer más el funcionamiento de su PC, lo que permite desarrollar software de una manera más consistente.
La segunda razón es el control total de la computadora, que puedes tener con el uso del ensamblador. Otra razón es que los programas basados en ensamblador son más rápidos y en algunos casos son más pequeños y tienen mayores capacidades que los creados con otros lenguajes.
¡¡Déjame cumplir mi promesa!!
En la parte anterior de este capítulo, usamos algunas instrucciones como ejemplo para hacer la copia de seguridad de DBR y cargar la copia de seguridad de DBR en su ubicación original cuando sea necesario. Primero examinamos la Instrucción para hacer la copia de seguridad.
C:\>DEBUG A:\BKDBR.BIN <Enter>
File not found
- L 100 2 0 1 <Enter>
- R CX <Enter>
CX 0000
: 200 <Enter>
- W <Enter>
Writing 00200 bytes
- Q <Enter>
En este ejemplo, comencemos a estudiar desde la primera línea. El comando DEBUG A:\BKDBR.BIN Inicializa el comando de depuración con la creación de un archivo en A: unidad de disquete con el nombre BKDBR.BIN si aún no está presente allí. Es por eso que recibimos el mensaje "Archivo no encontrado" al principio.
En nuestra segunda Instrucción L 100 2 0 1, el comando L (carga) es para cargar el DBR de la unidad instruida. Aprendamos ¿cómo? En esta Instrucción, el número 100 es la dirección del búfer, donde se almacenará el DBR, el siguiente número 2 se usa para la unidad C(C :). Los números de unidad se dan de la siguiente manera:
Drive Letter |
Number Used |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
and so on |
. |
El siguiente número 0 es el número de sector inicial del número de sectores a leer. Aquí estamos usando 0 para leer el primer sector, es decir, el sector DBR. El siguiente número que es 1 se usa para informar el número de sectores a leer.
Aquí hemos dado 1 porque solo queremos leer un sector. Sin embargo, podemos usar los números y las ubicaciones de los sectores de inicio y finalización de acuerdo con nuestras necesidades en diferentes tipos de otras operaciones. Por lo tanto, cargará un sector desde el primer sector de la unidad C: hasta la ubicación de memoria 100.
Y la instrucción R CX se usa para cambiar o definir la longitud de los datos que queremos escribir en el archivo BKDBR.BIN. Esta Instrucción mostrará el valor actual del registro CX y le permitirá realizar cualquier cambio. Escribimos 200 aquí porque el comando DEBUG usa el sistema hexadecimal y el tamaño de DBR en hexadecimal es 200(h) bytes, es decir, 512 bytes en sistema decimal.
El comando W le dice a DEBUG que escriba los 200(h) bytes desde la ubicación 100 al archivo BKDBR.BIN. Y finalmente usamos la Instrucción Q para salir de DEBUG y volver al indicador de DOS.
¡¡¡Advertencia!!! ¡¡¡Advertencia!!! ¡¡¡Advertencia!!!
Se recomienda estrictamente que sepa qué y cómo está haciendo en el procedimiento de restauración de DBR de cualquier disco. Si accidentalmente almacena el ilegal o DBR de cualquier otro disco, es posible en la mayoría de los casos que los datos completos del disco se vuelvan inaccesibles.
cuando escribe la primera Instrucción de la codificación que es:
DEBUG A:\BKDBR.BIN <Enter>
El archivo debe estar en la ubicación dada donde está iniciando el programa DEBUG. Ahora, si recibe el mensaje de error "Archivo no encontrado" antes del indicador DEBUG, detenga inmediatamente el proceso utilizando el comando Q (salir). Porque significa que el programa DEBUG no pudo encontrar o abrir el archivo BKDBR.BIN y, si continúa con este proceso, se escribirá información basura en DBR y hará que la partición completa sea inaccesible. |
Ahora veamos lo que hicimos en la codificación de las Instrucciones para restaurar el DBR desde el archivo de copia de seguridad que hicimos llamado BKDBR.BIN. Los comandos de DEBUG para restaurar la copia de seguridad son los siguientes:
C:\> DEBUG A:\BKDBR.BIN <Enter>
- W 100 2 0 1 <Enter>
- Q <Enter>
|
Esta Instrucción escribirá 1 sector de información del archivo BKDBR.BIN en la unidad de disquete (a:) en la ubicación de memoria 100 en el primer sector que es el sector 0 de la segunda unidad que es la unidad (C:).
Almacenamiento y carga de los programas
No parece práctico teclear un programa completo cada vez que se necesita, y para evitarlo es posible almacenar un programa en el disco, con la enorme ventaja de que al estar ya ensamblado no será necesario ejecutarlo Vuelva a depurar para ejecutarlo.
Los pasos para guardar un programa que ya está almacenado en memoria son:
- Obtenga la longitud del programa restando la dirección final de la dirección inicial, naturalmente en sistema hexadecimal.
- Asigne un nombre y una extensión al programa.
- Ponga la longitud del programa en el registro CX.
- Ordene Debug para escribir el programa en el disco.
Usando el siguiente programa como ejemplo, tendremos una idea más clara de cómo dar estos pasos. Cuando el programa esté finalmente ensamblado, se vería así:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010 A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-w
Escribiendo 000A bytes
Para obtener la duración de un programa, la "h" se utiliza el comando, ya que nos mostrará la suma y resta de dos números en hexadecimal. Para obtener la longitud del nuestro, le damos como parámetros el valor de la dirección final de nuestro programa (10A), y la dirección inicial del programa (100). El primer resultado que nos muestra el comando es la suma de los parámetros y el segundo es la resta.
La "n" El comando nos permite nombrar el programa. El "rcx" El comando nos permite cambiar el contenido del registro CX al valor que obtuvimos del tamaño del archivo con "h", en este caso 000a, ya que es el resultado de restar la dirección final de la dirección inicial.
Por último, la "w" El comando escribe nuestro programa en el disco, indicando cuántos bytes escribió. Además, para guardar un archivo ya cargado son necesarios dos pasos:
- Proporcione el nombre del archivo que se va a cargar.
- Cárguelo usando el comando "l" (cargar) comando.
Para obtener el resultado correcto de los siguientes pasos, es necesario que el programa anterior ya esté creado.
Dentro de Debug escribimos lo siguiente:
-n test.com
-l
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
La última "u" El comando se utiliza para verificar que el programa se cargó en la memoria. Lo que hace es que desmonta el código y lo muestra desmontado. Los parámetros indican a DEBUG desde dónde y hasta dónde desmontar. DEBUG siempre carga los programas en memoria en la dirección 100H, de lo contrario se indica.
Segmentos
La arquitectura de los procesadores x86 obliga al uso de segmentos de memoria para gestionar la información, el tamaño de estos segmentos es de 64kb.
La razón de ser de estos segmentos es que, considerando que el tamaño máximo de un número que puede manejar el procesador está dado por una palabra de 16 bits o registro, no sería posible acceder a más de 65536 localidades de memoria usando solo uno de estos registros, pero ahora, si la memoria se divide en grupos o segmentos, cada uno de 65536 localidades, y usamos una dirección en un registro exclusivo para encontrar cada segmento, y luego hacemos cada dirección de una ranura específica con dos registros, y nos es posible acceder a una cantidad de 4294967296 bytes de memoria.
Para que el ensamblador pueda manejar los datos, es necesario que cada información o Instrucción se encuentre en el área que le corresponde a sus respectivos segmentos. El ensamblador accede a esta información teniendo en cuenta la localización del segmento, dada por los registros DS, ES, SS y CS y dentro del registro la dirección del dato especificado. Es por esto que cuando creamos un programa usando el Debug en cada línea que ensamblamos, aparece algo como esto:
1CB0:0102 MOV AX,BX
Donde el primer número, 1CB0, corresponde al segmento de memoria que se está utilizando, el segundo se refiere a la dirección dentro de este segmento, y siguen las Instrucciones que se almacenarán desde esa dirección.
El ensamblador ajusta el tamaño de los segmentos tomando como base el número de bytes que necesita cada Instrucción ensamblada, ya que sería un desperdicio de memoria usar los segmentos completos. Por ejemplo, si un programa solo necesita 10kb para almacenar datos, el segmento de datos solo será de 10kb y no los 64kb que puede manejar.
Movimiento de datos
Estoy enumerando algunas instrucciones de lenguaje ensamblador para operaciones de datos aquí para su conocimiento y conveniencia, cuando hagamos programación con la ayuda de interrupciones y otras operaciones de BIOS, necesitaremos sus conceptos básicos.
La introducción detallada y el estudio completo del lenguaje ensamblador están más allá del límite de este libro. Aunque el conocimiento de los conceptos básicos de ensamblaje es necesario para continuar con los capítulos de programación más importantes, si le resulta difícil comprender todas las Instrucciones, no debe preocuparse, pero se recomienda que adquiera la idea básica de las Instrucciones.
En cualquier programa es necesario mover los datos en la memoria y en los registros de la CPU y hay varias formas de hacerlo. puede copiar datos en la memoria a algún registro, de registro a registro, de registro a pila, de pila a registro, para transmitir datos a dispositivos externos y viceversa.
Este movimiento de datos está sujeto a reglas y restricciones. Los siguientes son algunos de ellos:
- No es posible mover datos de una ubicación de memoria a otra directamente. Es necesario mover primero los datos de la ubicación de origen a un registro y luego del registro a la localidad de destino.
- No es posible mover una constante directamente a un registro de segmento; primero debe moverse a un registro en la CPU.
- Es posible mover bloques de datos por medio de las Instrucciones MOVS, que copian una cadena de bytes o palabras. MOCSB que copia n bytes de una ubicación a otra y MOVSW copia n palabras de una ubicación a otra. Las dos últimas Instrucciones toman los valores de las direcciones definidas por DS:SI como un grupo de datos para mover y ES:DI como la nueva localización de los datos.
Para mover datos también existen estructuras llamadas baterías, donde los datos se introducen con la Instrucción push y se extraen con la Instrucción pop. En una pila los primeros datos que se introducen son los últimos que podemos tomar, esto es, si en nuestro programa usamos estas Instrucciones:
PUSH AX
PUSH BX
PUSH CX
Para devolver los valores correctos a cada registro al momento de sacarlos de la pila es necesario hacerlo en el siguiente orden:
POP CX
POP BX
POP AX
Para la comunicación con dispositivos externos se utiliza el comando out para enviar información a un puerto y el comando in para leer la información recibida de un puerto.
La sintaxis del comando OUT es:
OUT DX,AX
Donde DX contiene el valor del puerto que se utilizará para la comunicación y AX contiene la información que se enviará.
La sintaxis del comando IN es:
IN AX,DX
Donde AX es el registro donde se guardará la información entrante y DX contiene la dirección del puerto por donde llegará la información.
Instrucción MOV
Se utiliza para la transferencia de datos entre celdas de memoria, registros y el acumulador. La sintaxis es la siguiente:
Destino MOV, Origen
Los diferentes movimientos de datos permitidos por esta Instrucción se muestran en el cuadro que figura a continuación:
S. No. |
Destination |
Source |
1. |
memory |
accumulator |
2. |
accumulator |
memory |
3. |
segment register |
memory/register |
4 |
memory/register |
segment register |
5. |
Register |
register |
6. |
Register |
memory |
7. |
memory |
register |
8. |
Register |
immediate data |
9. |
memory |
immediate data |
Veamos un ejemplo:
MOV AX,0006
MOV BX,AX
MOV AX,4C00
INT 21
Este programa mueve el valor de 0006H al registro AX, luego mueve el contenido de AX (0006h) al registro BX, y por último mueve el valor 4C00h al registro AX para finalizar la ejecución con la opción 4C de la interrupción 21h . Tomaremos una breve introducción de la interrupción 13H y la interrupción 21H más tarde.
Interrupciones
Una interrupción es una función de hardware que hace que la CPU suspenda la ejecución, guarde su estado y se transfiera a una ubicación específica. La ubicación de transferencia especifica la dirección de un programa que está destinado a realizar una acción en respuesta a la interrupción. El programa que se ejecuta como resultado de la interrupción se denomina programa de manejo de interrupciones.
Por ejemplo: si DOS quiere enviar alguna información al BIOS o BIOS quiere enviar alguna información al sistema informático, DOS o BIOS generan interrupciones. Cada vez que se genera una interrupción, la computadora suspende lo que esté haciendo y primero se encarga de la operación que generó la interrupción.
Cada dispositivo capaz de generar interrupciones recibe un número de interrupción único para identificar qué dispositivo está generando estas interrupciones. Discutiremos todas las funciones y subfunciones de la interrupción 13H, las extensiones de la interrupción 13H y la interrupción 21H en este libro.
Básicamente, las interrupciones pueden ser de los siguientes tres tipos:
- Interrupciones internas de hardware
- Interrupciones de hardware externo
- Interrupciones de software
Interrupciones de hardware interno
Las interrupciones internas son generadas por ciertos eventos que surgen durante la ejecución de un programa. Este tipo de interrupciones son gestionadas en su totalidad por el hardware y no es posible modificarlas.
Un claro ejemplo de este tipo de interrupciones es la que actualiza el contador del reloj interno de la computadora, el hardware hace la llamada a esta interrupción varias veces durante un segundo para mantener la hora actualizada.
Aunque no podemos gestionar directamente esta interrupción, ya que no podemos controlar el tiempo de actualización mediante software, es posible utilizar sus efectos en el ordenador en nuestro beneficio.
Por ejemplo: para crear un reloj virtual actualizado continuamente solo tenemos que escribir un programa que lea el valor real del contador y traducirlo a un formato comprensible para el usuario.
Interrupciones de hardware externo
Las interrupciones externas son generadas por dispositivos periféricos, como teclados, impresoras, tarjetas de comunicación, etc. También son generadas por coprocesadores. No es posible desactivar las interrupciones externas.
Estas interrupciones no se envían directamente a la CPU sino que se envían a un circuito integrado cuya función es manejar exclusivamente este tipo de interrupciones
Interrupciones de software
Las interrupciones del software pueden ser activadas directamente por el ensamblador invocando el número de la interrupción deseada con la Instrucción INT.
El uso de interrupciones nos ayuda en la creación de programas y al usarlas nuestros programas se acortan. Son más fáciles de entender y suelen tener un mejor rendimiento sobre todo debido a su menor tamaño. Este tipo de interrupciones se pueden separar en dos categorías: las interrupciones del DOS del sistema operativo y las interrupciones del BIOS.
La diferencia entre los dos es que las interrupciones del sistema operativo son más fáciles de usar pero también son más lentas ya que estas interrupciones hacen uso de la BIOS para lograr su objetivo, por otro lado las interrupciones del BIOS son mucho más rápidas pero tienen la desventaja que al ser parte del hardware, son muy específicos y pueden variar dependiendo incluso de la marca fabricante del circuito.
La elección del tipo de interrupción a utilizar dependerá únicamente de las características que le quieras dar a tu programa.
Dado que utilizaremos interrupciones para la programación de recuperación de datos con la ayuda del lenguaje C a través del manejo de interrupciones con C, solo discutiremos Interrupción 13H, Interrupción 13H Extensiones e Interrupción Rutinas de 21H especialmente.
No es tan importante discutir todas las demás interrupciones y sus funciones porque en lenguaje C, funciones más fáciles están disponibles para realizar la mayoría de esas tareas. Sin embargo, el conocimiento de Interrupción 13H y sus Extensiones es imprescindible para la programación de recuperación de datos. |
Tomemos una breve introducción de la Interrupción 20H y la Interrupción 21H. El valor escrito entre paréntesis (como 0x20) indica cómo usar
INT 20H ( 0x20) --> Terminate process
Call with: CS = segment address of program segment prefix
Returns: Nothing
Comentarios:
Termina el proceso actual. Este es uno de varios métodos que un programa puede usar para realizar una salida final. También puede usar funciones (00H o 31H o 4CH) de INT 21H o simplemente INT 27H para realizar una salida final donde generalmente se prefieren las funciones 31H y 4CH de INT 21H porque permiten pasar un código de retorno al proceso principal.
Se recomienda que si ha utilizado Bloques de control de archivos (FCB) para escribir cualquier archivo, primero debe cerrar el archivo; de lo contrario, puede perder los datos porque en la acción de salida final toda la memoria que fue tomada por el proceso se libera, se vacían los búferes de archivos y se cierran los identificadores abiertos para archivos o dispositivos propiedad del proceso.
Por lo tanto, si tiene identificadores abiertos para el archivo, puede perder los datos.
INT 21H (0x21)
Function 00H (0x00) --> Terminate process
Call with: AH = 00H
CS = segment address of program segment prefix
Returns: Nothing
Comentarios:
Esta interrupción termina el proceso actual. Este es uno de varios métodos que un programa puede usar para realizar una salida final. Para más información ver INT 20H
INT 21H (0x21)
Function 01H (0x01) --> Character input with echo
Call with: AH = 01H
Returns: AL = 8-bit input data
Comentarios:
Esta interrupción lee un carácter del dispositivo de entrada estándar, como el teclado, y lo repite en el dispositivo de salida estándar. Si no hay ningún personaje listo, espera hasta que haya uno disponible.
INT 21H (0x21)
Function 02H (0x02) --> Character output
Call with: AH = 02H
DL = 8-bit data for output
Returns: Nothing
Comentarios:
Envía un carácter al dispositivo de salida estándar. La salida se puede redirigir. Si se redirige la salida, no hay forma de detectar el disco lleno.
Las cadenas también se pueden enviar cadenas a la pantalla realizando una escritura (INT 21H, Función 40H) usando el identificador predefinido para la salida estándar (0001H), si la salida no se ha redirigido o si un identificador obtuvo el dispositivo lógico CON .
INT 21H (0x21)
Function 03H (0x03) --> Auxiliary input
Call with: AH = 03H
Returns: AL = 8-bit input data
Comentarios:
Lee un carácter del dispositivo auxiliar estándar. El valor predeterminado es el primer puerto serie (COM1).
Si el dispositivo auxiliar envía datos más rápido de lo que su programa puede procesar, es posible que se pierdan caracteres. No hay forma de que un programa de usuario lea el estado del dispositivo auxiliar o detecte errores de E/S, como caracteres perdidos, a través de esta llamada de función.
INT 21H (0x21)
Function 04H (0x04) --> Auxiliary output
Call with: AH = 04H
DL = 8-bit data for output
Returns: Nothing
Comentarios:
Esta función de INT 21H envía un carácter al dispositivo auxiliar estándar. El valor predeterminado es el primer puerto serie (COM1). Las cadenas también se pueden enviar al dispositivo auxiliar realizando una escritura (INT 21H Función 40H) utilizando el identificador predefinido para el dispositivo auxiliar estándar (00034) o utilizando un identificador obtenido al abrir el dispositivo lógico AUX.
INT 21H (0x21)
Function 05H (0x05) --> Printer output
Call with: AH = 05H
DL = 8-bit data for output
Returns: Nothing
Comentarios:
Esta función envía un carácter al dispositivo de lista estándar. El dispositivo predeterminado es la impresora en el primer puerto paralelo (LPT1). Las cadenas también se pueden enviar a la impresora realizando una escritura (INT 21H Función 40H) utilizando el identificador predefinido para el dispositivo de impresora estándar (0004H) o utilizando un identificador obtenido al abrir el dispositivo lógico PRN o LPT1.
INT 21H (0x21)
Function 06H (0x06) --> Direct console I/O
Call with: AH = 06H
DL = function requested such that,
If output request, 00H-FEH
If input request, 0FFH
Returns: Nothing, If called with DL = 00H-0FEH
If called with DL = FFH and a character is ready
Zero flag = clear
AL = 8-bit input data
If called with DL = FFH and no character is ready
Zero flag = set
Comentarios:
Lee un carácter del dispositivo de entrada estándar o escribe un carácter en el dispositivo de salida estándar. La E/S se puede redirigir, pero si se ha redirigido, no hay forma de detectar EOF o disco lleno. Esta función de INT 21H es utilizada por programas que necesitan leer y escribir todos los caracteres posibles y códigos de control sin ninguna interferencia del sistema operativo.
INT 21H (0x21)
Function 07H (0x07) --> Unfiltered character input
without Echo
Call with: AH = 07H
Returns: AL = 8-bit input data
Comentarios:
Esta función lee un carácter del dispositivo de entrada estándar sin repetirlo en el dispositivo de salida estándar.
INT 21H (0x21)
Function 08H (0x08) --> Character input without
echo
Call with: AH = 08H
Returns: AL = 8-bit input data
Comentarios:
Esta función lee un carácter del dispositivo de entrada estándar sin repetirlo en el dispositivo de salida estándar.
INT 21H (0x21)
Function 09H (0x09) --> Display string
Call with: AH = 09H
DS:DX = segment: offset of string
Returns: Nothing
Comentarios:
Envía una cadena de caracteres al dispositivo de salida estándar. La salida puede ser redirigida. Si la salida se ha redirigido, no hay forma de detectar el disco lleno. La cadena también se puede enviar a la pantalla realizando una escritura (INT 21H Función 40H) usando el identificador predefinido para la salida estándar (0001H), si no se ha redirigido, o un identificador obtenido al abrir el dispositivo lógico CON.
INT 21H (0x21)
Function 0AH (0x0A or 10) --> Buffered keyboard
input
Call with: AH = 0AH
DS:DX = segment: offset of buffer
Returns: Data placed in buffer, Returns Nothing
Comentarios:
Lee una cadena de bytes desde el dispositivo de entrada estándar, hasta e incluyendo un retorno de carro ASCII (0DH), y los coloca en un búfer designado por el usuario. Los caracteres se repiten en el dispositivo de salida estándar. El búfer utilizado por la función tiene el siguiente formato:
Byte |
Contenido |
0 |
Número máximo de caracteres para leer, establecido por programa |
1 |
Número de caracteres realmente leídos (sin incluir el retorno de carro), establecido por MS-DOS |
2+ |
Cadena leída desde el teclado o entrada estándar, terminada por un retorno de carro (0DH) |
INT 21H (0x21)
Function 0BH (0x0B or 11) --> Check input status
Call with: AH = 0BH
Returns: AL = 00H (if no character is available)
FFH (if at least one character is available)
Comentarios:
Comprueba si un carácter está disponible desde el dispositivo de entrada estándar, como el teclado. Esta función es equivalente a IOCTL INT 21H Función 44H Subfunción 06H.
INT 21H (0x21)
Function 0CH (0x0C or 12) --> Flush input buffer
and then Input
Call with: AH = 0CH
AL = number of input to be invoked after resetting
buffer (must be 01H, 06H, 07H, 08H or 0AH)
If AL = 0AH
DS: DX = segment: offset of input buffer
Returns: If called with AL = 01H, 06H, 07H, or 08H,
AL = 8-bit input data
If called with AL= 0AH,
Nothing (data placed in buffer)
Comentarios:
Borra el búfer de entrada estándar y luego invoca una de las funciones de entrada de caracteres. La entrada se puede redirigir. Un número de función en AL excepto 01H, 06H, 07H, 08H o 0AH vacía el búfer de entrada y devuelve el control al programa de llamada.
INT 21H (0x21)
Function 0DH (0x0D or 13) -> Disk reset
Call with: AH = 0DH
Returns:Nothing
Comentarios:
Esta función vacía todos los búferes de archivos. La función no actualiza el directorio del disco para ningún archivo que aún esté abierto.
INT 21H (0x21)
Function 0EH (0x0E or 14) -> Select disk
Call with: AH = 0EH
DL = drive code (0 = A, 1= B, etc.)
Returns: AL = number of logical drives in system
Comentarios:
Selecciona la unidad especificada para que sea la unidad de disco actual o predeterminada y devuelve el número total de unidades lógicas en el sistema.
Las aplicaciones deben limitarse a las letras de unidad A-Z (0 = A, 1 = B, etc.). Unidades lógicas significa el número total de dispositivos de bloque, como disquetes y unidades de disco duro, etc. Generalmente, una única unidad de disco duro física se divide en dos o más unidades lógicas.
INT 21H (0x21)
Function 0FH (0x0F or 15) -> Open file
Call with: AH = 0FH
S: DX = segment: offset of file control block
Returns: If function successful and file found
AL = 00H
And FCB filled in by MS-DOS is as follows:
Drive field (offset 00H) =1 for drive A, 2 for drive B, etc. Current block field (offset 0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Data field (offset 14H) = date stamp from directory
Time field (offset 16H) = time stamp from directory
If function unsuccessful and file not found
AL = 0FFH
Comentarios:
Abre un archivo y lo pone a disposición para operaciones posteriores de lectura/escritura. Si el programa va a utilizar un tamaño de registro distinto de 128 bytes, debe establecer el campo de tamaño de registro en FCB offset 0EH después de que el archivo se haya abierto correctamente y antes de cualquier otra operación de disco.
INT 21H (0x21)
Function 10H (0x10 or 16) -> Close file
Call with: AH = 10H
DS: DX = segment: offset of file control block
Returns: If function successful (directory update successful)
AL = 00H
If function unsuccessful (file not found in directory)
AL = FFH
Comentarios:
Se utiliza para cerrar un archivo. Cierra un archivo, vacía todos los búferes de disco internos de MS-DOS asociados con el archivo en el disco y actualiza el directorio del disco si el archivo se ha modificado o ampliado.
INT 21H (0x21)
Function 11H (0x11 or 17) -> Find first file
Call with: AH = 11H
DS: DX = segment: offset of file control block
Returns: If function successful and matching file found
AL = 00H
And buffer at current disk transfer area (DTA) address filled in as an unopened normal FCB or extended FCB, depending on which type of FCB was input to function.
If function unsuccessful (no matching filename found)
AL = FFH
Comentarios:
Busca en el directorio actual de la unidad designada un nombre de archivo coincidente. Puede utilizar comodines (? y *). Esta función devuelve el primer nombre de archivo coincidente.
INT 21H (0x21)
Function 12H (0x12 or 18) -> Find next file
Call with: AH = 12H
DS: DX = segment: offset of file control block
Returns: If function successful and matching filename found
AL = 00H
And buffer at current disk transfer area (DTA) address set up as an unopened normal FCB or extended FCB, depending on which type of FCB was originally input to INT21H function 11H
If function unsuccessful and matching filenames not found
AL = FFH
Comentarios:
Esta es la compañera de la función anterior. Si la función INT 21H 11H ha tenido éxito, devuelve el siguiente nombre de archivo coincidente, si lo hay. Esta función asume que el FCB utilizado como entrada se ha inicializado correctamente mediante una llamada anterior a INT 21H Función 11H y posibles llamadas posteriores a INT 21H Función 12H y que el nombre de archivo o la extensión que se busca contiene al menos un carácter comodín.
INT 21H (0x21)
Function 13H (0x13 or 19) -> Delete file
Call with: AH = 13H
DS: DX = segment: offset of file control block
Returns: If function is successful and file or files deleted
AL = 00H
If function is unsuccessful and no matching files were found or at least one matching file was read-only,
AL = FFH
Comentarios:
Elimina todos los archivos coincidentes del directorio actual en la unidad de disco predeterminada o especificada. También puede utilizar comodines (? y *).
INT 21H (0x21)
Function 14H (0x14 or 20) -> Sequential read
Call with: AH = 14H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
Comentarios:
Esta función lee el siguiente bloque secuencial de datos de un archivo y luego incrementa el puntero del archivo de manera adecuada. El número de bytes de datos que se leerán se especifica en el campo de tamaño de registro (compensación 0EH) del bloque de control de archivos (FCB).
El registro se lee en la memoria en la dirección del área de transferencia de disco (DTA) actual, especificada por la llamada más reciente a INT 21H Función 1AH. Si el tamaño del registro y la ubicación del búfer son tales que se produciría un desbordamiento de segmento o un retorno, la función falla con un código de retorno de 02H.
INT 21H (0x21)
Function 15H (0x15 or 21) --> Sequential write
Call with: AH = 15H
DS: DX = segment: offset of previously opened file control block
Returns: AL = 00H, if write successful
01H, if disk is file
02H, if segment wrap
Comentarios:
Esta función escribe el siguiente bloque secuencial de datos en un archivo, luego incrementa el puntero del archivo de manera apropiada. El número de bytes de datos que se escribirán se especifica mediante el campo de tamaño de registro (desplazamiento 0EH) del bloque de control de archivos (FCB).
INT 21H (0x21)
Function 16H (0x16 or 22) --> Create file
Call with: AH = 16H
DS: DX = segment: offset of unopened file control block
Returns: If function is successful and file was created or truncated
AL = 00H
And FCB filled in by MS-DOS as follows:
Drive field (offset 00H) = 1 for drive A, 2 for drive B, etc.
Current block field (offset0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Date field (offset 14H) = date stamp from directory
Time field (offset 16H = time stamp from directory
If function unsuccessful (directory full)
AL = FFH
Comentarios:
Esta función crea una nueva entrada de directorio en el directorio actual o trunca cualquier archivo existente con el mismo nombre a cero. También abre el archivo para operaciones posteriores de lectura/escritura. Esta función debe utilizarse con precaución porque un archivo existente con el nombre especificado se trunca a cero y todos los datos de ese archivo se pierden irremediablemente.
INT 21H (0x21)
Function 17H (0x17 or 23) --> Rename file
Call with: AH = 17H
DS: DX = segment: offset of special file control block
Returns: If function is successful and one or more files renamed
AL = 00H
If function is unsuccessful and no matching files, or new filename matched an existing file
AL = FFH
Comentarios:
Esta función cambia el nombre de todos los archivos coincidentes en el directorio actual del disco en la unidad especificada.
También puede usar comodines con esto. El bloque de control de archivo especial tiene un código de unidad, un nombre de archivo y una extensión en la posición habitual (bytes 0 a 0BH) y un segundo nombre de archivo que comienza 6 bytes después del primero (compensación 11H).
INT 21H
Function 18H (0x18 or 24) --> Reserved
INT 21H (0x21)
Function 19H (0x19 or 25) --> Get current disk
Call with: AH = 19H
Returns: AL = drive code (0 for A drive, 1 for B drive etc.)
Comentarios:
Esta función devuelve el código de la unidad de disco actual o predeterminada.
INT 21H (0x21)
Function 1AH (0x1A or 26) --> Set DTA address
Call with: AH = 1AH
DS: DX = segment: offset of disk transfer area.
Returns: Nothing
Comentarios:
Esta función especifica la dirección del área de transferencia de disco (DTA) que se usará para llamadas de funciones posteriores relacionadas con FCB.
INT 21H (0x21)
Function 1BH (0x1B or 27) --> Get default drive
data
Call with: AH = 1BH
Returns: If function successful
AL = sectors per cluster
DS: DX = segment offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default drive
If function unsuccessful (invalid drive or critical error)
AL = FFH
Comentarios:
Esta función obtiene información seleccionada sobre la unidad de disco predeterminada y un puntero al byte de identificación de medios de su tabla de asignación de archivos.
El byte de ID de medios tiene los siguientes significados:
ID del descriptor de medios |
Medio |
0F0H |
3.5-inch Floppy Disk, double-sided, 18 sectors (or other) |
0F8H |
fixed disk |
0F9H |
5.25-inch Floppy Disk, double-sided, 15 sectors |
0F9H |
3.5-inch Floppy Disk, double-sided, 9 sectors |
0FCH |
5.25-inch Floppy Disk, single-sided, 9 sectors |
0FDH |
5.25-inch Floppy Disk, double-sided, 9 sectors |
0FDH |
8-inch Floppy Disk, single sided, single density |
0FEH |
5.25-inch Floppy Disk, single-sided, 8 sectors |
0FEH |
8-inch Floppy Disk, Single Sided, Single Density |
0FEH |
8-inch Floppy Disk, Double Sided, Double Density |
0FFH |
5.25-inch Floppy Disk, double-sided, 8 sectors |
INT 21H (0x21)
Function 1CH (0x1C or 28) --> Get drive data
Call with: AH = 1CH
DL = Drive Code
Returns: If function is successful
AL = sectors per cluster
DS: BX = segment: offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default or specified drive
If function is unsuccessful and invalid drive or critical error
AL = FFH
Comentarios:
Esta función obtiene información de asignación sobre la unidad de disco especificada y un puntero al byte de identificación de medios de su tabla de asignación de archivos. Consulte la tabla de bytes de identificación del descriptor de medios, proporcionada en INT 21H, función 1BH, para obtener información sobre la identificación de medios.
INT 21H (0x21)
Function 1DH (0x1D or 29) --> Reserved
INT 21H (0x21)
Function 1EH (0x1E or 30) --> Reserved
INT 21H (0x21)
Function 1FH (0x1F or 31) --> Reserved
INT 21H (0x21)
Function 20H (0x20 or 32) --> Reserved
INT 21H (0x21)
Function 21H (0x21 or 33) --> Random read
Call with: AH = 21H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap, read canceled
03H if partial record read at end of
file
Comentarios:
Esta función lee un registro seleccionado de un archivo en la memoria. El registro se lee en la memoria en la dirección del área de transferencia del disco actual, especificada por la llamada más reciente a INT 21H Función 1AH.
INT 21H (0x21)
Function 22H (0x22 or 34) --> Random write
Call with: AH = 22H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if write successful
01H if disk full
02H if segment wrap, write canceled
Comentarios:
Esta función escribe los datos de la memoria en un registro seleccionado en un archivo.
INT 21H (0x21)
Function 23H (0x23 or 35) --> Get file size
Call with: AH = 23H
DS: DX = segment: offset of unopened file
control block
Returns: If function is successful and matching filename found
AL = 00H
And FCB relative-record field (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record
If function is unsuccessful and no matching file found
AL = FFH
Comentarios:
Esta función busca un archivo coincidente en el directorio actual; si se encuentra uno, actualiza el FCB con el tamaño del archivo en términos de número de registros. No hay un tamaño de registro predeterminado para esta función, por lo tanto, se debe colocar un valor apropiado en el campo de tamaño de registro FCB (compensación 0EH) antes de llamar a esta función.
INT 21H (0x21)
Function 24H (0x24 or 36) --> Set relative record
number
Call with: AH = 24H
DS: DX = segment: offset of previously opened
file control block
Returns: AL is destroyed (other register not affected)
FCB relative-record field (offset 21H) updated
Comentarios:
Esta función configura el campo de número de registro relativo de un bloque de control de archivo (FCB) para que corresponda a la posición actual del archivo tal como está registrado en el FCB abierto.
INT 21H (0x21)
Function 25H (0x25 or 37) --> Set interrupt vector
Call with: AH = 25H
AL = interrupt number
DS: DX = segment: offset of interrupt handling
routine
Returns: Nothing
Comentarios:
Esta función inicializa un vector de interrupción de la CPU para apuntar a una rutina de manejo de interrupciones. Se debe usar con preferencia a la edición directa de la tabla de vectores de interrupción por parte de aplicaciones de buen comportamiento.
INT 21H (0x21)
Function 26H (0x26 or 38) --> Create new Program
Segment Prefix (PSP)
Call with: AH = 26H
DX = segment: of new program segment
prefix (PSP)
Returns: Nothing
Comentarios:
Esta función copia el prefijo de segmento de programa (PSP) del programa que se está ejecutando actualmente en una dirección de segmento específica en la memoria libre, luego actualiza el nuevo PSP para que pueda ser utilizado por otro programa.
INT 21H (0x21)
Function 27H (0x27 or 39) --> Random block read
Call with: AH = 27H
CX = number of records to read
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records read
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
CX = actual number of records read
Comentarios:
Esta función lee uno o más registros secuenciales de un archivo en la memoria, comenzando en una ubicación de archivo designada. Si el tamaño y la ubicación del búfer son tales que se produciría un desbordamiento o una vuelta de segmento, la función falla con un código de retorno de 02H y si se lee un registro parcial al final del archivo, el resto del registro se rellena con ceros.
INT 21H (0x21)
Function 28H (0x28 or 40) --> Random block write
Call with: AH = 28H
CX = number of records to write
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records written
01H if disk full
02H if segment wrap
CX = actual number of records written
Comentarios:
Esta función escribe uno o más registros secuenciales de la memoria a un archivo, comenzando en una ubicación de archivo designada. Si el tamaño y la ubicación del búfer son tales que se produciría un desbordamiento de segmento o un retorno, la función falla con un código de retorno 02H.
INT 21H (0x21)
Function 29H (0x29 or 41) --> Parse filename
Call with: AH = 29H
AL = flags to control parsing
Bit 0 = 1, if leading separators will be
scanned off (ignored).
= 0, if leading separators will not be
scanned off
Bit 1 = 1, if drive ID byte in FCB will be
modified only if a drive was
specified in the string being parsed.
= 0, if the drive ID byte in FCB will be
modified regardless, if no drive
specifier is present in the parsed string, FCB drive code field is set to 0 (default)
Bit 2 = 1, if filename field in FCB will be
modified only if a filename is
specified in the string being parsed.
= 0, if filename field in FCB will be modified regardless, if no filename is presenting the parsed string, FCB filename is set to ASCIIZ blanks.
Bit 3 = 1, if extension field in FCB will be
modified, only if an Extension is
specified in the string being parsed.
= 0, if extension field in FCB will be
modified regardless, if no extension
is present in the parsed string, FCB
extension is set to ASCIIZ blanks
DS: SI = segment: offset of string
ES: DI = segment: offset of file control block
Returns: AL = 00H, if no wildcard characters
Encountered 01H, if parsed string
contained wildcard characters FFH,
if drive specifier invalid
DS: SI = segment: offset of first character
after parsed filename
ES: DI = segment: offset of formatted
unopened file control block
Comentarios:
Esta función analiza una cadena de texto en varios campos de un bloque de control de archivos (FCB).
Esta función considera los caracteres (: . ; , = + espacio de tabulación ) como caracteres separadores y considera todos los caracteres de control y los caracteres (: . ; , = + espacio de tabulación < > | / “ [ ]) como caracteres de terminación .
INT 21H (0x21)
Function 2AH (0x2A or 42) --> Get day and date
Call with: AH = 2AH
Returns: CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
AL = day of the week (0 = Sunday,
1= Monday, etc.)
Comentarios:
Esta función obtiene el día del mes, día de la semana, mes y año del sistema.
INT 21H (0x21)
Function 2BH (0x2B or 43) --> Set date
Call with: AH = 2BH
CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
Returns: AL = 00H if date set successfully
FFH if date not valid (ignored)
Comentarios:
Esta función inicializa el controlador del reloj del sistema en una fecha específica, pero la hora del sistema permanece sin cambios.
INT 21H (0x21)
Function 2CH (0x2C or 44) --> Get time
Call with: AH = 2CH
Returns: CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Comentarios:
Se utiliza para obtener la hora del día del controlador del reloj en tiempo real del sistema, convertida a horas, minutos, segundos y centésimas de segundo.
INT 21H (0x21)
Function 2DH (0x2D or 45) --> Set time
Call with: AH = 2DH
CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Returns: AL = 00H, if time set successfully
FFH, if time not valid (ignored)
Comentarios:
Esta función inicializa el reloj de tiempo real del sistema a una hora, minuto, segundo y centésima de segundo especificados. La fecha del sistema no se ve afectada.
INT 21H (0x21)
Function 2EH (0x2E or 46) --> Set verify flag
Call with: AH = 2EH
AL = 00H, if turning off verify flag
01H, if turning on verify flag
DL = 00H
Returns: Nothing
Comentarios:
Esta función desactiva o activa el indicador del sistema operativo para la verificación automática de lectura y escritura de datos. La configuración predeterminada del indicador de verificación está desactivada porque la verificación de lectura tras escritura ralentiza las operaciones del disco.
INT 21H (0x21)
Function 2FH (0x2F or 47) --> Get DTA address
Call with: AH = 2FH
Returns:ES: BX = segment: offset of disk transfer area
Comentarios:
Esta función obtiene la dirección actual del área de transferencia del disco (DTA) para operaciones de lectura/escritura de archivos FCB.
INT 21H (0x21)
Function 30H (0x30 or 48) --> Get MS-DOS
version number
Call with: AH = 30H
AL = 00H
Returns: AL = major version number (MS-DOS 3.10=3, etc.)
AH = minor version number (MS-DOS 3.10= 0AH, etc.)
BH = Original Equipment Manufacturer’s
(OEM’s) serial number (OEM-dependent-usually 00H for IBM’s
PC-DOS, 0FFH or other values for MS-DOS)
BL: CX = 24-bit user serial number (optional, OEM-dependent)
Comentarios:
Devuelve el número de versión del sistema operativo host MS-DOS.
INT 21H (0x21)
Function 31H (0x31 or 49) --> Terminate and Stay
Resident (TSR)
Call with: AH = 31H
AL = return code
DX = amount of memory in paragraphs, to reserve
Returns Nothing
Comentarios:
Esta función finaliza la ejecución del programa que se está ejecutando actualmente al pasar un código de retorno al proceso principal, pero reserva parte o la totalidad de la memoria del programa para que se superponga con el próximo programa transitorio que se cargue. Esta función debe usarse con preferencia a INT 27H porque admite CS para contener el segmento del prefijo de segmento de programa.
INT 21H (0x21)
Function 32H (0x32 or 50) --> Reserved
INT 21H (0x21)
Function 33H (0x33 or 51) --> Get or set break flag, get boot Drive
Call with: If getting break flag
AH = 33H
AL = 00H
If setting break flag
AH = 33H
AL = 01H
DL = 00H if turning break flag OFF
01H if turning break flag ON
If getting boot drive
AH = 33H
AL = 05H
Returns: If called with AL = 00H or 01H
DL = 00H break flag is OFF
01H break flag is ON
If called with AL = 05H
DL = boot drive (1 = A, 2 = B, etc.)
Comentarios:
Esta función obtiene o cambia el estado del indicador de interrupción del sistema operativo, lo que influye en la comprobación de Ctrl-C durante las llamadas de función.
INT 21H (0x21)
Function 34H (0x34 or 52) --> Reserved
INT 21H (0x21)
Function 35H (0x35 or 53) --> Get interrupt vector
Call with: AH = 35H
AL = interrupt number
Returns: ES: BX = segment: offset of interrupt handler
Comentarios:
Esta función obtiene la dirección de la rutina de manejo de interrupciones actual para la interrupción de máquina especificada.
INT 21H (0x21)
Function 36H (0x36 or 54) --> Get drive allocation
Information
Call with: AH = 36H
DL = drive code (0 default, 1 = A, etc.)
Returns: If function successful
AX = sector per cluster
BX = number of available cluster
CX = bytes per sector
DX = cluster per drive
If function unsuccessful (drive invalid)
AX = FFFFH
Comentarios:
Esta función obtiene información seleccionada sobre una unidad de disco.
Esta función es muy importante en la recuperación de datos y la programación de solución de problemas de disco a partir de la cual se puede calcular la capacidad de la unidad, el espacio libre restante y muchas otras cosas importantes.
INT 21H (0x21)
Function 37H (0x37 or 55) --> Reserved
INT 21H (0x21)
Function 38H (0x38 or 56) --> Get or set country
information
Call with: If getting country information
AH = 38H
AL = 0, to get current country information
1-FEH, to get information for
countries with code <255
FFH, to get information for countries
with code >=255
BX = country code, if AL = FFH
DS:DX = segment: offset of buffer for returned information
If setting current country code
AH = 38H
AL = 1-FEH, country code for countries with code <255
FFH, for countries with code >=255
BX = country code, if AL = 0FFH
DX = FFFFH
Returns:
If function is successful
Carry flag = clear
And, if getting internationalization information
BX = country code
DS: DX = segment: offset of buffer holding internationalization Information.
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función obtiene información internacional para el país actual o especificado o establece el código de país actual.
INT 21H (0x21)
Function 39H (0x39 or 57) --> Create directory
Call with: AH = 39H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función crea un directorio utilizando la unidad y la ruta especificadas.
ASCIIZ se conoce como la secuencia de caracteres ASCII terminados en, Nulo o Cero, Byte. |
INT 21H (0x21)
Function 3AH (0x3A or 58) --> Delete directory
Call with: AH = 3AH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función elimina un directorio utilizando la unidad y la ruta especificadas. Si algún elemento del nombre de ruta no existe o el directorio no está vacío o se niega el acceso o el directorio especificado también es el directorio actual, la función de eliminar el directorio falla.
INT 21H (0x21)
Function 3BH (0x3B or 59) --> Set current
directory
Call with: AH = 3BH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función establece el directorio actual o predeterminado utilizando la unidad y la ruta especificadas. Si la ruta especificada o cualquier elemento de la ruta no existe, la función falla.
INT 21H (0x21)
Function 3CH (0x3C or 60) --> Create file
Call with: AH = 3CH
CX = file attribute, where attribute
significance bits may be Combined.
Significance of bits is given in the following Table:
Bit(s) |
Importancia (si se establece) |
0 |
Read-only |
1 |
Hidden |
2 |
System |
3 |
Volume label |
4 |
Reserved (0) |
5 |
Archive |
6 – 15 |
Reserved (0) |
DS: DX = segment: offset of ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Si se proporciona un nombre de ruta ASCIIZ, esta función crea un nuevo archivo en el directorio designado o predeterminado en la unidad de disco designada o predeterminada. Si el archivo especificado ya existe, se trunca a la longitud cero. En cualquier caso, el archivo se abre y se devuelve un identificador que puede ser utilizado por el programa para acceder posteriormente al archivo.
Si algún elemento del nombre de ruta no existe o el archivo se está creando en el directorio raíz y el directorio raíz está lleno o se deniega el acceso o un archivo con atributo de solo lectura ya está en el directorio especificado, la función de creación de archivo falla .
INT 21H (0x21)
Function 3DH (0x3D or 61) --> Open file
Call with: AH = 3DH
AL = access mode
El significado de los bits del modo de acceso se da en la siguiente tabla:
Bits |
Significance |
0 – 2 |
Access Mode
000 = read access
001 = write access
010 = read/write access |
3 |
Reserved (0) |
4 – 6 |
Sharing Mode
000 = compatibility mode
001 = deny all
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance flag
0 = child process inherits handle
1 = child does not inherit handle |
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Si se proporciona un nombre de ruta ASCIIZ, esta función abre el archivo especificado en el directorio designado o predeterminado en la unidad de disco designada o predeterminada. Se devuelve un identificador que puede ser utilizado por el programa para el acceso posterior al archivo.
INT 21H (0x21)
Function 3EH (0x3E or 62) --> Close file
Call with: AH = 3EH
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función vacía todos los búferes internos asociados con el archivo en el disco, cierra el archivo y libera el identificador para su reutilización, ya sea abierto o creado con éxito en un identificador determinado. Si se modificó el archivo, la marca de fecha y hora y el tamaño del archivo se actualizan en la entrada de directorio del archivo.
INT 21H (0x21)
Function 3FH (0x3F or 63) --> Read file or device
Call with: AH = 3FH
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función transfiere datos en la posición actual del puntero de archivo desde el archivo al búfer y luego actualiza la posición del puntero de archivo para un identificador de archivo válido dado de una operación previa de apertura o creación, una dirección de búfer y una longitud en bytes .
INT 21H (0x21)
Function 40H (0x40 or 64) --> Write file or device
Call with: AH = 40H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función transfiere datos del búfer al archivo y luego actualiza la posición del puntero del archivo para un identificador de archivo válido dado de una operación previa de apertura o creación, una dirección de búfer y una longitud en bytes. Si se llama a la función con CX = 0, el archivo se trunca o se extiende a la posición actual del puntero del archivo.
INT 21H (0x21)
Function 41H (0x41 or 65) --> Delete file
Call with: AH = 41H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función elimina un archivo del disco y directorio predeterminado o especificado. La función elimina un archivo reemplazando el primer carácter de su nombre de archivo en el directorio raíz con el carácter E5H (0xE5) y haciendo que los grupos del archivo estén disponibles para los nuevos datos en la tabla de asignación de archivos. Hasta entonces, los datos reales almacenados en esos clústeres no se sobrescriben.
INT 21H (0x21)
Function 42H (0x42 or 66) --> Set file pointer
Call with: AH = 42H
AL = method code
00H absolute offset from start of file
01H signed offset from current file
pointer
02H signed offset from end of file
BX = handle
CX = most significant half of offset
DX = least significant half of offset
Returns: if function is successful
Carry flag = clear
DX = most significant half of resulting file
pointer
AX = least significant half of resulting file
pointer
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función establece la ubicación del puntero del archivo en relación con el inicio del archivo, el final del archivo o la posición actual del archivo.
INT 21H (0x21)
Function 43H (0x43 or 67) --> Get or set file
attributes
Call with: AH = 43H
AL = 00H to get attributes
01H to set attributes
CX = file attribute, if AL=01H. Bits can be combined
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
CX = file attribute
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función obtiene o altera los atributos del archivo (solo lectura, oculto, sistema o archivo) o directorio. Para conocer el significado de los bits para diferentes atributos, consulte la tabla de significado de bits anterior.
INT 21H (0x21)
Function 44H (0x44 or 68) --> Input/Output
Control (I/O Ctrl)
Esta función proporciona una ruta directa de comunicación entre un programa de aplicación y un controlador de dispositivo. Permite que un programa obtenga información dependiente del hardware y solicite operaciones que no son compatibles con otras llamadas a funciones de MS-DOS.
Las funciones secundarias de control de entrada y salida se proporcionan en la siguiente tabla:
Sub function |
Operation Name |
00H |
Get Device Information |
01H |
Set Device Information |
02H |
Receive Control Data from Character Device Driver |
03H |
Send Control Data to Character Device Driver |
04H |
Receive Control Data from Block Device Driver |
05H |
Send Control Data to Block Device Driver |
06H |
Check Input Status |
07H |
Check Output Status |
08H |
Check If Block Device Is Removable |
09H |
Check If Block Device Is Remote |
0AH (10) |
Check If Handle Is Remote |
0BH (11) |
Change Sharing Retry Count |
0CH (12)
|
Generic I/O Control for Character Devices
Value |
Description |
CL = 45H |
Set Iteration Count |
CL = 4AH |
Select Code Page |
CL = 4CH |
Start Code Page Preparation |
CL = 4DH |
End Code Page Preparation |
CL = 5FH |
Set Display Information |
CL = 65H |
Get Iteration Count |
CL = 6AH |
Query Selected Code Page |
CL = 6BH |
Query Prepare List |
CL = 7FH |
Get Display Information |
|
0DH (13)
|
Generic I/O Control for Block Devices
Value |
Description |
CL = 40H |
Set Device Parameters |
CL = 41H |
Write Track |
CL = 42H |
Format and Verify Track |
CL = 47H |
Set Access Flag |
CL = 60H |
Get Device Parameters |
CL = 61H |
Read Track |
CL = 62H |
Verify Track |
CL = 67H |
Get Access Flag |
|
0EH (14) |
Get Logical Drive Map |
0FH (15) |
Set Logical Drive Map |
INT 21H (0x21)
Function 44H (0x44 or 68), sub function 00H (0x00)
I/O Ctrl --> get device information
Call with: AH = 44H
AL = 00H
BX = handle
Returns: If function successful
Carry flag = clear
DX = device information word
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria devuelve una palabra de información de dispositivo para el archivo o dispositivo asociado con el identificador especificado.
INT 21H (0x21)
Function 44H (0x44 or 68), sub function 01H (0x01)
I/O Ctrl --> set device information
Call with: AH = 44H
AL = 01H
BX = handle
DX = device information word
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta subfunción de la función 44H de INT 21H establece ciertos indicadores para un identificador asociado con un dispositivo de carácter. Esta subfunción no se puede usar para un identificador asociado con un archivo.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 02H (0x02)
I/O Ctrl --> read control data character device
driver
Call with: AH = 44H
AL = 02H
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function is successful
Carry flag = clear
AX = bytes read
And buffer contains control data from driver
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Lee datos de control de un controlador de dispositivo de caracteres. La longitud y el contenido de los datos se especifican para cada controlador de dispositivo y no siguen ningún formato estándar. Esta función no necesariamente da como resultado ninguna entrada desde el dispositivo físico.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 03H (0x03)
I/O Ctrl --> write control data character-device
driver
Call with: AH = 44H
AL = 03H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria transfiere datos de control desde una aplicación a un controlador de dispositivo de caracteres. La longitud y el contenido de los datos son específicos de cada controlador de dispositivo y no siguen ningún formato estándar. Esta función no resulta necesariamente si alguna salida al dispositivo físico.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 04H (0x04)
I/O Ctrl --> Read control data block-device driver
Call with: AH = 44H
AL = 04H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = bytes transferred
And buffer contains control data from device driver
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria transfiere datos de control desde un controlador de dispositivo de bloque directamente al búfer de un programa de aplicación. La longitud y el contenido de los datos son específicos de cada controlador de dispositivo y no siguen ningún formato estándar. Esta función no necesariamente da como resultado una entrada desde el dispositivo físico.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 05H (0x05)
I/O Ctrl --> write control data block-device driver
Call with: AH = 44H
AL = 05H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria transfiere datos de control desde un programa de aplicación directamente a un controlador de dispositivo de bloque. La longitud y el contenido de los datos de control son específicos de cada controlador de dispositivo y no siguen ningún formato estándar. Esta función no genera necesariamente ninguna salida al dispositivo físico.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 06H (0x06)
I/O Ctrl --> check input status
Call with: AH = 44H
AL = 06H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = 00H, if file pointer at EOF
FFH, if file pointer not at EOF
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Devuelve un código que indica si el dispositivo o los archivos asociados con un identificador están listos para la entrada.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 07H (0x07)
I/O Ctrl --> check output status
Call with: AH = 44H
AL = 07H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = FFH
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Devuelve un código que indica si el dispositivo asociado con un identificador está listo para la salida.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 08H (0x08)
I/O Ctrl --> check if block device is removable
Call with: AH = 44H
AL = 08H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = 00H, if medium is removable
01H, if medium is not removable
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria comprueba si el dispositivo de bloque especificado contiene un medio de almacenamiento extraíble, como un disquete. Si un archivo no se encuentra como se esperaba en una unidad en particular, un programa puede usar esta subfunción para determinar si se debe solicitar al usuario que inserte otro disco.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 09H (0x09)
I/O Ctrl --> check if block device is remote
Call with: AH = 44H
AL = 09H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
DX = device attribute word
bit 12 = 0, if drive is local
= 1, if drive is remote
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria comprueba si el dispositivo de bloque especificado es local (conectado a la computadora que ejecuta el programa) o remoto (redireccionado a un servidor de red).
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0AH (0x0A or 10) I/O Ctrl --> check if handle is remote
Call with: AH = 44H
AL = 0AH
BX = handle
Returns: If function successful
Carry flag = clear
DX = attribute word for file or device
bit 15 = 0 if local
1 if remote
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Comprueba si el identificador especificado se refiere a un archivo o dispositivo local (ubicado en la PC que ejecuta el programa) o remoto (ubicado en un servidor de red).
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0BH (0x0B or 11) I/O Ctrl --> change sharing retry count
Call with: AH = 44H
AL = 0BH
CX = delays per retry (default = 1)
DX = number of retries (default = 3)
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria establece el número de veces que MS-DOS vuelve a intentar una operación de disco después de un error causado por una infracción de uso compartido de archivos antes de devolver un error al proceso de solicitud. Esta función secundaria no está disponible a menos que se cargue el módulo para compartir archivos.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0CH (0x0C or 12) I/O Ctrl generic I/O control for
character devices
Call with: AH = 44H
AL = 0CH
BX = handle
CH =category (major) code:
00H = unknown
01H = COM1, COM2, COM3,OR COM4
03H = CON (keyboard and display)
05H = LPT1, LPT2, OR LPT3
CL = function (minor) code:
45H = Set Iteration Count
4AH = Select Code Page
4CH = Start Code Page Preparation
4DH = End Code Page Preparation
5FH = Set Display Information
65H = Get Iteration Count
6AH = Query Selected Code Page
6BH = Query Prepare List
7FH = Get Display Information
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 65H, 6AH, 6BH or 7FH
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Proporciona un mecanismo de uso general para la comunicación entre programas de aplicación y controladores de dispositivos de caracteres.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0DH (0x0D or 13) I/O Ctrl --> generic I/O control for block
devices
Call with: AH = 44H
AL = 0DH
BL = drive code (0 =default, 1=A, 2=B, etc.)
CH = category (major) code:
08H = disk drive
CL = function (minor) code:
40H = Set Drive Parameters
41H = Write Track
42H = Format and Verify Track
47H = Set Access Flag
60H = Get Device Parameters
61H = Read Track
62H = Verify track
67H = Get Access Flag
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 60H or 61H
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria proporciona un mecanismo de uso general para la comunicación entre programas de aplicación y controladores de dispositivos de bloque. Permite que un programa inspeccione o cambie los parámetros del dispositivo para una unidad lógica y lea, escriba, formatee y verifique las pistas del disco de manera independiente del hardware.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0EH (0x0E or 14) I/O Ctrl -->> get logical drive map
Call with: AH = 44H
AL = 0EH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH logical drive code (1=A,
2=B, etc.) mapped to the block device
If function unsuccessful
Carry flag = set
AX =error code
Comentarios:
Devuelve el código de unidad lógica que se usó más recientemente para acceder a la unidad de bloque especificada.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0FH (0x0F or 15) I/O Ctrl --> set logical drive map
Call with: AH = 44H
AL = 0FH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH, logical drive code (1=A,
2=B, etc.) mapped to the
block device
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria establece el siguiente código de unidad lógica que se utilizará para hacer referencia a un dispositivo de bloque.
INT 21H (0x21)
Function 45H (0x45 or 69) --> Duplicate handle
Call with: AH = 45H
BX = handle to be duplicated
Returns: If function successful
Carry flag = clear
AX = new handle
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función devuelve un nuevo identificador que se refiere al mismo dispositivo o archivo en la misma posición para el identificador dado para un dispositivo o archivo actualmente abierto.
INT 21H (0x21)
Function 46H (0x46 or 70) --> Redirect handle
Call with: AH = 46H
BX = handle for file or device
CX = handle to be redirected
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Si hay dos identificadores dados, esta función hace que el segundo identificador se refiera al mismo dispositivo o archivo en la misma ubicación que el primer identificador. Entonces se dice que el segundo identificador se redirige.
INT 21H (0x21)
Function 47H (0x47 or 71) --> Get current
directory
Call with: AH = 47H
DL = drive code (0 =default, 1=A,
2=B, etc.)
DS: SI = segment: offset of 64-byte buffer
Returns: If function is successful
Carry flag = clear
And buffer is filled in with full pathname from root of current directory.
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función obtiene una cadena ASCIIZ que describe la ruta desde la raíz hasta el directorio actual y el nombre de ese directorio.
INT 21H (0x21)
Function 48H (0x48 or 72) --> Allocate memory
block
Call with: AH = 48H
BX = number of paragraphs of memory
needed
Returns: If function successful
Carry flag = clear
Ax = base segment address of allocated
block
If function unsuccessful
Carry flag = set
AX = error code
BX = size of largest available block
(paragraphs)
Comentarios:
Asigna un bloque de memoria y devuelve un puntero al comienzo del área asignada.
INT 21H (0x21)
Function 49H (0x49 or 73) --> Release memory
block
Call with: AH = 49H
ES = segment of block to be released
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función se utiliza para Liberar un bloque de memoria y dejarlo disponible para que lo utilicen otros programas. La función fallará o puede causar errores de sistema impredecibles si el programa libera un bloque de memoria que no le pertenece o si la dirección de segmento pasada en el registro ES no es una dirección base válida para un bloque de memoria existente.
INT 21H (0x21)
Function 4AH (0x4A or 74) --> Resize memory
block
Call with: AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
BX = maximum block size available
(paragraphs)
Comentarios:
Esta función reduce o amplía dinámicamente un bloque de memoria, según las necesidades de un programa de aplicación.
INT 21H (0x21)
Function 4BH (0x4B or 75) --> Execute program (EXEC)
Call with: AH = 4BH
AL = sub function
00H = Load and Execute Program
03H = Load Overlay
ES: BX = segment: offset of parameter block
DS: DX = segment: offset of ASCIIZ program
pathname
Returns: If function successful
Carry flag = clear
Registers are preserved in the usual fashion.
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función permite que un programa de aplicación ejecute otro programa, recuperando el control cuando finaliza. También se puede usar para cargar superposiciones, aunque este uso es poco común.
INT 21H (0x21)
Function 4CH (0x4C or 76) --> Terminate process
with Return code
Call with: AH = 4CH
AL = return code
Returns: Nothing
Comentarios:
Esta función termina el proceso actual, pasando un código de retorno al proceso padre. Este es uno de varios métodos que un programa puede usar para realizar una salida final.
INT 21H (0x21)
Function 4DH (0x4D or 77) --> Get return code
Call with: AH = 4DH
Returns: AH = exit type
00H, if normal termination by INT 20H, INT 21H
Function 00H, or INT 21H Functions 4CH
01H if termination by user’s entry of Ctrl-C
02H if termination by critical-error handler
03H if termination by INT21H Function 31H or
INT 27H |
AL = return code passed by child process
(0 if child terminated by INT 20H,
INT 21H Function 00H, or INT 27H)
Comentarios:
Esta función es utilizada por un proceso padre, después de la ejecución exitosa de una llamada EXEC (INT 21H Función 4BH), para obtener el código de retorno y el tipo de terminación de un proceso hijo.
INT 21H (0x21)
Function 4EH (0x4E or 78) --> Find first file
Call with: AH = 4EH
CX = search attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful and matching file found
Carry flag = clear
Y los resultados de búsqueda devueltos en el área de transferencia de disco actual de la siguiente manera:
Byte(s) |
Descripción |
00H-14H |
Reserved (0) |
15H |
Attribute of matched file or directory |
16H-17H |
File time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23) |
18H-19H
|
File date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980) |
1AH-1DH |
File size |
1EH-2AH |
ASCIIZ filename and extension |
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función busca en el directorio predeterminado o especificado en la unidad predeterminada o especificada el primer archivo coincidente para una especificación de archivo determinada en forma de cadena ASCIIZ. Para conocer el significado de los bits de los atributos, consulte la tabla de significado de bits dada anteriormente.
INT 21H (0x21)
Function 4FH (0x4F or 79) --> Find next file
Call with: AH = 4FH
Returns: If function is successful and matching file found
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Si hay una llamada exitosa anterior a INT 21H Función 4EH, esta función encuentra el siguiente archivo en el directorio predeterminado o especificado en la unidad predeterminada o especificada que coincide con la especificación del archivo original.
INT 21H (0x21)
Function 50H (0x50 or 80) --> Reserved
INT 21H (0x21)
Function 51H (0x51 or 81) --> Reserved
INT 21H (0x21)
Function 52H (0x52 or 82) --> Reserved
INT 21H (0x21)
Function 53H (0x53 or 83) --> Reserved
INT 21H (0x21)
Function 54H (0x54 or 84) --> Get verify flag
Call with: AH = 54H
Returns: AL = current verify flag value
00H if verify off
01H if verify on
Comentarios:
Esta función obtiene el valor actual del indicador de verificación del sistema (lectura después de escritura).
INT 21H (0x21)
Function 55H (0x55 or 85) --> Reserved
INT 21H (0x21)
Function 56H (0x56 or 86) --> Rename file
Call with: AH = 56H
DS: DX = segment: offset of current ASCIIZ
pathname
ES: DI = segment: offset of new ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función cambia el nombre de un archivo y/o mueve su entrada de directorio a una diferente en el mismo disco. En las versiones 3.0 y posteriores de MS-DOS, esta función también se puede usar para cambiar el nombre de los directorios
Si algún elemento del nombre de la ruta no existe o ya existe un archivo con el nuevo nombre de la ruta o la especificación del nombre de la ruta actual contiene una unidad de disco diferente a la del nuevo nombre de la ruta o el archivo se está moviendo al directorio raíz, y la raíz El directorio está lleno o el usuario no tiene suficientes derechos, la función para cambiar el nombre de los archivos falla.
INT 21H (0x21)
Function 57H (0x57 or 87) --> Get or set file date and time
Call with: If getting date and time
AH = 57H
AL = 00H
BX = handle
If setting date and time
AH = 57H
AL = 01H
BX = handle
CX = time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23)
DX = date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980)
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
CX = time
DX = date
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función obtiene o modifica la marca de fecha y hora en la entrada del directorio raíz del archivo.
INT 21H (0x21)
Function 58H (0x58 or 88) --> Get or set allocation strategy
Call with: If getting strategy code
AH = 58H
AL = 00H
If setting strategy code
AH = 58H
AL = 01H
BX = desired strategy code
00H = first fit
01H = best fit
02H = last fit
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
AX = current strategy code
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Obtiene o cambia el código que indica la estrategia actual de MS-DOS para asignar bloques de memoria. La estrategia de asignación de memoria predeterminada de MS-DOS es First Fit (código 0).
En la asignación de memoria First fit, MS-DOS busca los bloques de memoria disponibles desde la dirección baja hasta la dirección alta, asignando el primero lo suficientemente grande para satisfacer la solicitud de asignación de bloque.
En el caso de la estrategia de asignación de mejor ajuste, MS-DOS busca todos los bloques de memoria disponibles y asigna el bloque más pequeño disponible que satisfará la solicitud, independientemente de su posición.
En la estrategia de asignación de memoria Último ajuste, MS-DOS busca los bloques de memoria disponibles desde direcciones altas a direcciones bajas, asignando la más alta lo suficientemente grande como para satisfacer la solicitud de asignación de bloque.
INT 21H (0x21)
Function 59H (0x59 or 89) --> Get extended error
Information
Call with: AH = 59H
BX = 00H
Returns: AX = extended error code
Table of error codes has been given below:
Error Code |
Error |
01H |
function number invalid |
02H |
file not found |
03H |
path not found |
04H |
too many open files |
05H |
access denied |
06H |
handle invalid |
07H |
memory control blocks destroyed |
08H |
insufficient memory |
09H |
memory block address invalid |
0AH (10) |
environment Invalid |
0BH (11) |
format invalid |
0CH (12) |
access code invalid |
0DH (13) |
data invalid |
0EH (14) |
unknown unit |
0FH (15) |
disk drive invalid |
10H (16) |
attempted to remove current directory |
11H (17) |
not same device |
12H (18) |
no more files |
13H (19) |
disk write-protected |
14H (20) |
unknown unit |
15H (21) |
drive not ready |
16H (22) |
unknown command |
17H (23) |
data error (CRC) |
18H (24) |
bad request structure length |
19H (25) |
seek error |
1AH (26) |
unknown media type |
1BH (27) |
sector not found |
1CH (28) |
printer out of paper |
1DH (29) |
write fault |
1EH (30) |
read fault |
1FH (31) |
general failure |
20H (32) |
sharing violation |
21H (33) |
lock violation |
22H (34) |
disk change invalid |
23H (35) |
FCB unavailable |
24H (36) |
sharing buffer exceeded |
25H-31H |
reserved |
32H (50) |
unsupported network request |
33H (51) |
remote machine not listening |
34H (52) |
duplicate name on network |
35H (53) |
network name not found |
36H (54) |
network busy |
37H (55) |
device no longer exists on network |
38H (56) |
net BIOS command limit exceeded |
39H (57) |
error in network adapter hardware |
3AH (58) |
incorrect response from network |
3BH (59) |
unexpected network error |
3CH (60) |
remote adapter incompatible |
3DH (61) |
print queue full |
3EH (62) |
not enough space for print file |
3FH (63) |
print file canceled |
40H (64) |
network name deleted |
41H (65) |
network access denied |
42H (66) |
incorrect network device type |
43H (67) |
network name not found |
44H (68) |
network name limit exceeded |
45H (69) |
net BIOS session limit exceeded |
46H (70) |
file sharing temporarily paused |
47H (71) |
network request not accepted |
48H (72) |
print or disk redirection paused |
49H-4FH |
reserved |
50H (80) |
file already exists |
51H (81) |
reserved |
52H (82) |
cannot make directory |
53H (83) |
fail on INT 24H (critical error) |
54H (84) |
too many redirections |
55H (85) |
duplicate redirection |
56H (86) |
invalid password |
57H (87) |
invalid parameter |
58H (88) |
network device fault |
59H (89) |
function not supported by network |
5AH (90) |
required system component not installed |
BH = error class
01H |
if out of resource (such as storage or handles) |
02H |
if not error, but temporary situation (such as locked region in file) that can be expected to end |
03H |
if authorization problem |
04H |
if internal error in system software |
05H |
if hardware failure |
06H |
if system software failure not the fault of the active process (such as missing configuration files) |
07H |
if application program error |
08H |
if file or item not found |
09H |
if file or item of invalid type or format |
0AH (10) |
if file or item locked |
0BH (11) |
if wrong disk in drive, bad spot on disk, or storage medium problem |
0CH (12) |
if item already exists |
0DH (13) |
unknown error |
BL = recommend action
01H |
Retry reasonable number of times, then prompt user to select abort or ignore |
02H |
retry reasonable number of times with delay between retries, then prompt user to select abort or ignore |
03H |
get correct information from user (typically caused by incorrect file name or device specification) |
04H |
abort application with cleanup (i.e., terminate the program in as orderly a manner as possible: releasing locks, closing files, etc.) |
05H |
perform immediate exit without cleanup |
06H |
ignore error |
07H |
retry after user intervention to remove cause of error |
CH = error locus
01H unknown
02H block device (disk or disk emulator)
03H network
04H serial device
05H memory
ES: DI = ASCIIZ volume label of disk to
insert, if AX = 0022H (invalid disk change)
Comentarios:
Esta función obtiene información de error detallada después de una llamada de función INT 21H anterior sin éxito, incluida la acción correctiva recomendada.
INT 21H (0x21)
Function 5AH (0x5A or 90) --> Create temporary
file
Call with: AH = 5AH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ path
Returns: If function is successful
Carry flag = clear
AX = handle
DS: DX = segment: offset of complete ASCIIZ
pathname
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función crea un archivo con un nombre único, en el directorio actual o especificado en la unidad de disco predeterminada o especificada, y devuelve un identificador que puede ser utilizado por el programa para el acceso posterior al archivo. El nombre generado para el archivo también se devuelve en un búfer especificado por el programa.
Si algún elemento de la ruta no existe o el archivo se está creando en el directorio raíz y el directorio raíz está lleno, la función falla.
INT 21H (0x21)
Function 5BH (0x5B or 91) --> Create new file
Call with: AH = 5BH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function is successful
Carry flag = clear
AX = handle
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función crea un archivo en el directorio designado o predeterminado en la unidad designada o predeterminada, y devuelve un identificador que el programa puede usar para acceder posteriormente al archivo para un nombre de ruta ASCIIZ dado.
Si ya existe un archivo con el mismo nombre y ruta o cualquier elemento de la ruta especificada no existe o el archivo se está creando en el directorio raíz y el directorio raíz está lleno o el usuario no tiene suficientes derechos de acceso, el la función falla.
INT 21H (0x21)
Function 5CH (0x5C or 92) --> Lock or unlock file region
Call with: AH = 5CH
AL = 00H if locking region
01H if unlocking region
BX = handle
CX = high part of region offset
DX = low part of region offset
SI = high part of region length
DI = low part of region length
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función bloquea o desbloquea la región especificada de un archivo. Esta función no está disponible a menos que se cargue el módulo para compartir archivos (como SHARE.EXE).
INT 21H (0x21)
Function 5DH (0x5D or 93) --> Reserved
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 00H (0x00)
--> Get machine name
Call with: AH = 5EH
AL = 00H
DS: DX = segment: offset of buffer to receive
string
Returns: If function is successful
Carry flag = clear
CH = 00H if name not defined
<> 00H if name defined
CL = netBIOS name number (if CH <> 0)
DX: DX = segment: offset of identifier (if CH <> 0)
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria devuelve la dirección de una cadena ASCIIZ que identifica la computadora local. Esta llamada de función solo está disponible cuando se está ejecutando Microsoft Network.
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 02H (0x02)
--> Set printer setup string
Call with: AH = 5EH
AL = 02H
BX = redirection list index
CX = length of setup string
DS: SI = segment: offset of setup string
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria especifica una cadena que se enviará delante de todos los archivos dirigidos a una impresora de red en particular, lo que permite a los usuarios en diferentes nodos de red especificar modos de operación individualizados en la misma impresora.
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 03H (0x03)
--> Get printer setup string
Call with: AH = 5EH
AL = 03H
BX = redirection list index
ES: DI = segment: offset of buffer to receive
setup string
Returns: If function successful
Carry flag = clear
CX = length of printer setup string
ES: DI = segment: offset of buffer to receive
setup string
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función se utiliza para obtener la cadena de configuración de la impresora para una impresora de red en particular.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 02H (0x02)
--> Get redirection list entry
Call with: AH = 5FH
AL = 02H
BX = redirection list index
DS: SI = segment: offset of 16-byte buffer to
receive local device name
ES: DI = segment: offset of 128-byte buffer to
receive network name
Returns: If function successful
Carry flag = clear
BH = device status flag
Bit 0 = 0 if device valid
= 1 if not valid
BL = device type
03H, if printer
04H, if drive
CX = stored parameter value
DX = destroyed
BP = destroyed
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria permite la inspección de la lista de redirección del sistema, que asocia nombres lógicos locales con archivos, directorios o impresoras de red. Esta llamada de función solo está disponible cuando se está ejecutando Microsoft Networks y se ha cargado el módulo de uso compartido de archivos.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 03H (0x03) --> Redirect device
Call with: AH = 5FH
AL = 03H
BL = device type
03H, if printer
04H, if drive
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name, followed by ASCIIZ password
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Establece la redirección a través de la red asociando un nombre de dispositivo local con un nombre de red. Esta llamada de función solo está disponible cuando se está ejecutando Microsoft Networks y se ha cargado el módulo de uso compartido de archivos (SHARE.EXE).
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 04H (0x04)
--> Cancel device redirection
Call with: AH = 5FH
AL = 04H
DS: SI = segment: offset of ASCIIZ local
device name
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función secundaria cancela una solicitud de redirección anterior eliminando la asociación de un nombre de dispositivo local con un nombre de red. Esta llamada de función solo está disponible cuando se está ejecutando Microsoft Networks y se ha cargado el módulo de uso compartido de archivos, como SHARE.EXE.
INT 21H (0x21)
Function 60H (0x60 or 96) --> Reserved
INT 21H (0x21)
Function 61H (0x61 or 97) --> Reserved
INT 21H (0x21)
Function 62H (0x62 or 98) --> Get Program Segment
Prefix (PSP) address
Call with: AH = 62H
Returns: BX = segment address of program segment
prefix
Comentarios:
Esta función obtiene la dirección del segmento (párrafo) del Prefijo de segmento de programa (PSP) para el programa que se está ejecutando actualmente.
INT 21H (0x21)
Function 64H (0x64 or 100) --> Reserved
INT 21H
Function 65H (0x65 or 101) --> Get extended
country Information
Call with: AH = 65H
AL = sub function
00H = Get General
Internationalization Information
02H = Get Pointer to Uppercase
Table
04H = Get Pointer to Filename
Uppercase Table
06H = Get Pointer to Collating Table
07H = Get Pointer to Double-Byte
Character Set (DBCS) Vector
BX = code page of interest (-1 = active
CON device)
CX = length of buffer to receive
information (must be >=5)
DX = country ID (-1 = default)
ES: DI = address of buffer to receive
information
Returns: If function successful
Carry flag = clear
And requested data placed in calling program’s buffer
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Obtiene información sobre el país especificado y/o la página de códigos. Consulte la tabla de internacionalización anterior para conocer los bytes de información.
INT 21H (0x21)
Function 66H (0x66 or 102) --> Get or set code
page
Call with: AH = 66H
AL = sub function
01H = Get Code Page
02H = Select Code Page
BX = code page to select, if AL = 02H
Returns: If function is successful
Carry flag = clear
And, if called with AL = 01H
BX = active code page
DX = default code page
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función obtiene o selecciona la página de códigos actual.
INT 21H (0x21)
Function 67H (0x67 or 103) --> Set handle count
Call with: AH = 67H
BX = number of desired handles
Returns: If function is successful
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función establece el número máximo de archivos y dispositivos que el proceso actual puede abrir simultáneamente utilizando identificadores.
INT 21H (0x21)
Function 68H (0x68 or 104) --> Commit file
Call with: AH = 68H
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función obliga a que todos los datos en los búferes internos de MS DOS asociados con un identificador específico se escriban físicamente en el dispositivo. Si el identificador hace referencia a un archivo y el archivo se ha modificado, se actualizan la marca de fecha y hora y el tamaño del archivo en la entrada del directorio raíz del archivo.
INT 21H (0x21)
Function 69H (0x69 or 105) --> Reserved
INT 21H (0x21)
Function 6AH (0x6A or 106) --> Reserved
INT 21H (0x21)
Function 6BH (0x6B or 107) --> Reserved
INT 21H (0x21)
Function 6CH (0x6C or 108) --> Extended open file
Call with: AH = 6CH
AL = 00H
BX = open mode
Bit(s) |
Significance |
0-2 |
Access type
000 = read-only
001 = write-only
010 = read/write |
3 |
Reserved (0) |
4-6 |
Sharing mode
000 = compatibility
001 = deny read/write (deny all)
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance
0 = child process inherits handle
1 = child does not inherit handle |
8-12 |
Reserved (0) |
13 |
Critical error handling
0 = execute INT 24H
1 = return error to process |
14 |
Write-through
0 = writes may be buffered and deferred
1 = physical write at request time |
15 |
Reserved (0) |
CX = file attribute (bits may be combined;
if ignored if openrefer Bits Significance table.
DX = open flag
Bit(s) |
Significance |
0-3 |
Action if file exists
0000 = fail
0001 = open file
0010 = replace file |
4-7 |
Action if file does not exists
0000 = fail
0001 = create file |
8-15 |
Reserved (0) |
DS: SI = segment: offset of ASCIIZ pathname
Returns:mIf function successful
Carry flag = clear
AX = handle
CX = action taken
1 = file existed and was
opened
2 = file did not exists and
was created
3 = file existed and was
replaced
If function unsuccessful
Carry flag = set
AX = error code
Comentarios:
Esta función abre, crea o reemplaza un archivo en el directorio designado o predeterminado en la unidad de disco designada o predeterminada para un nombre de ruta ASCIIZ determinado y devuelve un identificador que puede usar el programa para acceder posteriormente al archivo.
Si algún elemento del nombre de ruta no existe o el archivo se está creando en el directorio raíz y el directorio raíz está lleno o el archivo se está creando y ya existe un archivo con el mismo nombre y el atributo de solo lectura en el directorio especificado o el usuario tiene derechos de acceso insuficientes, la función falla.
Página modificada el: 10/01/2022