Κεφάλαιο – 6
Εισαγωγή στα βασικά του υπολογιστή
Εισαγωγή
Μερικές φορές, σε ορισμένες περιπτώσεις, όταν προσπαθείτε να ανακτήσετε τα δεδομένα ή εκτελείτε οποιαδήποτε εργασία αντιμετώπισης προβλημάτων δεδομένων και δίσκου (ή μπορεί να είναι οποιαδήποτε άλλη εργασία σχετική με το σύστημα), είναι πολύ βολικό να χρησιμοποιήσετε την εντολή DEBUG του DOC.
Επίσης, για ορισμένες συγκεκριμένες περιπτώσεις, μπορεί να είναι εύκολο να κάνετε τη συγκεκριμένη εργασία με τη βοήθεια του DEBUG και στη συνέχεια με τον προγραμματισμό. Ας πάρουμε ένα παράδειγμα. Η ακόλουθη κωδικοποίηση του εντοπισμού σφαλμάτων θα είναι επαρκής για τη δημιουργία αντιγράφων ασφαλείας του DBR. Απλώς πληκτρολογήστε τις ακόλουθες γραμμές:
DEBUG BKDBR.BIN
L 100 2 0 1
R CX
200
W
Q
Εδώ μπορείτε να δείτε ότι μόνο πληκτρολογώντας τις παραπάνω λίγες γραμμές μπορείτε να αποφύγετε να γράψετε ένα πρόγραμμα. Ας δούμε ένα άλλο παράδειγμα κωδικοποίησης που φορτώνει το αντίγραφο ασφαλείας του DBR στο δίσκο
Να θυμάστε πάντα! Μην το δοκιμάσετε χωρίς την πλήρη γνώση. Να είστε σίγουροι τι πρόκειται να κάνετε. Η απρόσεκτη χρήση των ακόλουθων Οδηγιών μπορεί να προκαλέσει μεγάλη απώλεια δεδομένων, καθώς η κακή χρήση της Οδηγίας μπορεί να κάνει όλες τις πληροφορίες του δίσκου σας απρόσιτες.
DEBUG BKDBR.BIN
W 100 2 0 1
Q
Βλέποντας την κωδικοποίηση αυτού του παραδείγματος, μπορείτε εύκολα να μαντέψετε πόσο μπορεί να σας βοηθήσει όταν το χρειάζεστε περισσότερο. Επίσης δεν είναι δυνατό να γίνει προγραμματισμός σε κάθε περίπτωση. Ωστόσο, εντός ενός ορίου απλών περιπτώσεων του προβλήματος, για να χρησιμοποιήσετε τις Οδηγίες συναρμολόγησης, θα πρέπει απλώς να αντιγράψετε το debug.exe/debug.com στον δίσκο εκκίνησης και να αρχίσετε να γράφετε τον κώδικα.
Η λειτουργία και τα παραδείγματα που περιγράφονται σε αυτό το κεφάλαιο και σε αυτό το βιβλίο είναι συμβατά μόνο με την αρχιτεκτονική οικογένειας επεξεργαστών x86 Intel.
Πρώτα απ 'όλα, πρέπει να λάβουμε λίγη γνώση των βασικών αρχιτεκτονικών υπολογιστών για να κατανοήσουμε τους όρους που χρησιμοποιούνται στις επόμενες ενότητες, ενώ περιγράφουμε τη λειτουργία και τα παραδείγματα σε διάφορα βήματα. Ενημερώστε μας μερικά βασικά στοιχεία αρχιτεκτονικής υπολογιστών:
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ
Κεντρικός Επεξεργαστής
Αυτό το τμήμα είναι επίσης γνωστό ως κεντρική μονάδα επεξεργασίας ή CPU, η οποία με τη σειρά της αποτελείται από τη μονάδα ελέγχου και την αριθμητική και λογική μονάδα. Οι λειτουργίες του συνίστανται στην ανάγνωση και εγγραφή των περιεχομένων των κελιών μνήμης, στην προώθηση δεδομένων μεταξύ κελιών μνήμης και ειδικών καταχωρητών και στην αποκωδικοποίηση και εκτέλεση των Οδηγιών ενός προγράμματος. Ο επεξεργαστής έχει μια σειρά κυψελών μνήμης που χρησιμοποιούνται πολύ συχνά και επομένως αποτελούν μέρος της CPU.
Αυτά τα κελιά είναι γνωστά με το όνομα των καταχωρητών. Ένας επεξεργαστής μπορεί να έχει μία ή δύο δωδεκάδες από αυτούς τους καταχωρητές. Η αριθμητική και λογική μονάδα της CPU πραγματοποιεί τις πράξεις που σχετίζονται με αριθμητικούς και συμβολικούς υπολογισμούς.
Συνήθως αυτές οι μονάδες έχουν την ικανότητα να εκτελούν μόνο πολύ στοιχειώδεις πράξεις, όπως η πρόσθεση και η αφαίρεση δύο ακέραιων αριθμών, ο πολλαπλασιασμός και η διαίρεση ακέραιων αριθμών, ο χειρισμός των bit των καταχωρητών και η σύγκριση του περιεχομένου δύο καταχωρητών. Οι προσωπικοί υπολογιστές μπορούν να ταξινομηθούν με βάση αυτό που είναι γνωστό ως μέγεθος λέξης, δηλαδή η ποσότητα των bit που μπορεί να χειριστεί ο επεξεργαστής κάθε φορά.
Κεντρική Μνήμη
Είναι μια ομάδα κυψελών, κατασκευασμένων με ημιαγωγούς, που χρησιμοποιούνται για γενικές διαδικασίες, όπως η εκτέλεση προγραμμάτων και η αποθήκευση πληροφοριών για τις λειτουργίες. Κάθε ένα από αυτά τα κελιά μπορεί να περιέχει μια αριθμητική τιμή και έχουν την ιδιότητα να έχουν δυνατότητα κατεύθυνσης. Αυτό είναι ότι μπορούν να διακρίνουν το ένα από το άλλο μέσω ενός μοναδικού αριθμού ή μιας διεύθυνσης για κάθε κελί. Το γενικό όνομα αυτών των μνημών είναι Μνήμη τυχαίας πρόσβασης ή RAM.
Το κύριο μειονέκτημα αυτού του τύπου μνήμης είναι ότι τα ολοκληρωμένα κυκλώματα χάνουν τις πληροφορίες που έχουν αποθηκεύσει όταν διακόπτεται η ροή του ηλεκτρισμού. Αυτός ήταν ο λόγος για τη δημιουργία μνημών των οποίων οι πληροφορίες δεν χάνονται όταν το σύστημα είναι απενεργοποιημένο. Αυτές οι μνήμες λαμβάνουν το όνομα Μνήμη μόνο για ανάγνωση ή ROM.
Για να επεξεργαστεί ο υπολογιστής πληροφορίες, είναι απαραίτητο αυτές οι πληροφορίες να βρίσκονται σε ειδικά κελιά που ονομάζονται καταχωρητές. Οι καταχωρητές είναι ομάδες των 8 ή 16 flip-flops.
Το flip-flop είναι μια συσκευή ικανή να αποθηκεύει δύο επίπεδα τάσης, ένα χαμηλό, τακτικά 0,5 βολτ και ένα άλλο, συνήθως 5 βολτ. Το χαμηλό επίπεδο ενέργειας στο flip-flop ερμηνεύεται ως off ή 0, και το υψηλό επίπεδο ως ενεργό ή
- Αυτές οι καταστάσεις είναι συνήθως γνωστές ως bit, τα οποία είναι η μικρότερη μονάδα πληροφοριών σε έναν υπολογιστή.
Μια ομάδα 16 bit είναι γνωστή ως λέξη, μια λέξη μπορεί να χωριστεί σε ομάδες των 8 bit που ονομάζονται bytes και οι ομάδες των 4 bit ονομάζονται nibbles.
Εγγραφές CPU
Η CPU έχει 4 εσωτερικούς καταχωρητές, ο καθένας των 16 bit. Οι πρώτοι τέσσερις, AX, BX, CX και DX είναι καταχωρητές γενικής χρήσης και μπορούν επίσης να χρησιμοποιηθούν ως καταχωρητές 8 bit, εάν χρησιμοποιούνται με τέτοιο τρόπο, είναι απαραίτητο να αναφέρονται σε αυτά για παράδειγμα ως: AH και AL, που είναι τα υψηλά και χαμηλά byte του καταχωρητή AX. Αυτή η ονοματολογία ισχύει επίσης για τους καταχωρητές BX, CX και DX.
Τα μητρώα που είναι γνωστά με τα συγκεκριμένα ονόματά τους:
Register |
Specific Name |
AX |
Accumulator |
BX |
Base register |
CX |
Counting register |
DX |
Data register |
DS |
Data segment register |
ES |
Extra segment register |
SS |
Battery segment register |
CS |
Code segment register |
BP |
Base pointers register |
SI |
Source index register |
DI |
Destination index register |
SP |
Battery pointer register |
IP |
Next Instruction pointer register |
F |
Flag register |
Ωστόσο, θα χρησιμοποιήσουμε αυτούς τους καταχωρητές στον προγραμματισμό διακοπών μέσω C στα επόμενα κεφάλαια λεπτομερώς, αλλά η εκμάθηση των βασικών στοιχείων της γλώσσας assembly εδώ θα είναι καλή ιδανική και θα μας βοηθήσει στον προγραμματισμό των λειτουργιών του δίσκου κ.λπ.
Μπορείτε να απεικονίσετε τις τιμές των εσωτερικών καταχωρητών της CPU χρησιμοποιώντας το πρόγραμμα Debug. Για να ξεκινήσετε να εργάζεστε με τον εντοπισμό σφαλμάτων, πληκτρολογήστε την ακόλουθη ερώτηση στον υπολογιστή σας:
C:/>Εντοπισμός σφαλμάτων <Enter>
Στην επόμενη γραμμή θα εμφανιστεί μια παύλα, αυτή είναι η ένδειξη του εντοπισμού σφαλμάτων, αυτή τη στιγμή οι Οδηγίες εντοπισμού σφαλμάτων μπορούν να εισαχθούν χρησιμοποιώντας την ακόλουθη εντολή:
- r <Enter>
Εμφανίζονται όλα τα περιεχόμενα των εσωτερικών καταχωρητών της CPU. Μια εναλλακτική για την προβολή τους είναι να χρησιμοποιήσετε το "r" εντολή χρησιμοποιώντας ως παράμετρο το όνομα του καταχωρητή του οποίου η τιμή θέλει να φαίνεται. Για παράδειγμα:
-rbx <Enter>
Αυτή η οδηγία θα εμφανίζει μόνο το περιεχόμενο του καταχωρητή BX και η ένδειξη εντοπισμού σφαλμάτων αλλάζει από "-" σε ":"
Όταν η προτροπή είναι έτσι, μπορείτε να αλλάξετε την τιμή του καταχωρητή που εμφανίστηκε πληκτρολογώντας τη νέα τιμή και <Enter>, ή η παλιά τιμή μπορεί να παραμείνει πατώντας Enter χωρίς να πληκτρολογήσετε άλλη τιμή.
Είναι δυνατό να αλλάξουμε την τιμή του καταχωρητή σημαίας και να τον χρησιμοποιήσουμε ως δομή ελέγχου στα προγράμματά μας, όπως θα δούμε αργότερα. Κάθε bit του καταχωρητή έχει ένα ειδικό όνομα και σημασία, η ακόλουθη λίστα περιγράφει την τιμή κάθε bit, ενεργοποιημένο ή απενεργοποιημένο και τη σχέση του με τις λειτουργίες του επεξεργαστή:
Overflow
NV = there is no overflow
OV = there is an overflow
Direction
UP = forward
DN = backward
Interrupts
DI = deactivated
EI = activated
Sign
PL = positive
NG = negative
Zero
NZ = it is not zero
ZR = it is zero
Auxiliary Carry
NA = there is no auxiliary carry
AC = there is auxiliary carry
Parity
PO = uneven parity
PE = even parity
Carry
NC = there is no carry
CY = there is carry
Δομή συναρμολογητή
Στη γλώσσα συναρμολόγησης οι γραμμές κώδικα έχουν δύο μέρη, το πρώτο είναι το όνομα της Εντολής που πρόκειται να εκτελεστεί και το δεύτερο είναι οι παράμετροι της εντολής. Για παράδειγμα:
ΠΡΟΣΘΗΚΗ ah, bh
Εδώ "ADD" είναι η εντολή που πρέπει να εκτελεστεί. σε αυτήν την περίπτωση μια προσθήκη, και "αχ"; καθώς και το "bh" είναι οι παράμετροι.
Το όνομα των Οδηγιών στη γλώσσα αποτελείται από δύο, τρία ή τέσσερα γράμματα. Αυτές οι Οδηγίες ονομάζονται επίσης μνημονικά ονόματα ή κωδικοί λειτουργίας, καθώς αντιπροσωπεύουν μια λειτουργία που θα εκτελέσει ο επεξεργαστής. Υπάρχουν κάποιες εντολές που δεν απαιτούν παραμέτρους για τη λειτουργία τους, καθώς και άλλες που απαιτούν μόνο μία παράμετρο.
Μερικές φορές οι οδηγίες χρησιμοποιούνται ως εξής:
ADD al,[170]
Οι αγκύλες στη δεύτερη παράμετρο μας υποδεικνύουν ότι πρόκειται να εργαστούμε με το περιεχόμενο του κελιού μνήμης με αριθμό 170 και όχι με την τιμή 170. αυτό είναι γνωστό ως άμεση κατεύθυνση.
Τώρα είμαστε έτοιμοι να κωδικοποιήσουμε το πρώτο μας πρόγραμμα με τη βοήθεια του εντοπισμού σφαλμάτων. Θα δημιουργήσουμε ένα πρόγραμμα που θα λειτουργεί για να απεικονίσει αυτό που έχουμε δει και αυτό που θα κάνουμε είναι να προσθέσουμε δύο τιμές που θα εισάγουμε απευθείας στο πρόγραμμα.
Το πρώτο βήμα είναι να ξεκινήσει ο εντοπισμός σφαλμάτων, αυτό το βήμα αποτελείται μόνο από την πληκτρολόγηση του εντοπισμού σφαλμάτων <Enter> στη γραμμή εντολών του λειτουργικού συστήματος.
Για να συναρμολογήσετε ένα πρόγραμμα στο Debug, το "a" (συναρμολόγηση) χρησιμοποιείται η εντολή. Όταν χρησιμοποιείται αυτή η εντολή, η διεύθυνση όπου θέλετε να ξεκινήσει η συναρμολόγηση μπορεί να δοθεί ως παράμετρος, εάν η παράμετρος παραλειφθεί, η συναρμολόγηση θα ξεκινήσει στην τοποθεσία που καθορίζεται από το CS:IP, συνήθως 0100h, που είναι η τοποθεσία όπου τα προγράμματα με επέκταση .COM πρέπει να ξεκινήσει. Και θα είναι το μέρος που θα χρησιμοποιήσουμε αφού μόνο το Debug μπορεί να δημιουργήσει αυτόν τον συγκεκριμένο τύπο προγραμμάτων.
Παρόλο που αυτή τη στιγμή δεν είναι απαραίτητο να δοθεί το "α"; εντολή μιας παραμέτρου, συνιστάται να το κάνετε για να αποφύγετε προβλήματα μόλις χρησιμοποιηθούν οι καταχωρητές CS:IP, επομένως πληκτρολογούμε:
-a0100 <Enter>
Όταν γίνει αυτό θα εμφανιστεί κάτι σαν αυτό στην οθόνη: 0C1B:0100 και ο κέρσορας βρίσκεται στα δεξιά αυτών των αριθμών, σημειώστε ότι τα πρώτα τέσσερα ψηφία, στο δεκαεξαδικό σύστημα, μπορεί να είναι διαφορετικά, αλλά τα τέσσερα τελευταία πρέπει να είναι 0100, καθώς είναι η διεύθυνση που υποδείξαμε ως αρχή. Τώρα μπορούμε να παρουσιάσουμε τις Οδηγίες:
0C1B:0100 mov ax,0002; puts the 0002 value on the ax register
0C1B:0103 mov bx,0004; puts the 0004 value on the bx register
0C1B:0106 add ax,bx; the content of bx is added to the content of ax
0C1B:0108 int 20; provoques the termination of the program.
0C1B:010A
Δεν είναι απαραίτητο να γράφετε τα σχόλια που ακολουθούν το ";". Μόλις πληκτρολογηθεί η τελευταία εντολή, int 20, <Enter> πατιέται χωρίς να γράψετε τίποτα περισσότερο, για να δείτε ξανά την προτροπή του Debugger.
Η τελευταία γραμμένη γραμμή δεν είναι σωστά μια οδηγία συναρμολόγησης, αντίθετα είναι μια κλήση για διακοπή του λειτουργικού συστήματος, αυτές οι διακοπές μας εξοικονομούν πολλές γραμμές και είναι πολύ χρήσιμες για την πρόσβαση στις λειτουργίες του λειτουργικού συστήματος.
Για να εκτελέσετε το πρόγραμμα που γράψαμε, το "g" χρησιμοποιείται η εντολή και όταν χρησιμοποιείται θα δούμε ένα μήνυμα που λέει:
"Το πρόγραμμα τερματίστηκε κανονικά". Φυσικά με ένα μήνυμα όπως αυτό δεν μπορούμε να είμαστε σίγουροι ότι το πρόγραμμα έχει κάνει την προσθήκη, αλλά υπάρχει ένας απλός τρόπος να το επαληθεύσετε, χρησιμοποιώντας το "r" εντολή του Debug μπορούμε να δούμε τα περιεχόμενα όλων των μητρώων του επεξεργαστή, απλά πληκτρολογήστε:
-r <Enter>
Κάθε μητρώο με την αντίστοιχη πραγματική του τιμή θα εμφανίζεται στην οθόνη ως εξής:
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A OF DB
Υπάρχει η πιθανότητα οι καταχωρητές να περιέχουν διαφορετικές τιμές, αλλά το AX και το BX πρέπει να είναι το ίδιο, καθώς είναι αυτοί που μόλις τροποποιήσαμε.
Ένας άλλος τρόπος για να δείτε τις τιμές, ενώ το πρόγραμμα εκτελείται, είναι να χρησιμοποιήσουμε τη διεύθυνση όπου θέλουμε να τελειώσει η εκτέλεση και να εμφανίσουμε τις τιμές των καταχωρητών ως παράμετρο για το "g", σε αυτήν την περίπτωση θα ήταν : g108, αυτή η οδηγία εκτελεί το πρόγραμμα, σταματά στη διεύθυνση 108 και εμφανίζει τα περιεχόμενα των καταχωρητών.
Η παρακολούθηση του τι συμβαίνει στα μητρώα μπορεί να γίνει χρησιμοποιώντας το "t" εντολή (ίχνος), η λειτουργία αυτής της εντολής είναι να εκτελεί γραμμή προς γραμμή αυτό που συναρμολογήθηκε, εμφανίζοντας κάθε φορά τα περιεχόμενα των καταχωρητών.
Για έξοδο από τον εντοπισμό σφαλμάτων χρησιμοποιήστε το "q" (τέρμα) εντολή.
Πλεονεκτήματα του Assembler
Ο πρώτος λόγος για να συνεργαστείτε με το assembler είναι ότι παρέχει την ευκαιρία να μάθετε περισσότερα για τη λειτουργία του υπολογιστή σας, κάτι που επιτρέπει την ανάπτυξη λογισμικού με πιο συνεπή τρόπο.
Ο δεύτερος λόγος είναι ο απόλυτος έλεγχος του υπολογιστή, τον οποίο μπορείτε να έχετε με τη χρήση του assembler. Ένας άλλος λόγος είναι ότι τα προγράμματα που βασίζονται στη συναρμολόγηση είναι πιο γρήγορα και σε ορισμένες περιπτώσεις είναι μικρότερα και έχουν μεγαλύτερη χωρητικότητα από αυτά που δημιουργούνται με άλλες γλώσσες.
Επιτρέψτε μου να κρατήσω την υπόσχεσή μου!!
Στο προηγούμενο μέρος αυτού του κεφαλαίου χρησιμοποιούσαμε ορισμένες οδηγίες για παράδειγμα, για να δημιουργήσουμε αντίγραφα ασφαλείας του DBR και να φορτώσουμε το αντίγραφο ασφαλείας του DBR στην αρχική του θέση όταν χρειάζεται. Αρχικά εξετάζουμε την Οδηγία για να δημιουργήσουμε το αντίγραφο ασφαλείας.
C:\>DEBUG A:\BKDBR.BIN <Enter>
File not found
- L 100 2 0 1 <Enter>
- R CX <Enter>
CX 0000
: 200 <Enter>
- W <Enter>
Writing 00200 bytes
- Q <Enter>
Σε αυτό το παράδειγμα, ας ξεκινήσουμε τη μελέτη από την πρώτη γραμμή. Η εντολή DEBUG A:\BKDBR.BIN Αρχικοποιεί την εντολή εντοπισμού σφαλμάτων με τη δημιουργία ενός αρχείου στη μονάδα δισκέτας A: με το όνομα BKDBR.BIN, εάν δεν υπάρχει ήδη εκεί. Γι' αυτό λάβαμε το μήνυμα "Το αρχείο δεν βρέθηκε" στην αρχή.
Στη δεύτερη οδηγία L 100 2 0 1, η εντολή L (φόρτωση) είναι η φόρτωση του DBR της μονάδας δίσκου με εντολή. Ας μάθουμε πώς; Σε αυτήν την οδηγία, ο αριθμός 100 είναι η διεύθυνση του buffer, όπου θα αποθηκευτεί το DBR, ο επόμενος αριθμός 2 χρησιμοποιείται για τη μονάδα δίσκου C(C :). Οι αριθμοί κίνησης δίνονται ως εξής:
Drive Letter |
Number Used |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
and so on |
. |
Ο επόμενος αριθμός 0 είναι ο αριθμός αρχικού τομέα του αριθμού των τομέων προς ανάγνωση. Εδώ χρησιμοποιούμε το 0 για να διαβάσουμε τον 1ο τομέα, δηλαδή τον τομέα DBR. Ο επόμενος αριθμός που είναι 1 χρησιμοποιείται για να ενημερώσει τον αριθμό των τομέων που πρέπει να διαβαστούν.
Εδώ έχουμε δώσει 1 γιατί θέλουμε να διαβάσουμε μόνο έναν τομέα. Ωστόσο, μπορούμε να χρησιμοποιήσουμε τους αριθμούς και τις θέσεις των αρχικών και τελικών τομέων σύμφωνα με τις ανάγκες μας σε διαφορετικούς τύπους άλλων λειτουργιών. Επομένως, θα φορτώσει έναν τομέα κοιτάζοντας από τον 1ο τομέα της μονάδας δίσκου C: στη θέση μνήμης 100.
Και η εντολή R CX χρησιμοποιείται για την αλλαγή ή τον καθορισμό του μήκους των δεδομένων που θέλουμε να γράψουμε στο αρχείο BKDBR.BIN. Αυτή η οδηγία θα δείξει την τρέχουσα τιμή του καταχωρητή CX και θα σας επιτρέψει να κάνετε οποιαδήποτε αλλαγή. Πληκτρολογήσαμε 200 εδώ επειδή η εντολή DEBUG χρησιμοποιεί δεκαεξαδικό σύστημα και το μέγεθος του DBR σε δεκαεξαδικό είναι 200(h) byte δηλαδή 512 byte στο δεκαδικό σύστημα.
Η εντολή W λέει στο DEBUG να γράψει τα 200(h) byte από τη θέση 100 στο αρχείο BKDBR.BIN. Και τέλος χρησιμοποιούμε την εντολή Q για να τερματίσουμε το DEBUG και να επιστρέψουμε στη γραμμή εντολών DOS.
Προειδοποίηση!!! Προειδοποίηση!!! Προσοχή!!!
Συνιστάται αυστηρά να γνωρίζετε τι και πώς κάνετε στη διαδικασία επαναφοράς DBR οποιουδήποτε δίσκου. Εάν κατά λάθος αποθηκεύσετε το παράνομο ή το DBR οποιουδήποτε άλλου Δίσκου, είναι πιθανό στις περισσότερες περιπτώσεις τα πλήρη δεδομένα του δίσκου να μην είναι προσβάσιμα.
όταν πληκτρολογείτε την πρώτη οδηγία της κωδικοποίησης που είναι:
ΕΝΤΟΠΙΣΜΟΣ ΣΦΑΛΜΑΤΩΝ A:\BKDBR.BIN <Enter>
Το αρχείο πρέπει να βρίσκεται στη δεδομένη τοποθεσία όπου ξεκινάτε το πρόγραμμα DEBUG. Τώρα, εάν λάβετε το μήνυμα σφάλματος "Το αρχείο δεν βρέθηκε" πριν από το μήνυμα DEBUG, σταματήστε αμέσως τη διαδικασία χρησιμοποιώντας την εντολή Q (quit). Επειδή σημαίνει ότι το αρχείο BKDBR.BIN δεν μπόρεσε να βρεθεί ή να ανοίξει από το πρόγραμμα DEBUG και αν συνεχίσετε αυτή τη διαδικασία θα γραφτούν κάποιες ανεπιθύμητες πληροφορίες στο DBR και θα καταστήσει απρόσιτο το πλήρες διαμέρισμα. |
Ας δούμε τώρα τι κάναμε στην κωδικοποίηση των Οδηγιών για την επαναφορά του DBR από το αρχείο αντιγράφου ασφαλείας που δημιουργήσαμε με το όνομα BKDBR.BIN. Οι εντολές του DEBUG για την επαναφορά του αντιγράφου ασφαλείας είναι οι εξής:
C:\> DEBUG A:\BKDBR.BIN <Enter>
- W 100 2 0 1 <Enter>
- Q <Enter>
|
Αυτή η οδηγία θα γράψει 1 τομέα πληροφοριών από το αρχείο BKDBR.BIN στη μονάδα δισκέτας (a:) στη θέση μνήμης 100 στον πρώτο τομέα που είναι ο τομέας 0 της 2ης μονάδας δίσκου που είναι μονάδα δίσκου(C:).
Αποθήκευση και φόρτωση των προγραμμάτων
Δεν θα ήταν πρακτικό να πληκτρολογείτε ένα ολόκληρο πρόγραμμα κάθε φορά που χρειάζεται, και για να αποφευχθεί αυτό είναι δυνατό να αποθηκεύσετε ένα πρόγραμμα στο δίσκο, με το τεράστιο πλεονέκτημα ότι με το να είναι ήδη συναρμολογημένο δεν θα είναι απαραίτητο να εκτελεστεί Εντοπίστε ξανά σφάλματα για να το εκτελέσετε.
Τα βήματα για να αποθηκεύσετε ένα πρόγραμμα που είναι ήδη αποθηκευμένο στη μνήμη είναι:
- Λάβετε τη διάρκεια του προγράμματος αφαιρώντας την τελική διεύθυνση από την αρχική διεύθυνση, φυσικά σε δεκαεξαδικό σύστημα.
- Δώστε στο πρόγραμμα όνομα και επέκταση.
- Βάλτε τη διάρκεια του προγράμματος στον καταχωρητή CX.
- Παραγγείλετε τον εντοπισμό σφαλμάτων για να γράψετε το πρόγραμμα στο δίσκο.
Χρησιμοποιώντας το παρακάτω πρόγραμμα ως παράδειγμα, θα έχουμε μια πιο ξεκάθαρη ιδέα για το πώς να κάνουμε αυτά τα βήματα. Όταν ολοκληρωθεί η συναρμολόγηση του προγράμματος θα μοιάζει με αυτό:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010 A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-w
Γράψιμο 000A byte
Για να λάβετε τη διάρκεια ενός προγράμματος το "h" χρησιμοποιείται η εντολή, αφού θα μας δείξει την πρόσθεση και την αφαίρεση δύο αριθμών σε δεκαεξαδικό. Για να λάβουμε το μήκος του δικού μας, του δίνουμε ως παραμέτρους την τιμή της τελικής διεύθυνσης του προγράμματός μας (10A) και την αρχική διεύθυνση του προγράμματος (100). Το πρώτο αποτέλεσμα που μας δείχνει η εντολή είναι η πρόσθεση των παραμέτρων και το δεύτερο είναι η αφαίρεση.
Το "n" η εντολή μας επιτρέπει να ονομάσουμε το πρόγραμμα. Το "rcx" Η εντολή μας επιτρέπει να αλλάξουμε το περιεχόμενο του καταχωρητή CX στην τιμή που λάβαμε από το μέγεθος του αρχείου με το "h", στην περίπτωση αυτή 000a, δεδομένου ότι το αποτέλεσμα της αφαίρεσης της τελικής διεύθυνσης από την αρχική διεύθυνση.
Τέλος, το "w" Η εντολή γράφει το πρόγραμμά μας στο δίσκο, υποδεικνύοντας πόσα byte έγραψε. Επίσης, για να αποθηκεύσετε ένα ήδη φορτωμένο αρχείο απαιτούνται δύο βήματα:
- Δώστε το όνομα του αρχείου που θα φορτωθεί.
- Φορτώστε το χρησιμοποιώντας το "l" (φόρτωση) εντολή.
Για να λάβετε το σωστό αποτέλεσμα των παρακάτω βημάτων, είναι απαραίτητο το παραπάνω πρόγραμμα να έχει ήδη δημιουργηθεί.
Μέσα στον εντοπισμό σφαλμάτων γράφουμε τα εξής:
-n test.com
-l
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
Το τελευταίο "u" Η εντολή χρησιμοποιείται για να επαληθευτεί ότι το πρόγραμμα φορτώθηκε στη μνήμη. Αυτό που κάνει είναι ότι αποσυναρμολογεί τον κώδικα και τον δείχνει αποσυναρμολογημένο. Οι παράμετροι υποδεικνύουν ΕΝΤΟΠΙΣΜΟ ΣΦΑΛΜΑΤΩΝ από πού και πού να αποσυναρμολογηθεί. Το DEBUG φορτώνει πάντα τα προγράμματα στη μνήμη στη διεύθυνση 100H, διαφορετικά υποδεικνύεται.
Τμήματα
Η αρχιτεκτονική των επεξεργαστών x86 αναγκάζει τη χρήση τμημάτων μνήμης για τη διαχείριση των πληροφοριών, το μέγεθος αυτών των τμημάτων είναι 64 kb.
Ο λόγος ύπαρξης αυτών των τμημάτων είναι ότι, λαμβάνοντας υπόψη ότι το μέγιστο μέγεθος ενός αριθμού που μπορεί να διαχειριστεί ο επεξεργαστής δίνεται από μια λέξη 16 bit ή καταχωρητή, δεν θα ήταν δυνατή η πρόσβαση σε περισσότερες από 65536 τοποθεσίες μνήμης χρησιμοποιώντας μόνο έναν από αυτούς τους καταχωρητές, αλλά τώρα, εάν η μνήμη χωριστεί σε ομάδες ή τμήματα, καθεμία από 65536 τοποθεσίες, και χρησιμοποιούμε μια διεύθυνση σε έναν αποκλειστικό καταχωρητή για να βρούμε κάθε τμήμα και, στη συνέχεια, κάνουμε κάθε διεύθυνση μιας συγκεκριμένης υποδοχής με δύο καταχωρητές και είναι δυνατό να έχουμε πρόσβαση σε μια ποσότητα 4294967296 byte μνήμης.
Για να μπορεί ο συναρμολογητής να διαχειρίζεται τα δεδομένα, είναι απαραίτητο κάθε πληροφορία ή οδηγία να βρίσκεται στην περιοχή που αντιστοιχεί στα αντίστοιχα τμήματα της. Ο assembler έχει πρόσβαση σε αυτές τις πληροφορίες λαμβάνοντας υπόψη τον εντοπισμό του τμήματος, που δίνεται από τους καταχωρητές DS, ES, SS και CS και εντός του καταχωρητή τη διεύθυνση της καθορισμένης πληροφορίας. Εξαιτίας αυτού, όταν δημιουργούμε ένα πρόγραμμα χρησιμοποιώντας το Debug σε κάθε γραμμή που συγκεντρώνουμε, εμφανίζεται κάτι σαν αυτό:
1CB0:0102 MOV AX,BX
Όταν ο πρώτος αριθμός, 1CB0, αντιστοιχεί στο τμήμα μνήμης που χρησιμοποιείται, ο δεύτερος αναφέρεται στη διεύθυνση μέσα σε αυτό το τμήμα και ακολουθούν οι Οδηγίες που θα αποθηκευτούν από αυτήν τη διεύθυνση.
Το πρόγραμμα συναρμολόγησης προσαρμόζει το μέγεθος των τμημάτων λαμβάνοντας ως βάση τον αριθμό των byte που χρειάζεται κάθε συναρμολογημένη εντολή, καθώς θα ήταν σπατάλη μνήμης η χρήση ολόκληρων τμημάτων. Για παράδειγμα, εάν ένα πρόγραμμα χρειάζεται μόνο 10 kb για την αποθήκευση δεδομένων, το τμήμα δεδομένων θα είναι μόνο 10 kb και όχι τα 64 kb που μπορεί να χειριστεί.
Μετακίνηση δεδομένων
Παραθέτω εδώ μερικές Οδηγίες γλώσσας assembly για λειτουργίες δεδομένων για γνώση και διευκόλυνσή σας, όταν θα κάνουμε προγραμματισμό με τη βοήθεια διακοπών και άλλων λειτουργιών του BIOS, θα χρειαστούμε τα βασικά του.
Η λεπτομερής εισαγωγή και η ενδελεχής μελέτη της γλώσσας assembly ξεπερνούν τα όρια αυτού του βιβλίου. Αν και η γνώση των βασικών στοιχείων της συναρμολόγησης είναι απαραίτητη για να προχωρήσετε στα περαιτέρω σημαντικά κεφάλαια προγραμματισμού, ωστόσο, εάν αισθάνεστε δύσκολο να κατανοήσετε όλες τις Οδηγίες, δεν χρειάζεται να ανησυχείτε, αλλά συνιστάται να αποκτήσετε τη βασική ιδέα των Οδηγιών.
Σε οποιοδήποτε πρόγραμμα είναι απαραίτητο να μετακινήσετε τα δεδομένα στη μνήμη και στους καταχωρητές της CPU και υπάρχουν διάφοροι τρόποι για να γίνει αυτό. μπορεί να αντιγράψει δεδομένα στη μνήμη σε κάποιον καταχωρητή, από μητρώο σε καταχωρητή, από μητρώο σε στοίβα, από στοίβα σε καταχωρητή, για να μεταδώσει δεδομένα σε εξωτερικές συσκευές καθώς και αντίστροφα.
Αυτή η διακίνηση δεδομένων υπόκειται σε κανόνες και περιορισμούς. Τα παρακάτω είναι μερικά από αυτά:
- Δεν είναι δυνατή η απευθείας μεταφορά δεδομένων από μια θέση μνήμης σε άλλη. Είναι απαραίτητο να μετακινήσετε πρώτα τα δεδομένα της τοποθεσίας προέλευσης σε έναν καταχωρητή και, στη συνέχεια, από το μητρώο στην τοποθεσία προορισμού.
- Δεν είναι δυνατό να μετακινήσετε μια σταθερά απευθείας σε έναν καταχωρητή τμήματος. πρέπει πρώτα να μετακινηθεί σε έναν καταχωρητή της CPU.
- Είναι δυνατή η μετακίνηση μπλοκ δεδομένων μέσω των Οδηγιών MOVS, οι οποίες αντιγράφουν μια αλυσίδα από byte ή λέξεις. MOCSB που αντιγράφει n byte από τη μια θέση στην άλλη και το MOVSW αντιγράφει n λέξεις από τη μια θέση στην άλλη. Οι δύο τελευταίες Οδηγίες λαμβάνουν τις τιμές από τις καθορισμένες διευθύνσεις από το DS:SI ως ομάδα δεδομένων προς μετακίνηση και το ES:DI ως τη νέα τοπική προσαρμογή των δεδομένων.
Για να μετακινήσετε δεδομένα υπάρχουν επίσης δομές που ονομάζονται μπαταρίες, όπου τα δεδομένα εισάγονται με την εντολή push και εξάγονται με την εντολή pop. Σε μια στοίβα τα πρώτα δεδομένα που εισάγονται είναι τα τελευταία που μπορούμε να πάρουμε, αυτό είναι, εάν στο πρόγραμμά μας χρησιμοποιήσουμε αυτές τις Οδηγίες:
PUSH AX
PUSH BX
PUSH CX
Για να επιστρέψετε τις σωστές τιμές σε κάθε καταχωρητή τη στιγμή της λήψης τους από τη στοίβα, είναι απαραίτητο να το κάνετε με την ακόλουθη σειρά:
POP CX
POP BX
POP AX
Για την επικοινωνία με εξωτερικές συσκευές η εντολή out χρησιμοποιείται για την αποστολή πληροφοριών σε μια θύρα και η εντολή in για την ανάγνωση των πληροφοριών που λαμβάνονται από μια θύρα.
Η σύνταξη της εντολής OUT είναι:
OUT DX,AX
Όπου το DX περιέχει την τιμή της θύρας που θα χρησιμοποιηθεί για την επικοινωνία και το AX περιέχει τις πληροφορίες που θα σταλούν.
Η σύνταξη της εντολής IN είναι:
IN AX,DX
Όπου AX είναι το μητρώο όπου θα διατηρούνται οι εισερχόμενες πληροφορίες και το DX περιέχει τη διεύθυνση της θύρας από την οποία θα φτάσουν οι πληροφορίες.
Οδηγίες MOV
Χρησιμοποιείται για τη μεταφορά δεδομένων μεταξύ των κελιών μνήμης, των καταχωρητών και του συσσωρευτή. Η σύνταξη έχει ως εξής:
Προορισμός MOV, Πηγή
Οι διαφορετικές κινήσεις δεδομένων που επιτρέπονται για αυτήν την οδηγία φαίνονται στον παρακάτω πίνακα:
S. No. |
Destination |
Source |
1. |
memory |
accumulator |
2. |
accumulator |
memory |
3. |
segment register |
memory/register |
4 |
memory/register |
segment register |
5. |
Register |
register |
6. |
Register |
memory |
7. |
memory |
register |
8. |
Register |
immediate data |
9. |
memory |
immediate data |
Let us see an example:
MOV AX,0006
MOV BX,AX
MOV AX,4C00
INT 21
Αυτό το πρόγραμμα μετακινεί την τιμή του 0006H στον καταχωρητή AX, μετά μετακινεί το περιεχόμενο του AX (0006h) στον καταχωρητή BX και, τέλος, μετακινεί την τιμή 4C00h στον καταχωρητή AX για να τερματίσει την εκτέλεση με την επιλογή 4C της διακοπής 21 ωρών . Θα κάνουμε μια σύντομη εισαγωγή της διακοπής 13H και της διακοπής 21Ω αργότερα.
Διακοπές
Μια διακοπή είναι μια εγκατάσταση υλικού που αναγκάζει την CPU να αναστείλει την εκτέλεση, να αποθηκεύσει την κατάστασή της και να μεταφερθεί σε μια συγκεκριμένη τοποθεσία. Η τοποθεσία μεταφοράς καθορίζει τη διεύθυνση ενός προγράμματος που προορίζεται να αναλάβει δράση ως απόκριση στη διακοπή. Το πρόγραμμα που εκτελείται ως αποτέλεσμα της διακοπής ονομάζεται πρόγραμμα χειρισμού διακοπών.
Για παράδειγμα : εάν το DOS θέλει να στείλει κάποιες πληροφορίες στο BIOS ή το BIOS θέλει να στείλει κάποιες πληροφορίες στο σύστημα υπολογιστή, το DOS ή το BIOS δημιουργούν διακοπές. Κάθε φορά που δημιουργείται μια διακοπή, ο υπολογιστής αναστέλλει οτιδήποτε κάνει και πρώτα φροντίζει για τη λειτουργία που δημιούργησε τη διακοπή.
Κάθε συσκευή που μπορεί να δημιουργήσει διακοπές λαμβάνει έναν μοναδικό αριθμό διακοπής για να προσδιορίσει ποια συσκευή δημιουργεί αυτές τις διακοπές. Θα συζητήσουμε όλες τις συναρτήσεις και τις υποσυναρτήσεις της διακοπής 13H, τις επεκτάσεις της διακοπής 13Η και της διακοπής 21Η σε αυτό το βιβλίο.
Βασικά, οι διακοπές μπορεί να είναι των εξής τριών τύπων:
- Εσωτερικές διακοπές υλικού
- Εξωτερικές διακοπές υλικού
- Διακοπές λογισμικού
Εσωτερικές διακοπές υλικού
Οι εσωτερικές διακοπές δημιουργούνται από ορισμένα συμβάντα που εμφανίζονται κατά την εκτέλεση ενός προγράμματος. Αυτός ο τύπος διακοπών αντιμετωπίζεται στο σύνολό τους από το υλικό και δεν είναι δυνατή η τροποποίηση τους.
Ένα σαφές παράδειγμα αυτού του τύπου διακοπών είναι αυτό που πραγματοποιεί τον μετρητή του εσωτερικού ρολογιού του υπολογιστή. Το υλικό πραγματοποιεί κλήση σε αυτήν τη διακοπή πολλές φορές κατά τη διάρκεια ενός δευτερολέπτου, προκειμένου να διατηρείται η ώρα ενημερωμένη.
>
Αν και δεν μπορούμε να διαχειριστούμε άμεσα αυτήν τη διακοπή, καθώς δεν μπορούμε να ελέγξουμε τη χρονική ενημέρωση μέσω λογισμικού, ωστόσο είναι δυνατό να χρησιμοποιήσουμε τα αποτελέσματά της στον υπολογιστή προς όφελός μας.
Για παράδειγμα : για να δημιουργήσουμε ένα εικονικό ρολόι που ενημερώνεται συνεχώς, πρέπει μόνο να γράψουμε ένα πρόγραμμα που να διαβάζει την πραγματική τιμή του μετρητή και να το μεταφράσει σε μια κατανοητή μορφή για τον χρήστη.
Εξωτερικές διακοπές υλικού
Οι εξωτερικές διακοπές δημιουργούνται από περιφερειακές συσκευές, όπως πληκτρολόγια, εκτυπωτές, κάρτες επικοινωνίας κ.λπ. Δημιουργούνται επίσης από συνεπεξεργαστές. Δεν είναι δυνατή η απενεργοποίηση των εξωτερικών διακοπών.
Αυτές οι διακοπές δεν αποστέλλονται απευθείας στην CPU, αλλά αποστέλλονται σε ένα ολοκληρωμένο κύκλωμα του οποίου η λειτουργία είναι να χειρίζεται αποκλειστικά αυτού του τύπου τις διακοπές
Διακοπές λογισμικού
Οι διακοπές λογισμικού μπορούν να ενεργοποιηθούν απευθείας από τη συναρμολόγηση επικαλούμενη τον αριθμό της επιθυμητής διακοπής με την οδηγία INT.
Η χρήση των διακοπών μας βοηθά στη δημιουργία προγραμμάτων και με τη χρήση τους τα προγράμματά μας γίνονται πιο σύντομα. Είναι πιο εύκολο να τα καταλάβουμε και συνήθως έχουν καλύτερη απόδοση κυρίως λόγω του μικρότερου μεγέθους τους. Αυτός ο τύπος διακοπών μπορεί να χωριστεί σε δύο κατηγορίες: τις διακοπές DOS του λειτουργικού συστήματος και τις διακοπές του BIOS.
Η διαφορά μεταξύ των δύο είναι ότι οι διακοπές του λειτουργικού συστήματος είναι ευκολότερες στη χρήση, αλλά είναι επίσης πιο αργές, καθώς αυτές οι διακοπές χρησιμοποιούν το BIOS για να επιτύχουν τον στόχο τους, από την άλλη πλευρά, οι διακοπές του BIOS είναι πολύ πιο γρήγορες, αλλά έχουν Το μειονέκτημα ότι, εφόσον αποτελούν μέρος του υλικού, είναι πολύ συγκεκριμένα και μπορεί να διαφέρουν ανάλογα ακόμη και με τη μάρκα του κατασκευαστή του κυκλώματος.
Η επιλογή του τύπου διακοπής που θα χρησιμοποιηθεί θα εξαρτηθεί αποκλειστικά από τα χαρακτηριστικά που θέλετε να δώσετε στο πρόγραμμά σας.
Εφόσον θα χρησιμοποιήσουμε διακοπές για προγραμματισμό ανάκτησης δεδομένων με τη βοήθεια της γλώσσας C μέσω Διακοπή διακοπής με C, θα συζητήσουμε μόνο τις Επεκτάσεις Διακοπής 13Η, Επεκτάσεις Διακοπής 13Η και Διακοπή Ρουτίνες 21 Hειδικά. Δεν είναι τόσο σημαντικό να συζητήσουμε όλες τις άλλες διακοπές και τις λειτουργίες τους, επειδή στη γλώσσα C, εύκολες συναρτήσεις είναι διαθέσιμες για την εκτέλεση των περισσότερων από αυτές τις εργασίες. Ωστόσο, η γνώση του Interrupt 13H και των επεκτάσεών του είναι απαραίτητη, για τον προγραμματισμό ανάκτησης δεδομένων. |
Ας κάνουμε μια σύντομη εισαγωγή του Interrupt 20H και του Interrupt 21H. Η τιμή που είναι γραμμένη σε αγκύλες (όπως 0x20) υποδεικνύει τον τρόπο χρήσης
INT 20H ( 0x20) --> Terminate process
Call with: CS = segment address of program segment prefix
Returns: Nothing
Σχόλια:
Τερματίζει την τρέχουσα διαδικασία. Αυτή είναι μία από τις πολλές μεθόδους που μπορεί να χρησιμοποιήσει ένα πρόγραμμα για να πραγματοποιήσει μια τελική έξοδο. Μπορείτε επίσης να χρησιμοποιήσετε συναρτήσεις (00H ή 31H ή 4CH) του INT 21H ή απλά INT 27H για να εκτελέσετε μια τελική έξοδο όπου προτιμώνται γενικά οι συναρτήσεις 31H και 4CH του INT 21H επειδή επιτρέπουν τη μετάδοση ενός κωδικού επιστροφής στη γονική διαδικασία.
Συνιστάται εάν έχετε χρησιμοποιήσει File Control Blocks (FCB) για να γράψετε οποιοδήποτε αρχείο, θα πρέπει πρώτα να κλείσετε το αρχείο διαφορετικά μπορεί να χάσετε τα δεδομένα γιατί στην ενέργεια της τελικής εξόδου όλη η μνήμη που καταλήφθηκε από τη διαδικασία απελευθερώνεται, τα buffer αρχείων ξεπλένονται και τυχόν ανοιχτές λαβές για αρχεία ή συσκευές που ανήκουν στη διαδικασία κλείνουν.
Επομένως, εάν έχετε ανοιχτές λαβές για αρχείο, ενδέχεται να χάσετε τα δεδομένα.
INT 21H (0x21)
Function 00H (0x00) --> Terminate process
Call with: AH = 00H
CS = segment address of program segment prefix
Returns: Nothing
Σχόλια:
Αυτή η διακοπή τερματίζει την τρέχουσα διαδικασία. Αυτή είναι μία από τις πολλές μεθόδους που μπορεί να χρησιμοποιήσει ένα πρόγραμμα για να πραγματοποιήσει μια τελική έξοδο. Για περισσότερες πληροφορίες, ανατρέξτε στο INT 20H
INT 21H (0x21)
Function 01H (0x01) --> Character input with echo
Call with: AH = 01H
Returns: AL = 8-bit input data
Σχόλια:
Αυτή η διακοπή διαβάζει έναν χαρακτήρα από την τυπική συσκευή εισόδου, όπως το πληκτρολόγιο και τον επαναφέρει στην τυπική συσκευή εξόδου. Εάν κανένας χαρακτήρας δεν είναι έτοιμος, περιμένει μέχρι να είναι διαθέσιμος.
INT 21H (0x21)
Function 02H (0x02) --> Character output
Call with: AH = 02H
DL = 8-bit data for output
Returns: Nothing
Σχόλια:
Εξάγει έναν χαρακτήρα στην τυπική συσκευή εξόδου. Η έξοδος μπορεί να ανακατευθυνθεί. Εάν η έξοδος ανακατευθυνθεί, δεν υπάρχει τρόπος να ανιχνευθεί ο δίσκος γεμάτος.
Οι συμβολοσειρές μπορούν επίσης να σταλούν συμβολοσειρές στην οθόνη εκτελώντας μια εγγραφή (INT 21H, Συνάρτηση 40H) χρησιμοποιώντας την προκαθορισμένη λαβή για την τυπική έξοδο (0001H), εάν η έξοδος δεν έχει ανακατευθυνθεί ή έχει ληφθεί λαβή η λογική συσκευή CON .
INT 21H (0x21)
Function 03H (0x03) --> Auxiliary input
Call with: AH = 03H
Returns: AL = 8-bit input data
Σχόλια:
Διαβάζει έναν χαρακτήρα από την τυπική βοηθητική συσκευή. Η προεπιλογή είναι η πρώτη σειριακή θύρα (COM1).
Εάν η βοηθητική συσκευή στέλνει δεδομένα γρηγορότερα από ό,τι μπορεί να τα επεξεργαστεί το πρόγραμμά σας, ενδέχεται να χαθούν χαρακτήρες. Δεν υπάρχει τρόπος για ένα πρόγραμμα χρήστη να διαβάσει την κατάσταση της βοηθητικής συσκευής ή να εντοπίσει σφάλματα εισόδου/εξόδου, όπως χαμένους χαρακτήρες, μέσω αυτής της κλήσης λειτουργίας.
INT 21H (0x21)
Function 04H (0x04) --> Auxiliary output
Call with: AH = 04H
DL = 8-bit data for output
Returns: Nothing
Σχόλια:
Αυτή η λειτουργία του INT 21H εξάγει έναν χαρακτήρα στην τυπική βοηθητική συσκευή. Η προεπιλογή είναι η πρώτη σειριακή θύρα (COM1). Οι συμβολοσειρές μπορούν επίσης να σταλούν στη βοηθητική συσκευή εκτελώντας μια εγγραφή (INT 21H Function 40H) χρησιμοποιώντας την προκαθορισμένη λαβή για την τυπική βοηθητική συσκευή (00034) ή χρησιμοποιώντας μια λαβή που λαμβάνεται ανοίγοντας τη λογική συσκευή AUX.
INT 21H (0x21)
Function 05H (0x05) --> Printer output
Call with: AH = 05H
DL = 8-bit data for output
Returns: Nothing
Σχόλια:
Αυτή η λειτουργία στέλνει έναν χαρακτήρα στη συσκευή τυπικής λίστας. Η προεπιλεγμένη συσκευή είναι ο εκτυπωτής στην πρώτη παράλληλη θύρα (LPT1). Οι συμβολοσειρές μπορούν επίσης να σταλούν στον εκτυπωτή εκτελώντας μια εγγραφή (INT 21H Function 40H) χρησιμοποιώντας την προκαθορισμένη λαβή για την τυπική συσκευή εκτυπωτή (0004H) ή χρησιμοποιώντας μια λαβή που λαμβάνεται ανοίγοντας τη λογική συσκευή PRN ή LPT1.
INT 21H (0x21)
Function 06H (0x06) --> Direct console I/O
Call with: AH = 06H
DL = function requested such that,
If output request, 00H-FEH
If input request, 0FFH
Returns: Nothing, If called with DL = 00H-0FEH
If called with DL = FFH and a character is ready
Zero flag = clear
AL = 8-bit input data
If called with DL = FFH and no character is ready
Zero flag = set
Σχόλια:
Διαβάζει έναν χαρακτήρα από την τυπική συσκευή εισόδου ή γράφει έναν χαρακτήρα στην τυπική συσκευή εξόδου. Το I/O μπορεί να ανακατευθυνθεί, αλλά εάν το I/O έχει ανακατευθυνθεί, δεν υπάρχει τρόπος εντοπισμού EOF ή γεμάτος δίσκος. Αυτή η λειτουργία του INT 21H χρησιμοποιείται από προγράμματα που χρειάζονται ανάγνωση και εγγραφή όλων των δυνατών χαρακτήρων και κωδικών ελέγχου χωρίς παρεμβολές από το λειτουργικό σύστημα.
INT 21H (0x21)
Function 07H (0x07) --> Unfiltered character input
without Echo
Call with: AH = 07H
Returns: AL = 8-bit input data
Σχόλια:
Αυτή η λειτουργία διαβάζει έναν χαρακτήρα από την τυπική συσκευή εισόδου χωρίς να τον επαναφέρει στην τυπική συσκευή εξόδου.
INT 21H (0x21)
Function 08H (0x08) --> Character input without
echo
Call with: AH = 08H
Returns: AL = 8-bit input data
Σχόλια:
Αυτή η λειτουργία διαβάζει έναν χαρακτήρα από την τυπική συσκευή εισόδου χωρίς να τον επαναφέρει στην τυπική συσκευή εξόδου.
INT 21H (0x21)
Function 09H (0x09) --> Display string
Call with: AH = 09H
DS:DX = segment: offset of string
Returns: Nothing
Σχόλια:
Στέλνει μια συμβολοσειρά χαρακτήρων στην τυπική συσκευή εξόδου. Η έξοδος μπορεί να ανακατευθυνθεί. Εάν η έξοδος έχει ανακατευθυνθεί, δεν υπάρχει τρόπος να ανιχνευθεί πλήρης δίσκος. Η συμβολοσειρά μπορεί επίσης να σταλεί στην οθόνη εκτελώντας μια εγγραφή (INT 21H Function 40H) χρησιμοποιώντας την προκαθορισμένη λαβή για την τυπική έξοδο (0001H), εάν δεν έχει ανακατευθυνθεί, ή μια λαβή που λαμβάνεται ανοίγοντας τη λογική συσκευή CON.
INT 21H (0x21)
Function 0AH (0x0A or 10) --> Buffered keyboard
input
Call with: AH = 0AH
DS:DX = segment: offset of buffer
Returns: Data placed in buffer, Returns Nothing
Σχόλια:
Διαβάζει μια συμβολοσειρά byte από την τυπική συσκευή εισόδου, έως και συμπεριλαμβανομένης μιας επιστροφής μεταφοράς ASCII (0DH), και τα τοποθετεί σε μια προσωρινή μνήμη που έχει καθοριστεί από το χρήστη. Οι χαρακτήρες επαναλαμβάνονται στην τυπική συσκευή εξόδου. Το buffer που χρησιμοποιείται από τη συνάρτηση έχει την ακόλουθη μορφή:
Byte |
Contents |
0 |
Maximum number of characters to read, set by program |
1 |
Number of characters actually read (excluding carriage return), set by MS-DOS |
2+ |
String read from keyboard or standard input, terminated by a carriage return (0DH) |
INT 21H (0x21)
Function 0BH (0x0B or 11) --> Check input status
Call with: AH = 0BH
Returns: AL = 00H (if no character is available)
FFH (if at least one character is available)
Σχόλια:
Ελέγχει εάν ένας χαρακτήρας είναι διαθέσιμος από την τυπική συσκευή εισόδου, όπως το πληκτρολόγιο. Αυτή η λειτουργία είναι ισοδύναμη με το IOCTL INT 21H Function 44H Sub function 06H.
INT 21H (0x21)
Function 0CH (0x0C or 12) --> Flush input buffer
and then Input
Call with: AH = 0CH
AL = number of input to be invoked after resetting
buffer (must be 01H, 06H, 07H, 08H or 0AH)
If AL = 0AH
DS: DX = segment: offset of input buffer
Returns: If called with AL = 01H, 06H, 07H, or 08H,
AL = 8-bit input data
If called with AL= 0AH,
Nothing (data placed in buffer)
Σχόλια:
Διαγράφει το τυπικό buffer εισόδου και, στη συνέχεια, καλεί μία από τις συναρτήσεις εισαγωγής χαρακτήρων. Η είσοδος μπορεί να ανακατευθυνθεί. Ένας αριθμός συνάρτησης σε AL εκτός από 01H, 06H, 07H, 08H ή 0AH ξεπλένει το buffer εισόδου και επιστρέφει τον έλεγχο στο καλούν πρόγραμμα.
INT 21H (0x21)
Function 0DH (0x0D or 13) -> Disk reset
Call with: AH = 0DH
Returns:Nothing
Σχόλια:
Αυτή η συνάρτηση ξεπλένει όλα τα buffer αρχείων. Η συνάρτηση δεν ενημερώνει τον κατάλογο του δίσκου για αρχεία που είναι ακόμα ανοιχτά.
INT 21H (0x21)
Function 0EH (0x0E or 14) -> Select disk
Call with: AH = 0EH
DL = drive code (0 = A, 1= B, etc.)
Returns: AL = number of logical drives in system
Σχόλια:
Επιλέγει την καθορισμένη μονάδα δίσκου ως τρέχουσα ή προεπιλεγμένη, μονάδα δίσκου και επιστρέφει τον συνολικό αριθμό λογικών μονάδων δίσκου στο σύστημα.
Οι εφαρμογές θα πρέπει να περιορίζονται στα γράμματα μονάδας δίσκου A-Z (0 = A, 1 = B, κ.λπ.). Λογικές μονάδες δίσκου σημαίνει, τον συνολικό αριθμό μπλοκ συσκευών, όπως δισκέτα και μονάδες σκληρού δίσκου κ.λπ. Γενικά, μια ενιαία φυσική μονάδα σκληρού δίσκου χωρίζεται σε δύο ή περισσότερες λογικές μονάδες δίσκου.
INT 21H (0x21)
Function 0FH (0x0F or 15) -> Open file
Call with: AH = 0FH
S: DX = segment: offset of file control block
Returns: If function successful and file found
AL = 00H
And FCB filled in by MS-DOS is as follows:
Drive field (offset 00H) =1 for drive A, 2 for drive B, etc. Current block field (offset 0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Data field (offset 14H) = date stamp from directory
Time field (offset 16H) = time stamp from directory
If function unsuccessful and file not found
AL = 0FFH
Σχόλια:
Ανοίγει ένα αρχείο και το καθιστά διαθέσιμο για επακόλουθη λειτουργία ανάγνωσης/εγγραφής. Εάν το πρόγραμμα πρόκειται να χρησιμοποιήσει μέγεθος εγγραφής διαφορετικό από 128 byte, θα πρέπει να ορίσει το πεδίο μεγέθους εγγραφής στο FCB offset 0EH μετά το επιτυχές άνοιγμα του αρχείου και πριν από οποιαδήποτε άλλη λειτουργία του δίσκου.
INT 21H (0x21)
Function 10H (0x10 or 16) -> Close file
Call with: AH = 10H
DS: DX = segment: offset of file control block
Returns: If function successful (directory update successful)
AL = 00H
If function unsuccessful (file not found in directory)
AL = FFH
Σχόλια:
Χρησιμοποιείται για το κλείσιμο ενός αρχείου. Κλείνει ένα αρχείο, ξεπλένει όλα τα buffer εσωτερικού δίσκου MS-DOS που σχετίζονται με το αρχείο σε δίσκο και ενημερώνει τον κατάλογο του δίσκου εάν το αρχείο έχει τροποποιηθεί ή επεκταθεί.
INT 21H (0x21)
Function 11H (0x11 or 17) -> Find first file
Call with: AH = 11H
DS: DX = segment: offset of file control block
Returns: If function successful and matching file found
AL = 00H
Και η προσωρινή μνήμη στη διεύθυνση τρέχουσας περιοχής μεταφοράς δίσκου (DTA) συμπληρώνεται ως μη ανοιγμένο κανονικό FCB ή εκτεταμένο FCB, ανάλογα με τον τύπο FCB που εισήχθη για λειτουργία.
If function unsuccessful (no matching filename found)
AL = FFH
Σχόλια:
Αναζητά τον τρέχοντα κατάλογο στην καθορισμένη μονάδα δίσκου για ένα αντίστοιχο όνομα αρχείου. Μπορείτε να χρησιμοποιήσετε χαρακτήρες μπαλαντέρ (? και *). Αυτή η συνάρτηση επιστρέφει το πρώτο αντίστοιχο όνομα αρχείου.
INT 21H (0x21)
Function 12H (0x12 or 18) -> Find next file
Call with: AH = 12H
DS: DX = segment: offset of file control block
Returns: If function successful and matching filename found
AL = 00H
And buffer at current disk transfer area (DTA) address set up as an unopened normal FCB or extended FCB, depending on which type of FCB was originally input to INT21H function 11H
If function unsuccessful and matching filenames not found
AL = FFH
Σχόλια:
Αυτό είναι το συνοδευτικό της προηγούμενης συνάρτησης. Εάν η συνάρτηση INT 21H 11H ήταν επιτυχής, επιστρέφει το επόμενο αντίστοιχο όνομα αρχείου, εάν υπάρχει. Αυτή η συνάρτηση προϋποθέτει ότι το FCB που χρησιμοποιείται ως είσοδος έχει αρχικοποιηθεί σωστά από μια προηγούμενη κλήση στη συνάρτηση INT 21H 11H και πιθανές επακόλουθες κλήσεις στη συνάρτηση INT 21H 12H και ότι το όνομα αρχείου ή η επέκταση που αναζητείται περιείχε τουλάχιστον έναν χαρακτήρα μπαλαντέρ.
INT 21H (0x21)
Function 13H (0x13 or 19) -> Delete file
Call with: AH = 13H
DS: DX = segment: offset of file control block
Returns: If function is successful and file or files deleted
AL = 00H
If function is unsuccessful and no matching files were found or at least one matching file was read-only,
AL = FFH
Σχόλια:
Διαγράφει όλα τα αρχεία που ταιριάζουν από τον τρέχοντα κατάλογο στην προεπιλεγμένη ή καθορισμένη μονάδα δίσκου. Μπορείτε επίσης να χρησιμοποιήσετε χαρακτήρες μπαλαντέρ (? και *).
INT 21H (0x21)
Function 14H (0x14 or 20) -> Sequential read
Call with: AH = 14H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
Σχόλια:
Αυτή η συνάρτηση διαβάζει το επόμενο διαδοχικό μπλοκ δεδομένων από ένα αρχείο και, στη συνέχεια, αυξάνει κατάλληλα τον δείκτη του αρχείου. Ο αριθμός των byte δεδομένων προς ανάγνωση καθορίζεται από το πεδίο μεγέθους εγγραφής (offset 0EH) του μπλοκ ελέγχου αρχείων (FCB).
Η εγγραφή διαβάζεται στη μνήμη στη διεύθυνση τρέχουσας περιοχής μεταφοράς δίσκου (DTA), που καθορίζεται από την πιο πρόσφατη κλήση προς τη συνάρτηση INT 21H 1AH. Εάν το μέγεθος της εγγραφής και η θέση της προσωρινής μνήμης είναι τέτοια ώστε να προκύψει υπερχείλιση τμήματος ή περιτύλιξη, η συνάρτηση αποτυγχάνει με κωδικό επιστροφής 02H.
INT 21H (0x21)
Function 15H (0x15 or 21) --> Sequential write
Call with: AH = 15H
DS: DX = segment: offset of previously opened file control block
Returns: AL = 00H, if write successful
01H, if disk is file
02H, if segment wrap
Σχόλια:
Αυτή η συνάρτηση εγγράφει το επόμενο διαδοχικό μπλοκ δεδομένων σε ένα αρχείο και, στη συνέχεια, αυξάνει τον δείκτη του αρχείου κατάλληλα. Ο αριθμός των byte δεδομένων που πρόκειται να γραφτούν καθορίζεται από το πεδίο μεγέθους εγγραφής (offset 0EH) του μπλοκ ελέγχου αρχείου (FCB).
INT 21H (0x21)
Function 16H (0x16 or 22) --> Create file
Call with: AH = 16H
DS: DX = segment: offset of unopened file control block
Returns: If function is successful and file was created or truncated
AL = 00H
And FCB filled in by MS-DOS as follows:
Drive field (offset 00H) = 1 for drive A, 2 for drive B, etc.
Current block field (offset0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Date field (offset 14H) = date stamp from directory
Time field (offset 16H = time stamp from directory
If function unsuccessful (directory full)
AL = FFH
Σχόλια:
Αυτή η συνάρτηση δημιουργεί μια νέα καταχώρηση καταλόγου στον τρέχοντα κατάλογο ή περικόπτει οποιοδήποτε υπάρχον αρχείο με το ίδιο όνομα σε μηδενικό μήκος. Ανοίγει επίσης το αρχείο για επόμενες λειτουργίες ανάγνωσης/εγγραφής. Αυτή η συνάρτηση πρέπει να χρησιμοποιείται με προσοχή, επειδή ένα υπάρχον αρχείο με το καθορισμένο όνομα περικόπτεται σε μηδενικό μήκος και όλα τα δεδομένα σε αυτό το αρχείο χάνονται ανεπανόρθωτα.
INT 21H (0x21)
Function 17H (0x17 or 23) --> Rename file
Call with: AH = 17H
DS: DX = segment: offset of special file control block
Returns: If function is successful and one or more files renamed
AL = 00H
If function is unsuccessful and no matching files, or new filename matched an existing file
AL = FFH
Σχόλια:
Αυτή η συνάρτηση αλλάζει το όνομα όλων των αρχείων που ταιριάζουν στον τρέχοντα κατάλογο στο δίσκο στην καθορισμένη μονάδα δίσκου.
Μπορείτε επίσης να χρησιμοποιήσετε μπαλαντέρ με αυτό. Το ειδικό μπλοκ ελέγχου αρχείου έχει κωδικό μονάδας δίσκου, όνομα αρχείου και επέκταση στη συνηθισμένη θέση (byte 0 έως 0BH) και ένα δεύτερο όνομα αρχείου που ξεκινά 6 byte μετά το πρώτο (μετατόπιση 11 H).
INT 21H
Function 18H (0x18 or 24) --> Reserved
INT 21H (0x21)
Function 19H (0x19 or 25) --> Get current disk
Call with: AH = 19H
Returns: AL = drive code (0 for A drive, 1 for B drive etc.)
Σχόλια:
Αυτή η λειτουργία επιστρέφει τον κωδικό μονάδας δίσκου της τρέχουσας ή της προεπιλεγμένης μονάδας δίσκου.
INT 21H (0x21)
Function 1AH (0x1A or 26) --> Set DTA address
Call with: AH = 1AH
DS: DX = segment: offset of disk transfer area.
Returns: Nothing
Σχόλια:
Αυτή η συνάρτηση καθορίζει τη διεύθυνση της περιοχής μεταφοράς δίσκου (DTA) που θα χρησιμοποιηθεί για επόμενες κλήσεις λειτουργιών που σχετίζονται με FCB.
INT 21H (0x21)
Function 1BH (0x1B or 27) --> Get default drive
data
Call with: AH = 1BH
Returns: If function successful
AL = sectors per cluster
DS: DX = segment offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default drive
If function unsuccessful (invalid drive or critical error)
AL = FFH
Σχόλια:
Αυτή η συνάρτηση λαμβάνει επιλεγμένες πληροφορίες σχετικά με την προεπιλεγμένη μονάδα δίσκου και έναν δείκτη στο byte αναγνώρισης μέσων από τον πίνακα εκχώρησης αρχείων.
Το byte αναγνωριστικού πολυμέσων έχει τις ακόλουθες έννοιες:
Media Descriptor ID |
Medium |
0F0H |
3.5-inch Floppy Disk, double-sided, 18 sectors (or other) |
0F8H |
fixed disk |
0F9H |
5.25-inch Floppy Disk, double-sided, 15 sectors |
0F9H |
3.5-inch Floppy Disk, double-sided, 9 sectors |
0FCH |
5.25-inch Floppy Disk, single-sided, 9 sectors |
0FDH |
5.25-inch Floppy Disk, double-sided, 9 sectors |
0FDH |
8-inch Floppy Disk, single sided, single density |
0FEH |
5.25-inch Floppy Disk, single-sided, 8 sectors |
0FEH |
8-inch Floppy Disk, Single Sided, Single Density |
0FEH |
8-inch Floppy Disk, Double Sided, Double Density |
0FFH |
5.25-inch Floppy Disk, double-sided, 8 sectors |
INT 21H (0x21)
Function 1CH (0x1C or 28) --> Get drive data
Call with: AH = 1CH
DL = Drive Code
Returns: If function is successful
AL = sectors per cluster
DS: BX = segment: offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default or specified drive
If function is unsuccessful and invalid drive or critical error
AL = FFH
Σχόλια:
Αυτή η συνάρτηση λαμβάνει πληροφορίες εκχώρησης για την καθορισμένη μονάδα δίσκου και έναν δείκτη στο byte αναγνώρισης μέσων από τον πίνακα εκχώρησης αρχείων. Ανατρέξτε στον πίνακα byte αναγνωριστικού περιγραφής πολυμέσων, που δίνεται στο INT 21H, Λειτουργία 1BH, για πληροφορίες αναγνωριστικού μέσου.
INT 21H (0x21)
Function 1DH (0x1D or 29) --> Reserved
INT 21H (0x21)
Function 1EH (0x1E or 30) --> Reserved
INT 21H (0x21)
Function 1FH (0x1F or 31) --> Reserved
INT 21H (0x21)
Function 20H (0x20 or 32) --> Reserved
INT 21H (0x21)
Function 21H (0x21 or 33) --> Random read
Call with: AH = 21H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap, read canceled
03H if partial record read at end of
file
Σχόλια:
Αυτή η λειτουργία διαβάζει μια επιλεγμένη εγγραφή από ένα αρχείο στη μνήμη. Η εγγραφή διαβάζεται στη μνήμη στην τρέχουσα διεύθυνση της περιοχής μεταφοράς δίσκου, που καθορίζεται από την πιο πρόσφατη κλήση στη συνάρτηση INT 21H 1AH.
INT 21H (0x21)
Function 22H (0x22 or 34) --> Random write
Call with: AH = 22H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if write successful
01H if disk full
02H if segment wrap, write canceled
Σχόλια:
Αυτή η λειτουργία εγγράφει τα δεδομένα από τη μνήμη σε μια επιλεγμένη εγγραφή σε ένα αρχείο.
INT 21H (0x21)
Function 23H (0x23 or 35) --> Get file size
Call with: AH = 23H
DS: DX = segment: offset of unopened file
control block
Returns: If function is successful and matching filename found
AL = 00H
And FCB relative-record field (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record
If function is unsuccessful and no matching file found
AL = FFH
Σχόλια:
Αυτή η συνάρτηση αναζητά ένα αντίστοιχο αρχείο στον τρέχοντα κατάλογο. αν βρεθεί, ενημερώνει το FCB με το μέγεθος του αρχείου ως προς τον αριθμό των εγγραφών. Δεν υπάρχει προεπιλεγμένο μέγεθος εγγραφής για αυτήν τη λειτουργία, επομένως πρέπει να τοποθετηθεί μια κατάλληλη τιμή στο πεδίο μεγέθους εγγραφής FCB (offset 0EH) πριν καλέσετε αυτήν τη λειτουργία.
INT 21H (0x21)
Function 24H (0x24 or 36) --> Set relative record
number
Call with: AH = 24H
DS: DX = segment: offset of previously opened
file control block
Returns: AL is destroyed (other register not affected)
FCB relative-record field (offset 21H) updated
Σχόλια:
Αυτή η συνάρτηση ορίζει το πεδίο αριθμού σχετικής εγγραφής ενός μπλοκ ελέγχου αρχείου (FCB) ώστε να αντιστοιχεί στην τρέχουσα θέση αρχείου όπως καταγράφεται στο ανοιχτό FCB.
INT 21H (0x21)
Function 25H (0x25 or 37) --> Set interrupt vector
Call with: AH = 25H
AL = interrupt number
DS: DX = segment: offset of interrupt handling
routine
Returns: Nothing
Σχόλια:
Αυτή η συνάρτηση Εκκινεί ένα διάνυσμα διακοπής της CPU για να οδηγεί σε μια ρουτίνα χειρισμού διακοπών. Θα πρέπει να χρησιμοποιείται κατά προτίμηση σε σχέση με την άμεση επεξεργασία του πίνακα διανυσμάτων διακοπής από εφαρμογές με καλή συμπεριφορά.
INT 21H (0x21)
Function 26H (0x26 or 38) --> Create new Program
Segment Prefix (PSP)
Call with: AH = 26H
DX = segment: of new program segment
prefix (PSP)
Returns: Nothing
Σχόλια:
Αυτή η συνάρτηση αντιγράφει το πρόθεμα τμήματος προγράμματος (PSP) του τρέχοντος εκτελούμενου προγράμματος σε μια καθορισμένη διεύθυνση τμήματος στην ελεύθερη μνήμη και στη συνέχεια ενημερώνει το νέο PSP για να το κάνει χρησιμοποιήσιμο από άλλο πρόγραμμα.
INT 21H (0x21)
Function 27H (0x27 or 39) --> Random block read
Call with: AH = 27H
CX = number of records to read
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records read
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
CX = actual number of records read
Σχόλια:
Αυτή η λειτουργία διαβάζει μία ή περισσότερες διαδοχικές εγγραφές από ένα αρχείο στη μνήμη, ξεκινώντας από μια καθορισμένη θέση αρχείου. Εάν το μέγεθος και η θέση του buffer είναι τέτοια που θα προέκυπτε υπερχείλιση τμήματος ή περιτύλιξη, η συνάρτηση αποτυγχάνει με έναν κωδικό επιστροφής 02H και εάν μια μερική εγγραφή διαβάζεται στο τέλος του αρχείου, το υπόλοιπο της εγγραφής συμπληρώνεται με μηδενικά .
INT 21H (0x21)
Function 28H (0x28 or 40) --> Random block write
Call with: AH = 28H
CX = number of records to write
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records written
01H if disk full
02H if segment wrap
CX = actual number of records written
Σχόλια:
Αυτή η συνάρτηση γράφει μία ή περισσότερες διαδοχικές εγγραφές από τη μνήμη σε ένα αρχείο, ξεκινώντας από μια καθορισμένη θέση αρχείου. Εάν το μέγεθος και η θέση της προσωρινής μνήμης είναι τέτοια ώστε να προκύψει υπερχείλιση τμήματος ή περιτύλιξη, η συνάρτηση αποτυγχάνει με έναν κωδικό επιστροφής 02H.
INT 21H (0x21)
Function 29H (0x29 or 41) --> Parse filename
Call with: AH = 29H
AL = flags to control parsing
Bit 0 = 1, if leading separators will be
scanned off (ignored).
= 0, if leading separators will not be
scanned off
Bit 1 = 1, if drive ID byte in FCB will be
modified only if a drive was
specified in the string being parsed.
= 0, if the drive ID byte in FCB will be
modified regardless, if no drive
specifier is present in the parsed string, FCB drive code field is set to 0 (default)
Bit 2 = 1, if filename field in FCB will be
modified only if a filename is
specified in the string being parsed.
= 0, if filename field in FCB will be modified regardless, if no filename is presenting the parsed string, FCB filename is set to ASCIIZ blanks.
Bit 3 = 1, if extension field in FCB will be
modified, only if an Extension is
specified in the string being parsed.
= 0, if extension field in FCB will be
modified regardless, if no extension
is present in the parsed string, FCB
extension is set to ASCIIZ blanks
DS: SI = segment: offset of string
ES: DI = segment: offset of file control block
Returns: AL = 00H, if no wildcard characters
Encountered 01H, if parsed string
contained wildcard characters FFH,
if drive specifier invalid
DS: SI = segment: offset of first character
after parsed filename
ES: DI = segment: offset of formatted
unopened file control block
Σχόλια:
Αυτή η συνάρτηση αναλύει μια συμβολοσειρά κειμένου στα διάφορα πεδία ενός μπλοκ ελέγχου αρχείου (FCB).
Αυτή η συνάρτηση θεωρεί τους χαρακτήρες (: . ; , = + χώρο καρτέλας ) ως διαχωριστικούς χαρακτήρες και θεωρεί όλους τους χαρακτήρες ελέγχου και τους χαρακτήρες (: . .
INT 21H (0x21)
Function 2AH (0x2A or 42) --> Get day and date
Call with: AH = 2AH
Returns: CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
AL = day of the week (0 = Sunday,
1= Monday, etc.)
Σχόλια:
Αυτή η συνάρτηση λαμβάνει την ημέρα συστήματος του μήνα, την ημέρα της εβδομάδας, τον μήνα και το έτος.
INT 21H (0x21)
Function 2BH (0x2B or 43) --> Set date
Call with: AH = 2BH
CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
Returns: AL = 00H if date set successfully
FFH if date not valid (ignored)
Σχόλια:
Αυτή η λειτουργία προετοιμάζει το πρόγραμμα οδήγησης του ρολογιού του συστήματος σε μια συγκεκριμένη ημερομηνία, αλλά η ώρα του συστήματος παραμένει αμετάβλητη.
INT 21H (0x21)
Function 2CH (0x2C or 44) --> Get time
Call with: AH = 2CH
Returns: CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Σχόλια:
Χρησιμοποιείται για τη λήψη της ώρας της ημέρας από το πρόγραμμα οδήγησης ρολογιού του συστήματος σε πραγματικό χρόνο, η οποία μετατρέπεται σε ώρες, λεπτά, δευτερόλεπτα και εκατοστά των δευτερολέπτων.
INT 21H (0x21)
Function 2DH (0x2D or 45) --> Set time
Call with: AH = 2DH
CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Returns: AL = 00H, if time set successfully
FFH, if time not valid (ignored)
Σχόλια:
Αυτή η συνάρτηση αρχικοποιεί το ρολόι του συστήματος σε πραγματικό χρόνο σε μια καθορισμένη ώρα, λεπτό, δευτερόλεπτο και εκατοστό του δευτερολέπτου. Η ημερομηνία συστήματος δεν επηρεάζεται.
INT 21H (0x21)
Function 2EH (0x2E or 46) --> Set verify flag
Call with: AH = 2EH
AL = 00H, if turning off verify flag
01H, if turning on verify flag
DL = 00H
Returns: Nothing
Σχόλια:
Αυτή η λειτουργία απενεργοποιεί ή ενεργοποιεί τη σημαία του λειτουργικού συστήματος για αυτόματη επαλήθευση ανάγνωσης μετά την εγγραφή των δεδομένων. Η προεπιλεγμένη ρύθμιση της επισήμανσης επαλήθευσης είναι ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ επειδή η επαλήθευση ανάγνωσης μετά την εγγραφή επιβραδύνει τις λειτουργίες του δίσκου.
INT 21H (0x21)
Function 2FH (0x2F or 47) --> Get DTA address
Call with: AH = 2FH
Returns:ES: BX = segment: offset of disk transfer area
Σχόλια:
Αυτή η συνάρτηση λαμβάνει την τρέχουσα διεύθυνση της περιοχής μεταφοράς δίσκου (DTA) για λειτουργίες ανάγνωσης/εγγραφής αρχείων FCB.
INT 21H (0x21)
Function 30H (0x30 or 48) --> Get MS-DOS
version number
Call with: AH = 30H
AL = 00H
Returns: AL = major version number (MS-DOS 3.10=3, etc.)
AH = minor version number (MS-DOS 3.10= 0AH, etc.)
BH = Original Equipment Manufacturer’s
(OEM’s) serial number (OEM-dependent-usually 00H for IBM’s
PC-DOS, 0FFH or other values for MS-DOS)
BL: CX = 24-bit user serial number (optional, OEM-dependent)
Σχόλια:
Επιστρέφει τον αριθμό έκδοσης του κεντρικού λειτουργικού συστήματος MS-DOS.
INT 21H (0x21)
Function 31H (0x31 or 49) --> Terminate and Stay
Resident (TSR)
Call with: AH = 31H
AL = return code
DX = amount of memory in paragraphs, to reserve
Returns Nothing
Σχόλια:
Αυτή η συνάρτηση τερματίζει την εκτέλεση του τρέχοντος εκτελούμενου προγράμματος περνώντας έναν κωδικό επιστροφής στη γονική διεργασία, αλλά διατηρεί μέρος ή ολόκληρη τη μνήμη του προγράμματος έτσι ώστε να επικαλύπτεται από το επόμενο μεταβατικό πρόγραμμα που θα φορτωθεί. Αυτή η συνάρτηση θα πρέπει να χρησιμοποιείται κατά προτίμηση σε σχέση με το INT 27H επειδή υποστηρίζει CS ώστε να περιέχει το τμήμα του προθέματος τμήματος προγράμματος.
INT 21H (0x21)
Function 32H (0x32 or 50) --> Reserved
INT 21H (0x21)
Function 33H (0x33 or 51) --> Get or set break flag, get boot Drive
Call with: If getting break flag
AH = 33H
AL = 00H
If setting break flag
AH = 33H
AL = 01H
DL = 00H if turning break flag OFF
01H if turning break flag ON
If getting boot drive
AH = 33H
AL = 05H
Returns: If called with AL = 00H or 01H
DL = 00H break flag is OFF
01H break flag is ON
If called with AL = 05H
DL = boot drive (1 = A, 2 = B, etc.)
Σχόλια:
Αυτή η συνάρτηση λαμβάνει ή αλλάζει την κατάσταση της σημαίας διακοπής του λειτουργικού συστήματος, η οποία επηρεάζει τον έλεγχο Ctrl-C κατά τις κλήσεις λειτουργίας.
INT 21H (0x21)
Function 34H (0x34 or 52) --> Reserved
INT 21H (0x21)
Function 35H (0x35 or 53) --> Get interrupt vector
Call with: AH = 35H
AL = interrupt number
Returns: ES: BX = segment: offset of interrupt handler
Σχόλια:
Αυτή η συνάρτηση λαμβάνει τη διεύθυνση της τρέχουσας ρουτίνας χειρισμού διακοπών για την καθορισμένη διακοπή του μηχανήματος.
INT 21H (0x21)
Function 36H (0x36 or 54) --> Get drive allocation
Information
Call with: AH = 36H
DL = drive code (0 default, 1 = A, etc.)
Returns: If function successful
AX = sector per cluster
BX = number of available cluster
CX = bytes per sector
DX = cluster per drive
If function unsuccessful (drive invalid)
AX = FFFFH
Σχόλια:
Αυτή η λειτουργία λαμβάνει επιλεγμένες πληροφορίες σχετικά με μια μονάδα δίσκου.
Αυτή η λειτουργία είναι πολύ σημαντική για την ανάκτηση δεδομένων και τον προγραμματισμό αντιμετώπισης προβλημάτων δίσκου από τον οποίο μπορεί να υπολογιστεί η χωρητικότητα της μονάδας και ο ελεύθερος χώρος που απομένει και πολλά άλλα σημαντικά πράγματα.
INT 21H (0x21)
Function 37H (0x37 or 55) --> Reserved
INT 21H (0x21)
Function 38H (0x38 or 56) --> Get or set country
information
Call with: If getting country information
AH = 38H
AL = 0, to get current country information
1-FEH, to get information for
countries with code <255
FFH, to get information for countries
with code >=255
BX = country code, if AL = FFH
DS:DX = segment: offset of buffer for returned information
If setting current country code
AH = 38H
AL = 1-FEH, country code for countries with code <255
FFH, for countries with code >=255
BX = country code, if AL = 0FFH
DX = FFFFH
Returns:
If function is successful
Carry flag = clear
And, if getting internationalization information
BX = country code
DS: DX = segment: offset of buffer holding internationalization Information.
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η λειτουργία λαμβάνει διεθνείς πληροφορίες για την τρέχουσα ή καθορισμένη χώρα ή ορίζει τον τρέχοντα κωδικό χώρας.
INT 21H (0x21)
Function 39H (0x39 or 57) --> Create directory
Call with: AH = 39H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση δημιουργεί έναν κατάλογο χρησιμοποιώντας την καθορισμένη μονάδα δίσκου και διαδρομή.
Το ASCIIZ είναι γνωστό ως η ακολουθία χαρακτήρων ASCII που τερματίζεται σε, Null ή Zero, Byte. |
INT 21H (0x21)
Function 3AH (0x3A or 58) --> Delete directory
Call with: AH = 3AH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση καταργεί έναν κατάλογο χρησιμοποιώντας την καθορισμένη μονάδα δίσκου και διαδρομή. Εάν κάποιο στοιχείο του ονόματος διαδρομής δεν υπάρχει ή ο κατάλογος δεν είναι κενός ή η πρόσβαση έχει απαγορευτεί ή ο καθορισμένος κατάλογος είναι επίσης τρέχων κατάλογος, η λειτουργία διαγραφής του καταλόγου αποτυγχάνει.
INT 21H (0x21)
Function 3BH (0x3B or 59) --> Set current
directory
Call with: AH = 3BH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση ορίζει τον τρέχοντα ή τον προεπιλεγμένο κατάλογο χρησιμοποιώντας την καθορισμένη μονάδα δίσκου και διαδρομή. Εάν η καθορισμένη διαδρομή ή οποιοδήποτε στοιχείο της διαδρομής δεν υπάρχει, η συνάρτηση αποτυγχάνει.
INT 21H (0x21)
Function 3CH (0x3C or 60) --> Create file
Call with: AH = 3CH
CX = file attribute, where attribute
significance bits may be Combined.
Significance of bits is given in the following Table:
Bit(s) |
Significance (if set) |
0 |
Read-only |
1 |
Hidden |
2 |
System |
3 |
Volume label |
4 |
Reserved (0) |
5 |
Archive |
6 – 15 |
Reserved (0) |
DS: DX = segment: offset of ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Εάν δοθεί ένα όνομα διαδρομής ASCIIZ, αυτή η συνάρτηση δημιουργεί ένα νέο αρχείο στον καθορισμένο ή προεπιλεγμένο κατάλογο στην καθορισμένη ή προεπιλεγμένη μονάδα δίσκου. Εάν το καθορισμένο αρχείο υπάρχει ήδη, περικόπτεται σε μηδενικό μήκος. Σε κάθε περίπτωση, το αρχείο ανοίγει και επιστρέφεται μια λαβή που μπορεί να χρησιμοποιηθεί από το πρόγραμμα για μετέπειτα πρόσβαση στο αρχείο.
Εάν κάποιο στοιχείο του ονόματος διαδρομής δεν υπάρχει ή δημιουργείται αρχείο στον ριζικό κατάλογο και ο ριζικός κατάλογος είναι πλήρης ή η πρόσβαση έχει απαγορευτεί ή ένα αρχείο με χαρακτηριστικό read – only βρίσκεται ήδη στον καθορισμένο κατάλογο, η λειτουργία δημιουργίας αρχείου αποτυγχάνει .
INT 21H (0x21)
Function 3DH (0x3D or 61) --> Open file
Call with: AH = 3DH
AL = access mode
Η σημασία των bit τρόπου πρόσβασης δίνεται στον ακόλουθο πίνακα:
Bits |
Significance |
0 – 2 |
Access Mode
000 = read access
001 = write access
010 = read/write access |
3 |
Reserved (0) |
4 – 6 |
Sharing Mode
000 = compatibility mode
001 = deny all
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance flag
0 = child process inherits handle
1 = child does not inherit handle |
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Εάν δοθεί ένα όνομα διαδρομής ASCIIZ, αυτή η συνάρτηση ανοίγει το καθορισμένο αρχείο στον καθορισμένο ή προεπιλεγμένο κατάλογο στην καθορισμένη ή προεπιλεγμένη μονάδα δίσκου. Επιστρέφεται μια λαβή που μπορεί να χρησιμοποιηθεί από το πρόγραμμα για μετέπειτα πρόσβαση στο αρχείο.
INT 21H (0x21)
Function 3EH (0x3E or 62) --> Close file
Call with: AH = 3EH
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση ξεπλένει όλα τα εσωτερικά buffer που σχετίζονται με το αρχείο στο δίσκο, κλείνει το αρχείο και απελευθερώνει τη λαβή για επαναχρησιμοποίηση, προηγουμένως ανοιχτών ή δημιουργημένων με επιτυχία μιας δεδομένης λαβής. Εάν το αρχείο τροποποιήθηκε, η σφραγίδα ώρας και ημερομηνίας και το μέγεθος του αρχείου ενημερώνονται στην καταχώριση καταλόγου του αρχείου.
INT 21H (0x21)
Function 3FH (0x3F or 63) --> Read file or device
Call with: AH = 3FH
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση μεταφέρει δεδομένα στην τρέχουσα θέση δείκτη αρχείου από το αρχείο στην προσωρινή μνήμη και στη συνέχεια ενημερώνει τη θέση δείκτη αρχείου για μια δεδομένη έγκυρη λαβή αρχείου από μια προηγούμενη λειτουργία ανοίγματος ή δημιουργίας, μια διεύθυνση buffer και ένα μήκος σε byte .
INT 21H (0x21)
Function 40H (0x40 or 64) --> Write file or device
Call with: AH = 40H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση μεταφέρει δεδομένα από το buffer στο αρχείο και στη συνέχεια ενημερώνει τη θέση του δείκτη αρχείου για δεδομένη έγκυρη λαβή αρχείου από μια προηγούμενη λειτουργία ανοίγματος ή δημιουργίας, μια διεύθυνση buffer και ένα μήκος σε byte. Εάν η συνάρτηση καλείται με CX = 0, το αρχείο περικόπτεται ή επεκτείνεται στην τρέχουσα θέση δείκτη αρχείου.
INT 21H (0x21)
Function 41H (0x41 or 65) --> Delete file
Call with: AH = 41H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η λειτουργία διαγράφει ένα αρχείο από τον προεπιλεγμένο ή καθορισμένο δίσκο και κατάλογο. Η συνάρτηση διαγράφει ένα αρχείο αντικαθιστώντας τον πρώτο χαρακτήρα του ονόματος αρχείου του στον ριζικό κατάλογο με τον χαρακτήρα E5H (0xE5) και καθιστώντας τα συμπλέγματα του αρχείου διαθέσιμα για τα νέα δεδομένα στον πίνακα εκχώρησης αρχείων. Μέχρι τότε τα πραγματικά δεδομένα που είναι αποθηκευμένα σε αυτά τα συμπλέγματα δεν αντικαθίστανται.
INT 21H (0x21)
Function 42H (0x42 or 66) --> Set file pointer
Call with: AH = 42H
AL = method code
00H absolute offset from start of file
01H signed offset from current file
pointer
02H signed offset from end of file
BX = handle
CX = most significant half of offset
DX = least significant half of offset
Returns: if function is successful
Carry flag = clear
DX = most significant half of resulting file
pointer
AX = least significant half of resulting file
pointer
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση ορίζει τη θέση του δείκτη του αρχείου σε σχέση με την αρχή του αρχείου, το τέλος του αρχείου ή την τρέχουσα θέση του αρχείου.
INT 21H (0x21)
Function 43H (0x43 or 67) --> Get or set file
attributes
Call with: AH = 43H
AL = 00H to get attributes
01H to set attributes
CX = file attribute, if AL=01H. Bits can be combined
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
CX = file attribute
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση αποκτά ή αλλάζει τα χαρακτηριστικά του αρχείου (μόνο για ανάγνωση, κρυφό, σύστημα ή αρχειοθέτηση) ή καταλόγου. Για τη σημασία των δυαδικών ψηφίων για διαφορετικά χαρακτηριστικά, ανατρέξτε στον πίνακα σημασίας μπιτ που δόθηκε πριν.
INT 21H (0x21)
Function 44H (0x44 or 68) --> Input/Output
Control (I/O Ctrl)
Αυτή η λειτουργία παρέχει μια άμεση διαδρομή επικοινωνίας μεταξύ ενός προγράμματος εφαρμογής και ενός προγράμματος οδήγησης συσκευής. Επιτρέπει σε ένα πρόγραμμα να αποκτά πληροφορίες που εξαρτώνται από το υλικό και να ζητά λειτουργίες που δεν υποστηρίζονται από άλλες κλήσεις λειτουργιών MS-DOS.
Οι υποσυναρτήσεις του Ελέγχου εισόδου και εξόδου δίνονται στον παρακάτω πίνακα:
Sub function |
Operation Name |
00H |
Get Device Information |
01H |
Set Device Information |
02H |
Receive Control Data from Character Device Driver |
03H |
Send Control Data to Character Device Driver |
04H |
Receive Control Data from Block Device Driver |
05H |
Send Control Data to Block Device Driver |
06H |
Check Input Status |
07H |
Check Output Status |
08H |
Check If Block Device Is Removable |
09H |
Check If Block Device Is Remote |
0AH (10) |
Check If Handle Is Remote |
0BH (11) |
Change Sharing Retry Count |
0CH (12)
|
Generic I/O Control for Character Devices
Value |
Description |
CL = 45H |
Set Iteration Count |
CL = 4AH |
Select Code Page |
CL = 4CH |
Start Code Page Preparation |
CL = 4DH |
End Code Page Preparation |
CL = 5FH |
Set Display Information |
CL = 65H |
Get Iteration Count |
CL = 6AH |
Query Selected Code Page |
CL = 6BH |
Query Prepare List |
CL = 7FH |
Get Display Information |
|
0DH (13)
|
Generic I/O Control for Block Devices
Value |
Description |
CL = 40H |
Set Device Parameters |
CL = 41H |
Write Track |
CL = 42H |
Format and Verify Track |
CL = 47H |
Set Access Flag |
CL = 60H |
Get Device Parameters |
CL = 61H |
Read Track |
CL = 62H |
Verify Track |
CL = 67H |
Get Access Flag |
|
0EH (14) |
Get Logical Drive Map |
0FH (15) |
Set Logical Drive Map |
INT 21H (0x21)
Function 44H (0x44 or 68), sub function 00H (0x00)
I/O Ctrl --> get device information
Call with: AH = 44H
AL = 00H
BX = handle
Returns: If function successful
Carry flag = clear
DX = device information word
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η δευτερεύουσα συνάρτηση επιστρέφει μια λέξη πληροφοριών συσκευής για το αρχείο ή τη συσκευή που σχετίζεται με την καθορισμένη λαβή.
INT 21H (0x21)
Function 44H (0x44 or 68), sub function 01H (0x01)
I/O Ctrl --> set device information
Call with: AH = 44H
AL = 01H
BX = handle
DX = device information word
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η υποσυνάρτηση της συνάρτησης 44H του INT 21H, ορίζει ορισμένες σημαίες για μια λαβή που σχετίζεται με μια συσκευή χαρακτήρων. Αυτή η υποσυνάρτηση δεν μπορεί να χρησιμοποιηθεί για χειρισμό που σχετίζεται με αρχείο.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 02H (0x02)
I/O Ctrl --> read control data character device
driver
Call with: AH = 44H
AL = 02H
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function is successful
Carry flag = clear
AX = bytes read
And buffer contains control data from driver
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Διαβάζει δεδομένα ελέγχου από ένα πρόγραμμα οδήγησης συσκευής χαρακτήρων. Το μήκος και τα περιεχόμενα των δεδομένων καθορίζονται σε κάθε πρόγραμμα οδήγησης συσκευής και δεν ακολουθούν καμία τυπική μορφή. Αυτή η λειτουργία δεν οδηγεί απαραίτητα σε οποιαδήποτε είσοδο από τη φυσική συσκευή.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 03H (0x03)
I/O Ctrl --> write control data character-device
driver
Call with: AH = 44H
AL = 03H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η υποσυνάρτηση μεταφέρει δεδομένα ελέγχου από μια εφαρμογή σε πρόγραμμα οδήγησης συσκευής χαρακτήρων. Το μήκος και τα περιεχόμενα των δεδομένων είναι συγκεκριμένα για κάθε πρόγραμμα οδήγησης συσκευής και δεν ακολουθούν καμία τυπική μορφή. Αυτή η λειτουργία δεν προκύπτει απαραίτητα εάν υπάρχει έξοδος στη φυσική συσκευή.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 04H (0x04)
I/O Ctrl --> Read control data block-device driver
Call with: AH = 44H
AL = 04H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = bytes transferred
And buffer contains control data from device driver
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η δευτερεύουσα συνάρτηση μεταφέρει δεδομένα ελέγχου από ένα πρόγραμμα οδήγησης μπλοκ συσκευής απευθείας στο buffer ενός προγράμματος εφαρμογής. Το μήκος και τα περιεχόμενα των δεδομένων είναι συγκεκριμένα για κάθε πρόγραμμα οδήγησης συσκευής και δεν ακολουθούν καμία τυπική μορφή. Αυτή η λειτουργία δεν οδηγεί απαραίτητα σε είσοδο από τη φυσική συσκευή.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 05H (0x05)
I/O Ctrl --> write control data block-device driver
Call with: AH = 44H
AL = 05H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η υποσυνάρτηση μεταφέρει δεδομένα ελέγχου από ένα πρόγραμμα εφαρμογής απευθείας σε ένα πρόγραμμα οδήγησης μπλοκ συσκευής. Το μήκος και τα περιεχόμενα των δεδομένων ελέγχου είναι συγκεκριμένα για κάθε πρόγραμμα οδήγησης συσκευής και δεν ακολουθούν καμία τυπική μορφή. Αυτή η λειτουργία δεν οδηγεί απαραίτητα σε έξοδο στη φυσική συσκευή.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 06H (0x06)
I/O Ctrl --> check input status
Call with: AH = 44H
AL = 06H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = 00H, if file pointer at EOF
FFH, if file pointer not at EOF
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Επιστρέφει έναν κωδικό που υποδεικνύει εάν η συσκευή ή τα αρχεία που σχετίζονται με μια λαβή είναι έτοιμα για εισαγωγή.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 07H (0x07)
I/O Ctrl --> check output status
Call with: AH = 44H
AL = 07H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = FFH
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Επιστρέφει έναν κωδικό που υποδεικνύει εάν η συσκευή που σχετίζεται με μια λαβή είναι έτοιμη για έξοδο.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 08H (0x08)
I/O Ctrl --> check if block device is removable
Call with: AH = 44H
AL = 08H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = 00H, if medium is removable
01H, if medium is not removable
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η υποσυνάρτηση ελέγχει εάν η καθορισμένη συσκευή μπλοκ περιέχει ένα αφαιρούμενο μέσο αποθήκευσης, όπως μια δισκέτα. Εάν ένα αρχείο δεν βρεθεί όπως αναμένεται σε μια συγκεκριμένη μονάδα δίσκου, ένα πρόγραμμα μπορεί να χρησιμοποιήσει αυτήν τη δευτερεύουσα λειτουργία για να προσδιορίσει εάν θα πρέπει να ζητηθεί από τον χρήστη να εισαγάγει έναν άλλο δίσκο.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 09H (0x09)
I/O Ctrl --> check if block device is remote
Call with: AH = 44H
AL = 09H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
DX = device attribute word
bit 12 = 0, if drive is local
= 1, if drive is remote
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η δευτερεύουσα συνάρτηση ελέγχει εάν η καθορισμένη συσκευή μπλοκ είναι τοπική (συνδεδεμένη στον υπολογιστή που εκτελεί το πρόγραμμα) ή απομακρυσμένη (ανακατευθυνόμενη σε διακομιστή δικτύου).
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0AH (0x0A or 10) I/O Ctrl --> check if handle is remote
Call with: AH = 44H
AL = 0AH
BX = handle
Returns: If function successful
Carry flag = clear
DX = attribute word for file or device
bit 15 = 0 if local
1 if remote
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Ελέγχει εάν η καθορισμένη λαβή αναφέρεται σε ένα αρχείο ή συσκευή που είναι τοπικό (βρίσκεται στον υπολογιστή που εκτελεί πρόγραμμα) ή απομακρυσμένο (βρίσκεται σε διακομιστή δικτύου).
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0BH (0x0B or 11) I/O Ctrl --> change sharing retry count
Call with: AH = 44H
AL = 0BH
CX = delays per retry (default = 1)
DX = number of retries (default = 3)
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η δευτερεύουσα συνάρτηση ορίζει πόσες φορές το MS-DOS επαναλαμβάνει μια λειτουργία δίσκου μετά από αποτυχία που προκλήθηκε από παραβίαση κοινής χρήσης αρχείων προτού επιστρέψει ένα σφάλμα στη διαδικασία υποβολής αιτήματος. Αυτή η δευτερεύουσα λειτουργία δεν είναι διαθέσιμη εκτός εάν φορτωθεί η μονάδα κοινής χρήσης αρχείων.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0CH (0x0C or 12) I/O Ctrl generic I/O control for
character devices
Call with: AH = 44H
AL = 0CH
BX = handle
CH =category (major) code:
00H = unknown
01H = COM1, COM2, COM3,OR COM4
03H = CON (keyboard and display)
05H = LPT1, LPT2, OR LPT3
CL = function (minor) code:
45H = Set Iteration Count
4AH = Select Code Page
4CH = Start Code Page Preparation
4DH = End Code Page Preparation
5FH = Set Display Information
65H = Get Iteration Count
6AH = Query Selected Code Page
6BH = Query Prepare List
7FH = Get Display Information
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 65H, 6AH, 6BH or 7FH
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Παρέχει έναν μηχανισμό γενικής χρήσης για επικοινωνία μεταξύ προγραμμάτων εφαρμογών και προγραμμάτων οδήγησης συσκευών χαρακτήρων.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0DH (0x0D or 13) I/O Ctrl --> generic I/O control for block
devices
Call with: AH = 44H
AL = 0DH
BL = drive code (0 =default, 1=A, 2=B, etc.)
CH = category (major) code:
08H = disk drive
CL = function (minor) code:
40H = Set Drive Parameters
41H = Write Track
42H = Format and Verify Track
47H = Set Access Flag
60H = Get Device Parameters
61H = Read Track
62H = Verify track
67H = Get Access Flag
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 60H or 61H
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η υποσυνάρτηση παρέχει έναν μηχανισμό γενικής χρήσης για επικοινωνία μεταξύ προγραμμάτων εφαρμογών και προγραμμάτων οδήγησης μπλοκ συσκευών. Επιτρέπει σε ένα πρόγραμμα την επιθεώρηση ή την αλλαγή παραμέτρων της συσκευής για μια λογική μονάδα δίσκου και την ανάγνωση, εγγραφή, διαμόρφωση και επαλήθευση κομματιών δίσκου με τρόπο ανεξάρτητο από το υλικό.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0EH (0x0E or 14) I/O Ctrl -->> get logical drive map
Call with: AH = 44H
AL = 0EH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH logical drive code (1=A,
2=B, etc.) mapped to the block device
If function unsuccessful
Carry flag = set
AX =error code
Σχόλια:
Επιστρέφει τον λογικό κωδικό μονάδας δίσκου που χρησιμοποιήθηκε πιο πρόσφατα για πρόσβαση στην καθορισμένη μονάδα μπλοκ.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0FH (0x0F or 15) I/O Ctrl --> set logical drive map
Call with: AH = 44H
AL = 0FH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH, logical drive code (1=A,
2=B, etc.) mapped to the
block device
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η δευτερεύουσα συνάρτηση ορίζει τον επόμενο λογικό κωδικό μονάδας δίσκου που θα χρησιμοποιηθεί για την αναφορά μιας συσκευής μπλοκ.
INT 21H (0x21)
Function 45H (0x45 or 69) --> Duplicate handle
Call with: AH = 45H
BX = handle to be duplicated
Returns: If function successful
Carry flag = clear
AX = new handle
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση επιστρέφει μια νέα λαβή που αναφέρεται στην ίδια συσκευή ή αρχείο στην ίδια θέση για τη συγκεκριμένη λαβή για μια συσκευή ή αρχείο που είναι ανοιχτή αυτήν τη στιγμή.
INT 21H (0x21)
Function 46H (0x46 or 70) --> Redirect handle
Call with: AH = 46H
BX = handle for file or device
CX = handle to be redirected
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Εάν υπάρχουν δύο δεδομένες λαβές, αυτή η λειτουργία κάνει τη δεύτερη λαβή να αναφέρεται στην ίδια συσκευή ή αρχείο στην ίδια θέση με την πρώτη λαβή. Η δεύτερη λαβή στη συνέχεια λέγεται ότι ανακατευθύνεται.
INT 21H (0x21)
Function 47H (0x47 or 71) --> Get current
directory
Call with: AH = 47H
DL = drive code (0 =default, 1=A,
2=B, etc.)
DS: SI = segment: offset of 64-byte buffer
Returns: If function is successful
Carry flag = clear
And buffer is filled in with full pathname from root of current directory.
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση λαμβάνει μια συμβολοσειρά ASCIIZ που περιγράφει τη διαδρομή από τη ρίζα στον τρέχοντα κατάλογο και το όνομα αυτού του καταλόγου.
INT 21H (0x21)
Function 48H (0x48 or 72) --> Allocate memory
block
Call with: AH = 48H
BX = number of paragraphs of memory
needed
Returns: If function successful
Carry flag = clear
Ax = base segment address of allocated
block
If function unsuccessful
Carry flag = set
AX = error code
BX = size of largest available block
(paragraphs)
Σχόλια:
Εκχωρεί ένα μπλοκ μνήμης και επιστρέφει έναν δείκτη στην αρχή της εκχωρημένης περιοχής.
INT 21H (0x21)
Function 49H (0x49 or 73) --> Release memory
block
Call with: AH = 49H
ES = segment of block to be released
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η λειτουργία χρησιμοποιείται για την απελευθέρωση ενός μπλοκ μνήμης και το καθιστά διαθέσιμο για χρήση από άλλα προγράμματα. Η συνάρτηση θα αποτύχει ή μπορεί να προκαλέσει απρόβλεπτα σφάλματα συστήματος εάν το πρόγραμμα απελευθερώσει ένα μπλοκ μνήμης που δεν ανήκει σε αυτό ή η διεύθυνση τμήματος που μεταβιβάστηκε στον καταχωρητή ES δεν είναι έγκυρη διεύθυνση βάσης για ένα υπάρχον μπλοκ μνήμης.
INT 21H (0x21)
Function 4AH (0x4A or 74) --> Resize memory
block
Call with: AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
BX = maximum block size available
(paragraphs)
Σχόλια:
Αυτή η λειτουργία συρρικνώνει ή επεκτείνει δυναμικά ένα μπλοκ μνήμης, σύμφωνα με τις ανάγκες ενός προγράμματος εφαρμογής.
INT 21H (0x21)
Function 4BH (0x4B or 75) --> Execute program (EXEC)
Call with: AH = 4BH
AL = sub function
00H = Load and Execute Program
03H = Load Overlay
ES: BX = segment: offset of parameter block
DS: DX = segment: offset of ASCIIZ program
pathname
Returns: If function successful
Carry flag = clear
Registers are preserved in the usual fashion.
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η λειτουργία επιτρέπει σε ένα πρόγραμμα εφαρμογής να εκτελέσει ένα άλλο πρόγραμμα, ανακτώντας τον έλεγχο όταν ολοκληρωθεί. Μπορεί επίσης να χρησιμοποιηθεί για τη φόρτωση επικαλύψεων, αν και αυτή η χρήση είναι ασυνήθιστη.
INT 21H (0x21)
Function 4CH (0x4C or 76) --> Terminate process
with Return code
Call with: AH = 4CH
AL = return code
Returns: Nothing
Σχόλια:
Αυτή η συνάρτηση τερματίζει την τρέχουσα διαδικασία, περνώντας έναν κωδικό επιστροφής στη γονική διαδικασία. Αυτή είναι μία από τις πολλές μεθόδους που μπορεί να χρησιμοποιήσει ένα πρόγραμμα για να πραγματοποιήσει μια τελική έξοδο.
INT 21H (0x21)
Function 4DH (0x4D or 77) --> Get return code
Call with: AH = 4DH
Returns: AH = exit type
00H, if normal termination by INT 20H, INT 21H
Function 00H, or INT 21H Functions 4CH
01H if termination by user’s entry of Ctrl-C
02H if termination by critical-error handler
03H if termination by INT21H Function 31H or
INT 27H |
AL = return code passed by child process
(0 if child terminated by INT 20H,
INT 21H Function 00H, or INT 27H)
Σχόλια:
Αυτή η συνάρτηση χρησιμοποιείται από μια γονική διεργασία, μετά την επιτυχή εκτέλεση μιας κλήσης EXEC (INT 21H Function 4BH), για τη λήψη του κωδικού επιστροφής και του τύπου τερματισμού μιας θυγατρικής διεργασίας.
INT 21H (0x21)
Function 4EH (0x4E or 78) --> Find first file
Call with: AH = 4EH
CX = search attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful and matching file found
Carry flag = clear
Και τα αποτελέσματα αναζήτησης επέστρεψαν στην τρέχουσα περιοχή μεταφοράς δίσκου ως εξής:
Byte(s) |
Description |
00H-14H |
Reserved (0) |
15H |
Attribute of matched file or directory |
16H-17H |
File time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23) |
18H-19H
|
File date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980) |
1AH-1DH |
File size |
1EH-2AH |
ASCIIZ filename and extension |
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση αναζητά τον προεπιλεγμένο ή καθορισμένο κατάλογο στην προεπιλεγμένη ή καθορισμένη μονάδα δίσκου για το πρώτο αρχείο που ταιριάζει για μια δεδομένη προδιαγραφή αρχείου με τη μορφή συμβολοσειράς ASCIIZ. Για τη σημασία bit των χαρακτηριστικών, ανατρέξτε στον πίνακα σημασίας bit που δόθηκε πριν.
INT 21H (0x21)
Function 4FH (0x4F or 79) --> Find next file
Call with: AH = 4FH
Returns: If function is successful and matching file found
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Εάν έχει προηγηθεί επιτυχημένη κλήση στη συνάρτηση INT 21H 4EH, αυτή η συνάρτηση βρίσκει το επόμενο αρχείο στον προεπιλεγμένο ή καθορισμένο κατάλογο στην προεπιλεγμένη ή καθορισμένη μονάδα δίσκου που ταιριάζει με τις προδιαγραφές του αρχικού αρχείου.
INT 21H (0x21)
Function 50H (0x50 or 80) --> Reserved
INT 21H (0x21)
Function 51H (0x51 or 81) --> Reserved
INT 21H (0x21)
Function 52H (0x52 or 82) --> Reserved
INT 21H (0x21)
Function 53H (0x53 or 83) --> Reserved
INT 21H (0x21)
Function 54H (0x54 or 84) --> Get verify flag
Call with: AH = 54H
Returns: AL = current verify flag value
00H if verify off
01H if verify on
Σχόλια:
Αυτή η συνάρτηση λαμβάνει την τρέχουσα τιμή της σημαίας επαλήθευσης συστήματος (ανάγνωση-μετά-εγγραφή).
INT 21H (0x21)
Function 55H (0x55 or 85) --> Reserved
INT 21H (0x21)
Function 56H (0x56 or 86) --> Rename file
Call with: AH = 56H
DS: DX = segment: offset of current ASCIIZ
pathname
ES: DI = segment: offset of new ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση Μετονομάζει ένα αρχείο ή/και μετακινεί την καταχώρισή του σε έναν διαφορετικό στον ίδιο δίσκο. Σε εκδόσεις MS-DOS 3.0 και νεότερες, αυτή η συνάρτηση μπορεί επίσης να χρησιμοποιηθεί για μετονομασία καταλόγων
Εάν κάποιο στοιχείο του ονόματος διαδρομής δεν υπάρχει ή ένα αρχείο με το νέο όνομα διαδρομής υπάρχει ήδη ή η τρέχουσα προδιαγραφή ονόματος διαδρομής περιέχει διαφορετική μονάδα δίσκου από το νέο όνομα διαδρομής ή το αρχείο μετακινείται στον ριζικό κατάλογο και στη ρίζα Ο κατάλογος είναι γεμάτος ή ο χρήστης δεν έχει επαρκή δικαιώματα, η λειτουργία μετονομασίας αρχείων αποτυγχάνει.
INT 21H (0x21)
Function 57H (0x57 or 87) --> Get or set file date and time
Call with: If getting date and time
AH = 57H
AL = 00H
BX = handle
If setting date and time
AH = 57H
AL = 01H
BX = handle
CX = time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23)
DX = date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980)
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
CX = time
DX = date
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση λαμβάνει ή τροποποιεί τη σφραγίδα ημερομηνίας και ώρας στην καταχώρηση του ριζικού καταλόγου του αρχείου.
INT 21H (0x21)
Function 58H (0x58 or 88) --> Get or set allocation strategy
Call with: If getting strategy code
AH = 58H
AL = 00H
If setting strategy code
AH = 58H
AL = 01H
BX = desired strategy code
00H = first fit
01H = best fit
02H = last fit
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
AX = current strategy code
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Λαμβάνει ή αλλάζει τον κώδικα που υποδεικνύει την τρέχουσα στρατηγική MS-DOS για την εκχώρηση μπλοκ μνήμης. Η προεπιλεγμένη στρατηγική εκχώρησης μνήμης MS-DOS είναι First Fit (κωδικός 0).
Στην εκχώρηση μνήμης First fit, το MS-DOS αναζητά τα διαθέσιμα μπλοκ μνήμης από χαμηλή διεύθυνση σε υψηλή διεύθυνση, εκχωρώντας το πρώτο αρκετά μεγάλο ώστε να ικανοποιήσει το αίτημα εκχώρησης μπλοκ.
Σε περίπτωση στρατηγικής κατανομής Best fit, το MS-DOS αναζητά όλα τα διαθέσιμα μπλοκ μνήμης και εκχωρεί το μικρότερο διαθέσιμο μπλοκ που θα ικανοποιήσει το αίτημα, ανεξάρτητα από τη θέση του.
Στη στρατηγική εκχώρησης μνήμης Last fit, το MS-DOS αναζητά τα διαθέσιμα μπλοκ μνήμης από διευθύνσεις υψηλών σε χαμηλές διευθύνσεις, εκχωρώντας την υψηλότερη αρκετά μεγάλη ώστε να ικανοποιήσει το αίτημα εκχώρησης μπλοκ.
INT 21H (0x21)
Function 59H (0x59 or 89) --> Get extended error
Information
Call with: AH = 59H
BX = 00H
Returns: AX = extended error code
Ο πίνακας με τους κωδικούς σφαλμάτων έχει δοθεί παρακάτω:
Error Code |
Error |
01H |
function number invalid |
02H |
file not found |
03H |
path not found |
04H |
too many open files |
05H |
access denied |
06H |
handle invalid |
07H |
memory control blocks destroyed |
08H |
insufficient memory |
09H |
memory block address invalid |
0AH (10) |
environment Invalid |
0BH (11) |
format invalid |
0CH (12) |
access code invalid |
0DH (13) |
data invalid |
0EH (14) |
unknown unit |
0FH (15) |
disk drive invalid |
10H (16) |
attempted to remove current directory |
11H (17) |
not same device |
12H (18) |
no more files |
13H (19) |
disk write-protected |
14H (20) |
unknown unit |
15H (21) |
drive not ready |
16H (22) |
unknown command |
17H (23) |
data error (CRC) |
18H (24) |
bad request structure length |
19H (25) |
seek error |
1AH (26) |
unknown media type |
1BH (27) |
sector not found |
1CH (28) |
printer out of paper |
1DH (29) |
write fault |
1EH (30) |
read fault |
1FH (31) |
general failure |
20H (32) |
sharing violation |
21H (33) |
lock violation |
22H (34) |
disk change invalid |
23H (35) |
FCB unavailable |
24H (36) |
sharing buffer exceeded |
25H-31H |
reserved |
32H (50) |
unsupported network request |
33H (51) |
remote machine not listening |
34H (52) |
duplicate name on network |
35H (53) |
network name not found |
36H (54) |
network busy |
37H (55) |
device no longer exists on network |
38H (56) |
net BIOS command limit exceeded |
39H (57) |
error in network adapter hardware |
3AH (58) |
incorrect response from network |
3BH (59) |
unexpected network error |
3CH (60) |
remote adapter incompatible |
3DH (61) |
print queue full |
3EH (62) |
not enough space for print file |
3FH (63) |
print file canceled |
40H (64) |
network name deleted |
41H (65) |
network access denied |
42H (66) |
incorrect network device type |
43H (67) |
network name not found |
44H (68) |
network name limit exceeded |
45H (69) |
net BIOS session limit exceeded |
46H (70) |
file sharing temporarily paused |
47H (71) |
network request not accepted |
48H (72) |
print or disk redirection paused |
49H-4FH |
reserved |
50H (80) |
file already exists |
51H (81) |
reserved |
52H (82) |
cannot make directory |
53H (83) |
fail on INT 24H (critical error) |
54H (84) |
too many redirections |
55H (85) |
duplicate redirection |
56H (86) |
invalid password |
57H (87) |
invalid parameter |
58H (88) |
network device fault |
59H (89) |
function not supported by network |
5AH (90) |
required system component not installed |
BH = error class
01H |
if out of resource (such as storage or handles) |
02H |
if not error, but temporary situation (such as locked region in file) that can be expected to end |
03H |
if authorization problem |
04H |
if internal error in system software |
05H |
if hardware failure |
06H |
if system software failure not the fault of the active process (such as missing configuration files) |
07H |
if application program error |
08H |
if file or item not found |
09H |
if file or item of invalid type or format |
0AH (10) |
if file or item locked |
0BH (11) |
if wrong disk in drive, bad spot on disk, or storage medium problem |
0CH (12) |
if item already exists |
0DH (13) |
unknown error |
BL = recommend action
01H |
Retry reasonable number of times, then prompt user to select abort or ignore |
02H |
retry reasonable number of times with delay between retries, then prompt user to select abort or ignore |
03H |
get correct information from user (typically caused by incorrect file name or device specification) |
04H |
abort application with cleanup (i.e., terminate the program in as orderly a manner as possible: releasing locks, closing files, etc.) |
05H |
perform immediate exit without cleanup |
06H |
ignore error |
07H |
retry after user intervention to remove cause of error |
CH = error locus
01H unknown
02H block device (disk or disk emulator)
03H network
04H serial device
05H memory
ES: DI = ASCIIZ volume label of disk to
insert, if AX = 0022H (invalid disk change)
Σχόλια:
Αυτή η συνάρτηση λαμβάνει λεπτομερείς πληροφορίες σφάλματος μετά από μια προηγούμενη ανεπιτυχή κλήση λειτουργίας INT 21H, συμπεριλαμβανομένης της προτεινόμενης διορθωτικής ενέργειας.
INT 21H (0x21)
Function 5AH (0x5A or 90) --> Create temporary
file
Call with: AH = 5AH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ path
Returns: If function is successful
Carry flag = clear
AX = handle
DS: DX = segment: offset of complete ASCIIZ
pathname
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση δημιουργεί ένα αρχείο με μοναδικό όνομα, στον τρέχοντα ή καθορισμένο κατάλογο στην προεπιλεγμένη ή καθορισμένη μονάδα δίσκου και επιστρέφει μια λαβή που μπορεί να χρησιμοποιηθεί από το πρόγραμμα από το πρόγραμμα για μετέπειτα πρόσβαση στο αρχείο. Το όνομα που δημιουργήθηκε για το αρχείο επιστρέφεται επίσης σε ένα buffer που καθορίζεται από το πρόγραμμα.
Εάν κάποιο στοιχείο του ονόματος διαδρομής δεν υπάρχει ή το αρχείο δημιουργείται στον ριζικό κατάλογο και ο ριζικός κατάλογος είναι γεμάτος, η συνάρτηση αποτυγχάνει.
INT 21H (0x21)
Function 5BH (0x5B or 91) --> Create new file
Call with: AH = 5BH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function is successful
Carry flag = clear
AX = handle
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση δημιουργεί ένα αρχείο στον καθορισμένο ή προεπιλεγμένο κατάλογο στην καθορισμένη ή προεπιλεγμένη μονάδα δίσκου και επιστρέφει μια λαβή που μπορεί να χρησιμοποιηθεί από το πρόγραμμα για επακόλουθη πρόσβαση στο αρχείο για ένα δεδομένο όνομα διαδρομής ASCIIZ.
Εάν υπάρχει ήδη αρχείο με το ίδιο όνομα και διαδρομή ή οποιοδήποτε στοιχείο της καθορισμένης διαδρομής δεν υπάρχει ή το αρχείο δημιουργείται στον ριζικό κατάλογο και ο ριζικός κατάλογος είναι πλήρης ή ο χρήστης δεν έχει επαρκή δικαιώματα πρόσβασης, η λειτουργία αποτυγχάνει.
INT 21H (0x21)
Function 5CH (0x5C or 92) --> Lock or unlock file region
Call with: AH = 5CH
AL = 00H if locking region
01H if unlocking region
BX = handle
CX = high part of region offset
DX = low part of region offset
SI = high part of region length
DI = low part of region length
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η λειτουργία κλειδώνει ή ξεκλειδώνει την καθορισμένη περιοχή ενός αρχείου. Αυτή η λειτουργία δεν είναι διαθέσιμη εκτός εάν φορτωθεί η λειτουργική μονάδα κοινής χρήσης αρχείων (όπως το SHARE.EXE).
INT 21H (0x21)
Function 5DH (0x5D or 93) --> Reserved
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 00H (0x00)
--> Get machine name
Call with: AH = 5EH
AL = 00H
DS: DX = segment: offset of buffer to receive
string
Returns: If function is successful
Carry flag = clear
CH = 00H if name not defined
<> 00H if name defined
CL = netBIOS name number (if CH <> 0)
DX: DX = segment: offset of identifier (if CH <> 0)
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η υποσυνάρτηση επιστρέφει τη διεύθυνση μιας συμβολοσειράς ASCIIZ που προσδιορίζει τον τοπικό υπολογιστή. Αυτή η κλήση συνάρτησης είναι διαθέσιμη μόνο όταν εκτελείται το Δίκτυο της Microsoft.
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 02H (0x02)
--> Set printer setup string
Call with: AH = 5EH
AL = 02H
BX = redirection list index
CX = length of setup string
DS: SI = segment: offset of setup string
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η δευτερεύουσα συνάρτηση καθορίζει μια συμβολοσειρά που θα σταλεί μπροστά από όλα τα αρχεία που κατευθύνονται σε έναν συγκεκριμένο εκτυπωτή δικτύου, επιτρέποντας στους χρήστες διαφορετικών κόμβων δικτύου να καθορίσουν εξατομικευμένους τρόπους λειτουργίας στον ίδιο εκτυπωτή.
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 03H (0x03)
--> Get printer setup string
Call with: AH = 5EH
AL = 03H
BX = redirection list index
ES: DI = segment: offset of buffer to receive
setup string
Returns: If function successful
Carry flag = clear
CX = length of printer setup string
ES: DI = segment: offset of buffer to receive
setup string
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη της συμβολοσειράς ρύθμισης εκτυπωτή για έναν συγκεκριμένο εκτυπωτή δικτύου.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 02H (0x02)
--> Get redirection list entry
Call with: AH = 5FH
AL = 02H
BX = redirection list index
DS: SI = segment: offset of 16-byte buffer to
receive local device name
ES: DI = segment: offset of 128-byte buffer to
receive network name
Returns: If function successful
Carry flag = clear
BH = device status flag
Bit 0 = 0 if device valid
= 1 if not valid
BL = device type
03H, if printer
04H, if drive
CX = stored parameter value
DX = destroyed
BP = destroyed
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η υποσυνάρτηση επιτρέπει την επιθεώρηση της λίστας ανακατεύθυνσης συστήματος, η οποία συσχετίζει τοπικά λογικά ονόματα με αρχεία δικτύου, καταλόγους ή εκτυπωτές. Αυτή η κλήση συνάρτησης είναι διαθέσιμη μόνο όταν εκτελείται το Microsoft Networks και έχει φορτωθεί η λειτουργική μονάδα κοινής χρήσης αρχείων.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 03H (0x03) --> Redirect device
Call with: AH = 5FH
AL = 03H
BL = device type
03H, if printer
04H, if drive
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name, followed by ASCIIZ password
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Καθιερώνει ανακατεύθυνση σε όλο το δίκτυο συσχετίζοντας ένα όνομα τοπικής συσκευής με ένα όνομα δικτύου. Αυτή η κλήση συνάρτησης είναι διαθέσιμη μόνο όταν εκτελείται το Microsoft Networks και έχει φορτωθεί η λειτουργική μονάδα κοινής χρήσης αρχείων (SHARE.EXE).
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 04H (0x04)
--> Cancel device redirection
Call with: AH = 5FH
AL = 04H
DS: SI = segment: offset of ASCIIZ local
device name
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η υποσυνάρτηση ακυρώνει ένα προηγούμενο αίτημα ανακατεύθυνσης καταργώντας τη συσχέτιση ενός ονόματος τοπικής συσκευής με ένα όνομα δικτύου. Αυτή η κλήση συνάρτησης είναι διαθέσιμη μόνο όταν εκτελούνται τα Δίκτυα της Microsoft και έχει φορτωθεί η λειτουργική μονάδα κοινής χρήσης αρχείων, όπως το SHARE.EXE.
INT 21H (0x21)
Function 60H (0x60 or 96) --> Reserved
INT 21H (0x21)
Function 61H (0x61 or 97) --> Reserved
INT 21H (0x21)
Function 62H (0x62 or 98) --> Get Program Segment
Prefix (PSP) address
Call with: AH = 62H
Returns: BX = segment address of program segment
prefix
Σχόλια:
Αυτή η συνάρτηση λαμβάνει τη διεύθυνση τμήματος (παραγράφου) του Προθέματος τμήματος προγράμματος (PSP) για το τρέχον πρόγραμμα που εκτελείται.
INT 21H (0x21)
Function 64H (0x64 or 100) --> Reserved
INT 21H
Function 65H (0x65 or 101) --> Get extended
country Information
Call with: AH = 65H
AL = sub function
00H = Get General
Internationalization Information
02H = Get Pointer to Uppercase
Table
04H = Get Pointer to Filename
Uppercase Table
06H = Get Pointer to Collating Table
07H = Get Pointer to Double-Byte
Character Set (DBCS) Vector
BX = code page of interest (-1 = active
CON device)
CX = length of buffer to receive
information (must be >=5)
DX = country ID (-1 = default)
ES: DI = address of buffer to receive
information
Returns: If function successful
Carry flag = clear
And requested data placed in calling program’s buffer
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτό λαμβάνει πληροφορίες σχετικά με την καθορισμένη χώρα ή/και κωδικοσελίδα. Ανατρέξτε στον πίνακα διεθνοποίησης που δόθηκε πριν για να μάθετε σχετικά με τα byte πληροφοριών.
INT 21H (0x21)
Function 66H (0x66 or 102) --> Get or set code
page
Call with: AH = 66H
AL = sub function
01H = Get Code Page
02H = Select Code Page
BX = code page to select, if AL = 02H
Returns: If function is successful
Carry flag = clear
And, if called with AL = 01H
BX = active code page
DX = default code page
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση λαμβάνει ή επιλέγει την τρέχουσα κωδικοσελίδα.
INT 21H (0x21)
Function 67H (0x67 or 103) --> Set handle count
Call with: AH = 67H
BX = number of desired handles
Returns: If function is successful
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση ορίζει τον μέγιστο αριθμό αρχείων και συσκευών που μπορούν να ανοίγουν ταυτόχρονα χρησιμοποιώντας λαβές από την τρέχουσα διαδικασία.
INT 21H (0x21)
Function 68H (0x68 or 104) --> Commit file
Call with: AH = 68H
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση αναγκάζει όλα τα δεδομένα σε εσωτερικά buffer του MS DOS που σχετίζονται με μια καθορισμένη λαβή να εγγραφούν φυσικά στη συσκευή. Εάν η λαβή αναφέρεται σε ένα αρχείο και το αρχείο έχει τροποποιηθεί, η σφραγίδα ώρας και ημερομηνίας και το μέγεθος του αρχείου στην καταχώριση ριζικού καταλόγου του αρχείου ενημερώνονται.
INT 21H (0x21)
Function 69H (0x69 or 105) --> Reserved
INT 21H (0x21)
Function 6AH (0x6A or 106) --> Reserved
INT 21H (0x21)
Function 6BH (0x6B or 107) --> Reserved
INT 21H (0x21)
Function 6CH (0x6C or 108) --> Extended open file
Call with: AH = 6CH
AL = 00H
BX = open mode
Bit(s) |
Significance |
0-2 |
Access type
000 = read-only
001 = write-only
010 = read/write |
3 |
Reserved (0) |
4-6 |
Sharing mode
000 = compatibility
001 = deny read/write (deny all)
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance
0 = child process inherits handle
1 = child does not inherit handle |
8-12 |
Reserved (0) |
13 |
Critical error handling
0 = execute INT 24H
1 = return error to process |
14 |
Write-through
0 = writes may be buffered and deferred
1 = physical write at request time |
15 |
Reserved (0) |
CX = file attribute (bits may be combined;
if ignored if openrefer Bits Significance table.
DX = open flag
Bit(s) |
Significance |
0-3 |
Action if file exists
0000 = fail
0001 = open file
0010 = replace file |
4-7 |
Action if file does not exists
0000 = fail
0001 = create file |
8-15 |
Reserved (0) |
DS: SI = segment: offset of ASCIIZ pathname
Returns:mIf function successful
Carry flag = clear
AX = handle
CX = action taken
1 = file existed and was
opened
2 = file did not exists and
was created
3 = file existed and was
replaced
If function unsuccessful
Carry flag = set
AX = error code
Σχόλια:
Αυτή η συνάρτηση ανοίγει, δημιουργεί ή αντικαθιστά ένα αρχείο στον καθορισμένο ή προεπιλεγμένο κατάλογο στην καθορισμένη ή προεπιλεγμένη μονάδα δίσκου για ένα δεδομένο όνομα διαδρομής ASCIIZ και επιστρέφει μια λαβή που μπορεί να χρησιμοποιηθεί από το πρόγραμμα για επακόλουθη πρόσβαση στο αρχείο.
Εάν κάποιο στοιχείο του ονόματος διαδρομής δεν υπάρχει ή το αρχείο δημιουργείται στον ριζικό κατάλογο και ο ριζικός κατάλογος είναι πλήρης ή το αρχείο δημιουργείται και ένα αρχείο με το ίδιο όνομα και το χαρακτηριστικό μόνο για ανάγνωση υπάρχει ήδη στο στον καθορισμένο κατάλογο ή ο χρήστης δεν έχει επαρκή δικαιώματα πρόσβασης, η λειτουργία αποτυγχάνει.
Σελίδα Τροποποιήθηκε στις: 10/01/2022