Los intdos y el intdosx de las funciones ejecutan la interrupción 0x21 del DOS para invocar una función especificada del DOS. El valor de inregs->h.ah especifica la función del DOS que se invocará. El intdosx de la función también copia los segregs - los >ds y los segregs - los >es que los valores en los registros correspondientes antes de invocar el DOS funcionan y después que restauran el DS. Esta característica de las funciones permite los programas que utilizan indicadores lejanos o un modelo grande de la memoria de los datos especifica qué segmento debe ser utilizado para la ejecución de la función.
Con la función del intdosx puedes invocar una función del DOS que tome un valor del DS diferente del segmento de datos del defecto y/o tome una discusión en el ES. ¡Ambas las funciones vuelven el valor del HACHA después de la terminación de la llamada de función del DOS y si se fija la bandera del llevar (los outregs - > x.cflag! = 0), indica que ocurrió un error. Después de que la interrupción 0x21 vuelva las funciones copian los valores actuales del registro a los outregs, estado de la bandera del llevar al campo de x.cflag en outregs y el valor de las 8086 banderas se coloca al campo de x.flags en outregs. Los inregs y los outregs pueden señalar a la misma estructura. Veamos los ejemplos de estas funciones. El ejemplo del uso de la función de los intdos se ha dado abajo. Este programa obtiene la información seleccionada sobre (1.44Mb, diskette de la pulgada de 3 ½) el accionamiento de disco flojo. Este programa proporciona la información de la asignación de una diskette.
/* La información de la asignación de la impulsión del conseguir para el uso del disco */
#include <dos.h> /* for intdos() and union REGS */
#include <stdio.h> /* for printf() */
union REGS inregs, outregs;
void main()
{
inregs.h.ah = 0x36; /* get disk free space
function number */
inregs.h.dl = 0x01; /* drive A: */
intdos(&inregs, &outregs);
printf("%d sectors/cluster,\n%d clusters,\n%d bytes/sector,
\n%d total clusters",
outregs.x.ax,outregs.x.bx,
outregs.x.cx, outregs.x.dx);
getch();
}
Y la salida del programa será como esto:
1 sector/racimo,
1933 racimos,
512 octetos/sector,
2843 racimos totales |
|