Les intdos et l'intdosx de fonctions exécutent l'interruption 0x21 de DOS pour appeler une fonction indiquée de DOS. La valeur d'inregs->h.ah indique la fonction de DOS à appeler. L'intdosx de fonction copie également les segregs - des >ds et des segregs - des >es que les valeurs dans les registres correspondants avant d'appeler le DOS fonctionnent et puis reconstituent le DS.
Ce dispositif des fonctions permet les programmes qui emploient les indicateurs lointains ou un grand modèle de mémoire de données indiquent quel segment doit être employé pour l'exécution de fonction. Avec la fonction d'intdosx vous pouvez appeler une fonction de DOS qui prend une valeur de DS différente du segment de données de défaut et/ou prend un argument dans l'es.
Les les deux les fonctions renvoient la valeur de la HACHE à la fin de l'appel de fonction de DOS et si le drapeau de porter est placé (des outregs - > x.cflag ! = 0), il indique qu'une erreur s'est produite.
Après que l'interruption 0x21 retourne les fonctions copient les valeurs courantes de registre aux outregs, statut du drapeau de porter au champ de x.cflag dans les outregs et la valeur des 8086 drapeaux s'enregistrent au champ de x.flags dans les outregs. Les inregs et les outregs peuvent se diriger à la même structure. Voyons les exemples de ces fonctions.
L'exemple de l'utilisation de la fonction d'intdos a été donné ci-dessous. Ce programme obtient les informations choisies sur (1.44Mb, disquette de pouce de 3 ½) l'unité de disques souple. Ce programme fournit les informations d'attribution d'une disquette.
/* L'information d'attribution d'entraînement d'obtenir pour l'utilisation de disque */
#include <dos.h> /* pour les intdos () et l'union REGS */
#include <stdio.h> /* pour le printf() */
union REGS inregs, outregs;
void main()
{
inregs.h.ah = 0x36; /* obtenir à disque le nombre libre de fonction de l'espace */
inregs.h.dl = 0x01; /* conduire 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();
}
Et le rendement du programme sera comme ceci:
1 sectors/cluster,
1933 clusters,
512 bytes/sector,
2843 total clusters |
|