- API del MS DOS
-
El API del MS DOS o MS-DOS API es un API usado originalmente en MS-DOS/PC-DOS, y más adelante por otros sistemas DOS. La mayoría de las llamadas al DOS API invocan la interrupción de software 21h (INT 21h). Llamando la INT 21h con un número de subfunción en el registro de procesador AH y otros parámetros en otros registros, se pueden invocar varios servicios del DOS. Los servicios del DOS incluyen la entrada por teclado, salida por pantalla, acceso a archivos de disco, ejecutar programas, la asignación de memoria, y otras cosas. Las subfunciones proporcionadas en el primer lanzamiento del MS-DOS en 1981 fueron fuertemente orientadas a la compatibilidad con el CP/M. Un importante mejora del DOS API (influenciada parcialmente por ciertos conceptos de Unix) fue realizada para el lanzamiento del MS-DOS 2.0 de 1983, agregando numerosas nuevas subfunciones para manejar la entrada/salida de archivos usando las "handles" (manejadores) abstractos y soporte para sub-directorios. En estas nuevas subfunciones, los strings son generalmente terminados por un byte NUL (ASCIIZ). En la versión MS-DOS 3.1 (lanzada en 1985), varias subfunciones fueron añadidas para manejar redes. En la versión MS-DOS 4, fueron introducidas llamadas para manejar la memoria expandida de acuerdo a la especificación de Lotus-Intel-Microsoft.
Hay varias implementaciones del DOS API, incluyendo PC-DOS, MS-DOS, DR-DOS, FreeDOS, PTS-DOS, y otros. El DOS API está basado en el BIOS, y las rutinas del DOS con frecuencia internamente accesan a llamadas de interrupción del BIOS
DOS extenders junto con DOS Protected Mode Interface (DPMI) extienden el DOS API al modo protegido de 16 bits o de 32 bits. El API del MS DOS es parcialmente dependiente en el código x86, por lo tanto el DOS no puede ser portado a otras arquitecturas de procesador.
Contenido
El API del MS DOS y Windows
Las versiones 1.0 a 3.1 de Microsoft Windows eran los shells gráficos que corrían en MS-DOS y confiaban en el API del MS DOS (aunque usando su propio API para los programas de Windows). Windows 9x también estaba basado en el DOS, pero utilizó una versión personalizada del MS-DOS, principalmente como cargador de arranque. No usaba mucho el API del MS DOS después de cargarse. Sin embargo, Windows 9x proporcionó el DOS API a los programas que corrían dentro de una ventana shell de comandos. Versiones anteriores de Windows 9x (al menos a través de la primera edición de Windows 98) también podían cargarse en una simple interface de línea de comandos "Modo DOS" sin el GUI y sin servicios de sistema de Windows, para correr programas puros de DOS. Las versiones del DOS de Windows 9x (numeradas 7.0 en adelante) incluyen varias nuevas subfunciones de servicio para manejar el nombres de archivo largos (LFNs). Estas subfunciones LFN del DOS no fueron incluidos en Windows NT, pero estaban en versiones posteriores como Windows XP.
Windows NT y los sistemas basados en él (ej. Windows XP y Windows Vista) no están basados en MS-DOS, pero usan una máquina virtual, NTVDM, para manejar el DOS API. NTVDM trabaja haciendo correr un programa del DOS en el Modo 8086 virtual (una emulación del Modo real dentro del modo protegido disponible en 80386 y procesadores más recientes). DOSEMU para Linux usa un acercamiento similar.
Servicios comunes del DOS
Algunas llamadas de funciones INT 21h básicas presentadas desde la versión 2.0 del DOS:
Subfunción
(hex)Servicio Parámetros Retorno AH = 00 DOS 1+
Termina programaNunca[1] AH = 01 DOS 1+
Lee caracteres desde STDINAL=Caracter leído[2] AH = 02 DOS 1+
Escribe caracter a STDOUTDL=Caracter [3] AH = 09 DOS 1+
Escribe caracter a STDOUTDS:DX=Puntero a un string terminado en '$' [4] AH = 3C DOS 2+
Crea o trunca un archivoCX=Atributos del archivo ; DS:DX->nombre de archivo ASCIZ CF=1 si hubo error ; AX=código de error ; {{{1}}}[5] AH = 3D DOS 2+
Abre archivo existenteAL=Modos de acceso e intercambio ; DS:DX->Archivo ASCIZ ; {{{1}}} CF=1 si hubo error ; AX=código de error ; AX=handle de archivo[6] AH = 3F DOS 2+
Lee desde un archivo o dispositivoBX=handle de archivo ; {{{1}}} ; DS:DX->datos CF=1 si hubo error ; AX=código de error o bytes leídos[7] AH = 40 DOS 2+
Escribe a archivo o dispositivoBX=handle de archivo ; CX=bytes a escribir ; DS:DX->datos CF=1 si hubo error ; AX=código de error o bytes escritos[8] AH = 3E DOS 2+
Cierra archivoBX=handle de archivo CF=1 si hubo error ; AX=código de error[9] AH = 42 DOS 2+
Ajusta la posición en el archivoAL=origen de la movida, 0-inicio, 1-actual, 2-final ; BX=handle de archivo ; CX:DX=(con signo) desplazamiento CF=1 si hubo error ; AX=código de error ; DX:AX=posición desde el principio[10] Sistemas operativos que soportan el API del MS DOS
- MS-DOS - la más extensa encarnación
- PC-DOS - Versión de IBM
- DR-DOS - Clon de Digital Research
- ROM-DOS - Versión en ROM
- FreeDOS - De fuente abierta libre
- Microsoft Windows - 1.x, 2.x, 3.x, y 9x fueron basados en el DOS
Programas con soporte para el API del MS DOS
- NTVDM.EXE para Windows NT
- DOSEMU para Linux
- DOSBox
Referencias
- wustl.edu - Description of MS-DOS services
- The New Peter Norton Programmer's Guide to the IBM PC & PS/2 by Peter Norton and Richard Wilton, Microsoft Press, 1987 ISBN 1-55615-131-4.
- ctyme.com - INT Calls by function
- antionline.com - Programming example code
- ↑ «Int 21/AH=00h». 090912 ctyme.com
- ↑ «Int 21/AH=01h». 090912 ctyme.com
- ↑ «Int 21/AH=02h». 090912 ctyme.com
- ↑ «Int 21/AH=09h». 090912 ctyme.com
- ↑ «Int 21/AH=3Ch, Creat». 090911 ctyme.com
- ↑ «Int 21/AH=3Dh, Open». 090911 ctyme.com
- ↑ «Int 21/AH=3Fh, Read». 090911 ctyme.com
- ↑ «Int 21/AH=40h, Write». 090911 ctyme.com
- ↑ «Int 21/AH=3Eh, Close». 090911 ctyme.com
- ↑ «Int 21/AH=42h, Lseek». 090911 ctyme.com
Véase también
- MS DOS
- IBM PC DOS
- Llamadas de interrupción del BIOS
- DOS/4GW
- DOS MZ ejecutable
Enlaces externos
Categorías:- DOS
- Tecnología de sistema operativo
- Arquitectura x86
- Interrupciones
Wikimedia foundation. 2010.