Functiesintdos en intdosx voeren Dos uit onderbreken 0x21 om een gespecificeerde functie van Dos aan te halen. De waarde van inregs - h.ah specificeert de aan te halen functie van Dos. De functie intdosx kopiëert ook segregs - ds en segregs - Swaarden in de overeenkomstige registers alvorens de functie van Dos aan te halen en herstelt dan DS.
Deze eigenschap van de functies staat de programma's toe die verre wijzers gebruiken of een groot model van het gegevensgeheugen specificeert welk segment voor de functieuitvoering moet worden gebruikt. Met intdosxfunctie kunt u een functie van Dos aanhalen die een waarde van DS verschillend van het standaardgegevenssegment neemt en/of een argument in S neemt.
De beide functies keren na voltooiing de waarde van BIJL van de de functievraag van Dos terug en als draag wordt de vlag geplaatst (outregs - x.cflag! = 0), het wijst erop dat een fout voorkwam.
Nadat onderbreek keert 0x21 de functies terug kopiëert de huidige registerwaarden aan outregs, draagt de status van vlag aan het x.cflag- gebied in outregs en waarde van het 8086 vlaggenregister aan het x.flags- gebied in outregs. Zowel inregs en outregs kan aan de zelfde structuur richten. Zie de voorbeelden van deze functies.
Het voorbeeld van het gebruik van intdosfunctie is hieronder gegeven. Dit programma verkrijgt de geselecteerde informatie over de slappe (1.44Mb, 3½ duim floppy disk) schijfaandrijving. Dit programma verstrekt de toewijzingsinformatie van een floppy disk.
/* Krijg de informatie van de aandrijvingstoewijzing voor schijfgebruik*/
#include <dos.h> /* voor intdos () en unie REGS */
#include <stdio.h> /* voor printf () */
union REGS inregs, outregs;
void main()
{
inregs.h.ah = 0x36; /* krijg aantal van de schijf het vrije ruimtefunctie*/
inregs.h.dl = 0x01; /* drijf A:*/
intdos(&inregs, &outregs);
printf("%d sectoren/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();
}
And output of the program will be like this:
1 sectoren/cluster,
1933 clusters,
512 bytes/sector,
2843 total clusters |
|