Τα intdos λειτουργιών και intdosx εκτελούν το DOS διακόπτουν 0x21 για να επικαλεσθούν μια διευκρινισμένη λειτουργία DOS. Η αξία των inregs - h.ah διευκρινίζει τη λειτουργία DOS που επικαλείται. Η λειτουργία intdosx επίσης αντιγράφει τα segregs - ds και segregs - τιμές ES στους αντίστοιχους καταλόγους πρίν επικαλείται τη λειτουργία DOS και αποκαθιστά έπειτα DS.
Αυτό το χαρακτηριστικό γνώρισμα των λειτουργιών επιτρέπει τα προγράμματα που χρησιμοποιούν τους μακρινούς δείκτες ή ένα μεγάλο πρότυπο μνήμης στοιχείων διευκρινίζει ποιο τμήμα πρόκειται να χρησιμοποιηθεί για την εκτέλεση λειτουργίας. Με τη λειτουργία intdosx μπορείτε να επικαλεσθείτε μια λειτουργία DOS που παίρνει μια αξία DS διαφορετικού από το τμήμα στοιχείων προεπιλογής ή/και παίρνει ένα επιχείρημα στην ES.
Και οι δύο λειτουργίες επιστρέφουν την αξία του ΤΣΕΚΟΥΡΙΟΥ μετά από την ολοκλήρωση της κλήσης λειτουργίας DOS και εάν φέρτε η σημαία τίθεται (outregs - x.cflag! = 0), δείχνει ότι ένα λάθος εμφανίστηκε.
Αφότου διακόψτε 0x21 επιστρέφει τις λειτουργίες αντιγράφει τις τρέχουσες τιμές καταλόγων στα outregs, η θέση φέρνει τη σημαία στον τομέα x.cflag στα outregs και την αξία του καταλόγου 8086 σημαιών στον τομέα x.flags στα outregs. Και inregs και outregs μπορεί να δείξει την ίδια δομή. Δείτε τα παραδείγματα αυτών των λειτουργιών.
Το παράδειγμα της χρήσης της λειτουργίας intdos έχει δοθεί κατωτέρω. Αυτό το πρόγραμμα λαμβάνει τις επιλεγμένες πληροφορίες για την πλαδαρή (1.44Mb, 3½ δισκέτα ίντσας) κίνηση δίσκων. Αυτό το πρόγραμμα παρέχει τις πληροφορίες κατανομής μιας δισκέτας.
/* Πάρτε τις πληροφορίες κατανομής κίνησης για τη χρήση δίσκων */
#include <dos.h> /*για τα intdos () και την ένωση REGS */
#include <stdio.h> /* για printf () */
union REGS inregs, outregs;
void main()
{
inregs.h.ah = 0x36; /* πάρτε τον ελεύθερο διαστημικό αριθμό λειτουργίας δίσκων */
inregs.h.dl = 0x01; /* οδηγήστε το Α: */
intdos(&inregs, &outregs);
printf("%d τομείς/συστάδα,\n%d συστάδες,\n%d ψηφιολέξεις/τομέας,
\n%d συνολικές συστάδες",
outregs.x.ax,outregs.x.bx,
outregs.x.cx, outregs.x.dx);
getch();
}
Και η παραγωγή του προγράμματος θα είναι όπως αυτό:
1 τομείς/συστάδα,
1933 συστάδες,
512 ψηφιολέξεις/τομέας,
2843 συνολικές συστάδες |
|