Die Funktionen intdos und das intdosx führen DOS Unterbrechung 0x21 durch, um eine spezifizierte DOS Funktion hervorzurufen. Der Wert von inregs->h.ah spezifiziert die hervorgerufen zu werden DOS Funktion. Das Funktion intdosx kopiert auch die segregs - >ds und segregs - >es, die Werte in die entsprechenden Register, bevor sie das DOS hervorrufen, arbeiten und dann DS wieder herstellen.
Diese Eigenschaft der Funktionen erlaubt die Programme, die weite Zeiger benutzen, oder ein großes Datengedächtnismodell spezifizieren, welches Segment für die Funktion Durchführung verwendet werden soll. Mit intdosx Funktion kannst du eine DOS Funktion hervorrufen, die einen Wert von DS unterschiedlich zu dem Rückstellung Datensegment nimmt und/oder ein Argument in ES nimmt.
Beide Funktionen bringen den Wert der AXT nach Vollendung des DOS Funktion Anrufs zurück und wenn die tragenmarkierungsfahne eingestellt wird (outregs - > x.cflag! = 0), zeigt sie an, daß eine Störung auftrat.
Nachdem die Unterbrechung 0x21 zurückgeht, kopieren die Funktionen die gegenwärtigen Registerwerte zu den outregs, fangen Status der tragenmarkierungsfahne zum x.cflag in den outregs auf und Wert der 8086 Markierungsfahnen registrieren zum x.flags auffangen in den outregs. können inregs und outregs auf die gleiche Struktur zeigen. Uns die Beispiele dieser Funktionen sehen lassen.
Das Beispiel des Gebrauches von intdos Funktion ist unten gegeben worden. Dieses Programm holt die vorgewählten Informationen über das schlaffe (1.44Mb, Diskette des 3 ½ Zoll) Laufwerk ein. Dieses Programm liefert die Verteilung Informationen einer Diskette.
/*Die erhaltenantrieb Verteilung Informationen für Scheibe Verbrauch */
#include <dos.h> /* für intdos () und Anschluß REGS */
#include <stdio.h> /*für printf ()*/
union REGS inregs, outregs;
void main()
{
inregs.h.ah = 0x36; /* Scheibe freie Raumfunktion Zahl erhalten */
inregs.h.dl = 0x01; /* a fahren: */
intdos(&inregs, &outregs);
printf("%d Sektoren/Block,\n%d Blöcke,\n%d Bytes/Sektor,
\n%dGesamtblöcke",
outregs.x.ax,outregs.x.bx,
outregs.x.cx, outregs.x.dx);
getch();
}
GesamtclustersaAnd Ausgang des Programms ist so:
1 Sektoren/Block,
1933 Blöcke,
512 Bytes/Sektor,
2843 Gesamtblöcke |
|