I intdos e il intdosx di funzioni eseguono l'interruzione 0x21 del DOS per invocare una funzione specificata del DOS. Il valore di inregs->h.ah specifica la funzione del DOS da invocare. Il intdosx di funzione inoltre copia i segregs - >ds e segregs - >es che i valori nei registri corrispondenti prima dell'invocazione del DOS funzionano ed allora che ristabilisce il DS. Questa caratteristica delle funzioni permette i programmi che usano gli indicatori lontani o un grande modello di memoria di dati specifica quale segmento deve essere usato per l'esecuzione di funzione. Con la funzione del intdosx potete invocare una funzione del DOS che prende un valore del DS differente dal segmento di dati di difetto e/o prende una discussione nell'es. Le entrambe funzioni restituiscono il valore dell'ASCIA dopo completamento della chiamata di funzione del DOS e se la bandierina di trasport è regolata (outregs - > x.cflag! = 0), indica che un errore ha accaduto. Dopo che l'interruzione 0x21 rinvii le funzioni copiano i valori correnti del registro ai outregs, condizione della bandierina di trasport al campo di x.cflag nei outregs ed il valore delle 8086 bandierine registra al campo di x.flags nei outregs. Sia i inregs che i outregs possono indicare alla stessa struttura. Vediamo gli esempi di queste funzioni. L'esempio dell'uso della funzione di intdos è stato fornito sotto. Questo programma ottiene le informazioni selezionate (1.44Mb, dischetto di pollice dei 3 ½) sull'azionatore del disco floscio. Questo programma fornisce le informazioni di ripartizione di un dischetto.
/* Le informazioni di ripartizione dell'azionamento di otten per uso del disc */
#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();
}
E l'uscita del programma sarà come questa:
1 settore/serie di ingranaggi,
1933 serie di ingranaggi,
512 byte/settore,
2843 serie di ingranaggi totali |
|