Kapitel – 6
Einführung in die Computergrundlagen
Einführung
Manchmal, in manchen Fällen, wenn Sie versuchen, Daten wiederherzustellen oder eine Daten- und Festplatten-Fehlerbehebungsaufgabe durchführen (oder es kann sich um jede andere systembezogene Aufgabe handeln), ist es sehr praktisch, den Befehl DEBUG DOC zu verwenden.
Es ist auch möglich, dass Sie es in einigen Sonderfällen einfacher finden, diese bestimmte Aufgabe mit DEBUG statt mit Programmierung zu erledigen. Schauen wir uns ein Beispiel an. Der folgende Debug-Code reicht aus, um ein DBR-Backup zu erstellen. Geben Sie einfach die folgenden Zeilen ein:
DEBUGGING VON BKDBR.BIN
L 100 2 0 1
R SCH
200
IN
IN
Hier sehen Sie, dass Sie durch die Eingabe einiger Zeilen oben das Schreiben eines Programms vermeiden können. Schauen wir uns ein weiteres Codebeispiel an, das ein DBR-Backup auf die Festplatte lädt
Immer daran denken! Versuchen Sie nicht, dies zu tun, ohne sich dessen vollständig bewusst zu sein. Seien Sie sich sicher, was Sie tun werden. Eine unvorsichtige Befolgung der folgenden Anweisungen kann zu einem erheblichen Datenverlust führen, da eine falsche Befolgung der Anweisungen dazu führen kann, dass auf alle Ihre Informationen auf der Festplatte nicht mehr zugegriffen werden kann.
DEBUGGING VON BKDBR.BIN
In 100 2 0 1
IN
Nachdem Sie den Code dieses Beispiels gesehen haben, können Sie leicht erraten, wie sehr es Ihnen helfen kann, wenn Sie es am meisten brauchen. Darüber hinaus ist es unmöglich, für jede Situation zu programmieren. Um die Build-Anweisungen in einfachen Problemfällen zu verwenden, müssen Sie jedoch nur debug.exe/debug.com auf die Startdiskette kopieren und mit dem Schreiben des Codes beginnen.
Die in diesem Kapitel und in diesem Buch beschriebenen Funktionen und Beispiele sind nur mit der Architektur der Intel x86-Prozessorfamilie kompatibel.
Zunächst müssen wir ein wenig über die Grundlagen der Computerarchitektur wissen, damit wir die Begriffe verstehen, die in den folgenden Abschnitten bei der Beschreibung der Funktionsweise und der Beispiele in den verschiedenen Phasen verwendet werden. Lernen wir einige Grundlagen der Computerarchitektur:
Grundlegendes Konzept
CPU
Dieser Teil wird auch als zentrale Verarbeitungseinheit oder CPU bezeichnet und besteht wiederum aus einer Steuereinheit und einer Recheneinheit. Zu seinen Funktionen gehören das Lesen und Schreiben des Inhalts von Speicherzellen, das Übertragen von Daten zwischen Speicherzellen und Sonderregistern sowie das Dekodieren und Ausführen von Programmbefehlen. Der Prozessor verfügt über eine Reihe von Speicherzellen, die besonders häufig genutzt werden und somit Bestandteil der CPU sind.
Diese Zellen werden als Register bezeichnet. Ein Prozessor kann ein oder zwei Dutzend solcher Register haben. Die arithmetisch-logische Einheit der CPU führt Operationen im Zusammenhang mit numerischen und symbolischen Berechnungen aus.
Normalerweise können diese Geräte nur sehr grundlegende Operationen ausführen, etwa das Addieren und Subtrahieren zweier Ganzzahlen, das Multiplizieren und Dividieren ganzer Zahlen, das Bearbeiten von Registerbits und das Vergleichen des Inhalts zweier Register. Personalcomputer können nach der sogenannten Wortgröße klassifiziert werden. Dabei handelt es sich um die Anzahl der Bits, die der Prozessor gleichzeitig verarbeiten kann.
Zentralspeicher
Es handelt sich dabei um eine Gruppe von Zellen aus Halbleitern, die für allgemeine Prozesse wie die Ausführung von Programmen und die Speicherung von Informationen für Vorgänge verwendet werden. Jede dieser Zellen kann einen numerischen Wert enthalten und sie haben die Eigenschaft, gerichtet zu sein. Dadurch können sie sich voneinander unterscheiden, indem sie für jede Zelle eine eindeutige Nummer oder Adresse verwenden. Der allgemeine Name dieser Speichergeräte lautet Random Access Memory oder RAM.
Der Hauptnachteil dieses Speichertyps besteht darin, dass integrierte Schaltkreise gespeicherte Informationen verlieren, wenn die Stromversorgung unterbrochen wird. Dadurch entstand ein Speicher, dessen Informationen auch beim Ausschalten des Systems nicht verloren gehen. Dieser Speicher wird als Read Only Memory oder ROM bezeichnet.
Damit ein Computer Informationen verarbeiten kann, müssen diese Informationen in speziellen Zellen, sogenannten Registern, gespeichert werden. Die Register sind Gruppen von 8 oder 16 Flip-Flops.
Ein Flipflop ist ein Gerät, das zwei Spannungsniveaus speichern kann, ein niedriges, normalerweise 0,5 Volt, und ein anderes, normalerweise 5 Volt. Das niedrige Energieniveau im Flipflop wird als Aus oder 0 interpretiert, und das hohe Niveau als Ein oder
- Diese Zustände werden allgemein als Bits bezeichnet und stellen die kleinste Informationseinheit eines Computers dar.
Eine Gruppe von 16 Bits wird als Wort bezeichnet; ein Wort kann in Gruppen von 8 Bits, sogenannte Bytes, unterteilt werden, und die Gruppen von 4 Bits werden als Nibbles bezeichnet.
CPU-Register
Die CPU hat 4 interne Register mit jeweils 16 Bit. Die ersten vier, AX, BX, CX und DX, sind Register für den allgemeinen Gebrauch und können auch als 8-Bit-Register verwendet werden. In diesem Fall müssen sie beispielsweise wie folgt bezeichnet werden: AH und AL, die die hohen und niedrigen Bytes des AX-Registers sind. Diese Nomenklatur gilt auch für die Register BX, CX und DX.
Die unter ihren spezifischen Namen bekannten Register:
Registrieren |
Spezifischer Name |
AXT |
Akkumulator |
BX |
Basisregister |
Kundenerfahrung |
Zählregister |
DX |
Datenregister |
DS |
Datensegmentregister |
IST |
Zusätzliches Segmentregister |
SS |
Batteriesegmentregister |
ES |
Codesegmentregister |
Blutdruck |
Basiszeigerregister |
UND |
Quellindexregister |
AUS |
Zielindexregister |
SP |
Batteriezeigerregister |
IP |
Nächstes Befehlszeigerregister |
F |
Flaggenregister |
Wir werden diese Register in den nächsten Kapiteln jedoch ausführlich bei der Interrupt-Programmierung in C verwenden. Es wäre jedoch ideal, hier die Grundlagen der Assemblersprache zu lernen, und dies wird uns bei der Programmierung von Festplattenoperationen usw. helfen.
Mit dem Debug-Programm können Sie die Werte der internen Register der CPU visualisieren. Um mit Debug zu arbeiten, geben Sie die folgende Eingabeaufforderung in Ihren Computer ein:
C:/>Debug <Eingabe>
In der nächsten Zeile wird ein Bindestrich angezeigt. Dies ist der Indikator für Debug. Jetzt können die Debug-Anweisungen mit dem folgenden Befehl eingegeben werden:
- r <Eingabe>
Der gesamte Inhalt der internen Register der CPU wird angezeigt. Alternativ können Sie den Befehl „r“ verwenden und als Parameter den Namen des Registers verwenden, dessen Wert angezeigt werden soll. Beispiel:
-rbx <Eingabe>
Dieser Befehl zeigt nur den Inhalt des BX-Registers an und der Debug-Indikator ändert sich von "-" zu ":"
Bei einer solchen Eingabeaufforderung ist es möglich, den angezeigten Registerwert durch Eingabe des neuen Werts und Drücken der <Eingabe>-Taste zu ändern. Alternativ kann der alte Wert beibehalten werden, indem die Eingabetaste gedrückt wird, ohne einen anderen Wert einzugeben.
Es ist möglich, den Wert des Flag-Registers zu ändern und es als Kontrollstruktur in unseren Programmen zu verwenden, wie wir später sehen werden. Jedes Bit des Registers hat einen speziellen Namen und eine spezielle Bedeutung. Die folgende Liste beschreibt den Wert jedes Bits (ein oder aus) und seine Beziehung zu den Operationen des Prozessors:
Überlauf
NV = es gibt keinen Überlauf
OV = es liegt ein Überlauf vor
Richtung
UP = vorwärts
DN = rückwärts
Unterbrechungen
DI = deaktiviert
EI = aktiviert
Zeichen
PL = positiv
NG = negativ
Null
NZ = es ist nicht Null
ZR = es ist Null
Hilfstrage
NA = es gibt keinen Hilfsübertrag
AC = es gibt einen Hilfsübertrag
Parität
PO = ungleichmäßige Parität
PE = gerade Parität
Tragen
NC = es gibt keinen Übertrag
CY = es gibt Carry
Assemblerstruktur
In Assemblersprache bestehen Codezeilen aus zwei Teilen. Der erste Teil ist der Name der Anweisung, die ausgeführt werden soll, und der zweite Teil sind die Parameter des Befehls. Beispiel:
ADD ah, bh
Dabei ist „ADD“ der auszuführende Befehl, in diesem Fall eine Addition, und „ah“ sowie „bh“ sind die Parameter.
Der Name der Anweisungen in der Sprache besteht aus zwei, drei oder vier Buchstaben. Diese Anweisungen werden auch mnemonische Namen oder Operationscodes genannt, da sie eine Funktion darstellen, die der Prozessor ausführen wird. Es gibt einige Befehle, die für ihre Ausführung keine Parameter benötigen, und andere, die nur einen Parameter erfordern.
Manchmal werden Anweisungen wie folgt verwendet:
ADD al,[170]
Die Klammern im zweiten Parameter zeigen uns an, dass wir mit dem Inhalt der Speicherzelle Nummer 170 arbeiten werden und nicht mit dem Wert 170; dies wird als direkte Richtung bezeichnet.
Jetzt sind wir bereit, mit Hilfe von Debug unser erstes Programm zu codieren. Wir werden ein Programm erstellen, das veranschaulicht, was wir gesehen haben, und wir werden zwei Werte hinzufügen, die wir direkt in das Programm einführen.
Der erste Schritt besteht darin, das Debuggen zu starten. Dieser Schritt besteht lediglich aus der Eingabe von debug <Enter> in der Eingabeaufforderung des Betriebssystems.
Um ein Programm auf dem Debug zu assemblieren, wird der Befehl „a“ (assemble) verwendet. Wenn dieser Befehl verwendet wird, kann die Adresse, an der die Assemblierung beginnen soll, als Parameter angegeben werden. Wenn der Parameter weggelassen wird, wird die Assemblierung an der durch CS:IP angegebenen Stelle eingeleitet, normalerweise 0100h. Dies ist die Stelle, an der Programme mit der Erweiterung .COM eingeleitet werden müssen. Und dies ist der Ort, den wir verwenden werden, da nur Debug diesen speziellen Programmtyp erstellen kann.
Obwohl es im Moment nicht notwendig ist, dem Befehl „a“ einen Parameter zu geben, ist es empfehlenswert, dies zu tun, um Probleme bei der Verwendung der CS:IP-Register zu vermeiden. Daher geben wir ein:
-a0100 <Eingabe>
Wenn dies erledigt ist, erscheint etwa Folgendes auf dem Bildschirm: 0C1B:0100 und der Cursor befindet sich rechts neben diesen Zahlen. Beachten Sie, dass die ersten vier Ziffern im Hexadezimalsystem unterschiedlich sein können, die letzten vier jedoch 0100 sein müssen, da dies die Adresse ist, die wir als Anfang angegeben haben. Jetzt können wir die Anweisungen eingeben:
0C1B:0100 mov ax,0002; setzt den Wert 0002 in das Axt-Register
0C1B:0103 mov bx,0004; setzt den Wert 0004 in das bx-Register
0C1B:0106 add ax,bx; der Inhalt von bx wird zum Inhalt von ax addiert
0C1B:0108 int 20; führt zum Abbruch des Programms.
0C1B:010A
Es ist nicht notwendig, die Kommentare nach dem ";" zu schreiben. Sobald der letzte Befehl eingegeben wurde, int 20, wird <Enter> gedrückt, ohne etwas weiter zu schreiben, um die Debugger-Eingabeaufforderung erneut anzuzeigen.
Bei der letzten geschriebenen Zeile handelt es sich nicht genau um einen Assemblerbefehl, sondern um den Aufruf einer Betriebssystemunterbrechung. Diese Unterbrechungen ersparen uns viele Zeilen und sind sehr nützlich, um auf Betriebssystemfunktionen zuzugreifen.
Um das von uns geschriebene Programm auszuführen, verwenden wir den Befehl „g“. Bei der Verwendung wird die folgende Meldung angezeigt:
"Programm normal beendet". Natürlich können wir bei einer solchen Meldung nicht sicher sein, dass das Programm die Addition durchgeführt hat, aber es gibt eine einfache Möglichkeit, dies zu überprüfen. Mit dem Debug-Befehl "r" können wir den Inhalt aller Register des Prozessors sehen. Geben Sie einfach Folgendes ein:
-r <Eingabe>
Jedes Register mit seinem jeweiligen Istwert wird auf dem Bildschirm folgendermaßen angezeigt:
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 VON DB
Es besteht die Möglichkeit, dass die Register unterschiedliche Werte enthalten, aber AX und BX müssen gleich sein, da es sich um diejenigen handelt, die wir gerade geändert haben.
Eine andere Möglichkeit, die Werte während der Programmausführung anzuzeigen, besteht darin, die Adresse zu verwenden, an der die Ausführung enden soll, und die Werte der Register als Parameter für „g“ anzuzeigen. In diesem Fall wäre dies: g108. Dieser Befehl führt das Programm aus, stoppt bei Adresse 108 und zeigt den Inhalt der Register an.
Mit dem Befehl „t“ (trace) können Sie verfolgen, was in den Registern passiert. Die Funktion dieses Befehls besteht darin, das Zusammengestellte zeilenweise auszuführen und dabei jedes Mal den Inhalt der Register anzuzeigen.
Um das Debuggen zu beenden, verwenden Sie den Befehl „q“ (quit).
Vorteile des Assemblers
Der erste Grund, mit Assembler zu arbeiten, besteht darin, dass Sie dadurch mehr über die Funktionsweise Ihres PCs erfahren und so einheitlicher Software entwickeln können.
Der zweite Grund ist die vollständige Kontrolle über den Computer, die Sie mit dem Einsatz von Assembler haben. Ein weiterer Grund ist, dass die auf Assembler basierenden Programme schneller und in manchen Fällen kleiner sind und größere Kapazitäten haben als die, die mit anderen Sprachen erstellt wurden.
Lass mich mein Versprechen halten!!
Im ersten Teil dieses Kapitels haben wir einige Anweisungen als Beispiel verwendet, um eine Sicherungskopie des DBR zu erstellen und die Sicherungskopie des DBR bei Bedarf an ihren ursprünglichen Speicherort zu laden. Zuerst untersuchen wir die Anweisung zum Erstellen der Sicherungskopie.
C:\>DEBUG A:\BKDBR.BIN <Eingabe>
Datei nicht gefunden
- L 100 2 0 1 <Eingabe>
- R CX <Eingabe>
CX 0000
: 200 <Eingabe>
- W <Eingabe>
Schreiben von 00200 Bytes
- Q <Eingabe>
In diesem Beispiel beginnen wir mit der Untersuchung ab der ersten Zeile. Der Befehl DEBUG A:\BKDBR.BIN initialisiert den Debug-Befehl, indem er eine Datei mit dem Namen BKDBR.BIN im Diskettenlaufwerk A: erstellt, falls sie dort noch nicht vorhanden ist. Deshalb erhalten wir am Anfang die Meldung „Datei nicht gefunden“.
In unserem zweiten Befehl L 100 2 0 1 dient der Befehl L (Laden) dazu, den DBR des angewiesenen Laufwerks zu laden. Lassen Sie uns lernen, wie das geht. In diesem Befehl ist die Nummer 100 die Adresse des Puffers, in dem der DBR gespeichert wird, die nächste Nummer 2 wird für das Laufwerk C(C :)) verwendet. Die Laufwerksnummern werden wie folgt angegeben:
Laufwerksbuchstabe |
Verwendete Nummer |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
und so weiter |
. |
Die nächste Zahl 0 ist die Startsektornummer der Anzahl der zu lesenden Sektoren. Hier verwenden wir 0, um den 1. Sektor, also den DBR-Sektor, zu lesen. Die nächste Zahl, 1, wird verwendet, um die Anzahl der zu lesenden Sektoren anzugeben.
Hier haben wir 1 angegeben, da wir nur einen Sektor lesen möchten. Wir können die Nummern und Positionen der Start- und Endsektoren jedoch je nach Bedarf in verschiedenen anderen Arten von Vorgängen verwenden. Daher wird ein Sektor geladen, beginnend beim 1. Sektor des Laufwerks C: bis zum Speicherplatz 100.
Und der R CX-Befehl wird verwendet, um die Länge der Daten zu ändern oder zu definieren, die wir in die Datei BKDBR.BIN schreiben möchten. Dieser Befehl zeigt den aktuellen Wert des CX-Registers an und ermöglicht Ihnen, beliebige Änderungen vorzunehmen. Wir haben hier 200 eingegeben, weil der DEBUG-Befehl das Hexadezimalsystem verwendet und die Größe von DBR im Hexadezimalsystem 200(h) Bytes beträgt, also 512 Bytes im Dezimalsystem.
Der Befehl W weist den DEBUG an, die 200(h) Bytes von Position 100 in die Datei BKDBR.BIN zu schreiben. Und schließlich verwenden wir den Befehl Q, um den DEBUG zu beenden und zur DOS-Eingabeaufforderung zurückzukehren.
Warnung!!! Warnung!!! Warnung!!!
Es wird dringend empfohlen, dass Sie wissen, was und wie Sie beim Wiederherstellen des DBR einer Festplatte vorgehen. Wenn Sie versehentlich den ungültigen oder DBR einer anderen Festplatte speichern, ist es in den meisten Fällen möglich, dass auf die gesamten Daten der Festplatte nicht mehr zugegriffen werden kann.
wenn Sie die erste Anweisung der Kodierung eingeben, nämlich:
DEBUG A:\BKDBR.BIN <Eingabe>
Die Datei muss sich an dem angegebenen Speicherort befinden, an dem Sie das DEBUG-Programm starten. Wenn Sie jetzt vor der DEBUG-Eingabeaufforderung die Fehlermeldung „Datei nicht gefunden“ erhalten, stoppen Sie den Vorgang sofort mit dem Befehl Q (quit). Dies bedeutet nämlich, dass die Datei BKDBR.BIN vom DEBUG-Programm nicht gefunden oder geöffnet werden konnte. Wenn Sie diesen Vorgang fortsetzen, werden einige Junk-Informationen auf DBR geschrieben und die gesamte Partition wird unzugänglich. |
Sehen wir uns nun an, was wir bei der Codierung der Anweisungen zum Wiederherstellen des DBR aus der von uns erstellten Sicherungsdatei mit dem Namen BKDBR.BIN getan haben. Die Befehle von DEBUG zum Wiederherstellen der Sicherung lauten wie folgt:
C:\> DEBUG A:\BKDBR.BIN <Eingabe>
- W 100 2 0 1 <Eingabe>
- Q <Eingabe>
|
Dieser Befehl schreibt 1 Sektor mit Informationen aus der Datei BKDBR.BIN im Diskettenlaufwerk (a:) im Speicherplatz 100 in den ersten Sektor, also Sektor 0 des zweiten Laufwerks, also Laufwerk (C:).
Speichern und Laden der Programme
Es erscheint unpraktisch, bei jedem Bedarf ein ganzes Programm einzugeben. Um dies zu vermeiden, kann man ein Programm auf der Festplatte speichern. Dies hat den enormen Vorteil, dass es, da es bereits zusammengestellt ist, nicht erneut ausgeführt werden muss, um es auszuführen.
Die Schritte zum Speichern eines bereits im Speicher abgelegten Programms sind:
- Die Länge des Programms ermitteln Sie, indem Sie die Endadresse von der Anfangsadresse abziehen, natürlich im Hexadezimalsystem.
- Geben Sie dem Programm einen Namen und eine Erweiterung.
- Tragen Sie die Länge des Programms in das CX-Register ein.
- Befehlen Sie Debug, das Programm auf die Festplatte zu schreiben.
Anhand des folgenden Programms als Beispiel können wir uns besser vorstellen, wie diese Schritte durchgeführt werden. Wenn das Programm fertig zusammengestellt ist, sieht es folgendermaßen aus:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 Axt, Bx hinzufügen
0C1B:0108 du bist 20
0C1B:010A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-In
Schreiben von 000A Bytes
Um die Länge eines Programms zu ermitteln, wird der Befehl „h“ verwendet, da er uns die Addition und Subtraktion zweier Zahlen im Hexadezimalformat anzeigt. Um die Länge unseres Programms zu ermitteln, geben wir als Parameter den Wert der Endadresse unseres Programms (10A) und die Anfangsadresse des Programms (100) an. Das erste Ergebnis, das uns der Befehl anzeigt, ist die Addition der Parameter und das zweite die Subtraktion.
Mit dem Befehl „n“ können wir dem Programm einen Namen geben. Mit dem Befehl „rcx“ können wir den Inhalt des CX-Registers auf den Wert ändern, den wir aus der Größe der Datei mit „h“ erhalten haben, in diesem Fall 000a, da dies das Ergebnis der Subtraktion der Endadresse von der Anfangsadresse ist.
Zum Schluss schreibt der Befehl "w" unser Programm auf die Festplatte und gibt an, wie viele Bytes es geschrieben hat. Um eine bereits geladene Datei zu speichern, sind zwei Schritte notwendig:
- Geben Sie den Namen der zu ladenden Datei ein.
- Laden Sie es mit dem Befehl „l“ (load).
Um das richtige Ergebnis der folgenden Schritte zu erhalten, ist es erforderlich, dass das obige Programm bereits erstellt wurde.
In Debug schreiben wir Folgendes:
-n test.com
-l
-in 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 AX,BX HINZUFÜGEN
0C3D:0108 CD20 INT 20
Der letzte „u“-Befehl wird verwendet, um zu überprüfen, ob das Programm in den Speicher geladen wurde. Er zerlegt den Code und zeigt ihn zerlegt an. Die Parameter geben DEBUG an, von wo und wohin zerlegt werden soll. DEBUG lädt die Programme immer in den Speicher an der Adresse 100H, wenn nicht anders angegeben.
Segmente
Die Architektur der x86-Prozessoren erzwingt die Verwendung von Speichersegmenten zur Verwaltung der Informationen, die Größe dieser Segmente beträgt 64 KB.
Der Grund für die Existenz dieser Segmente liegt darin, dass die maximale Größe einer Zahl, die der Prozessor verarbeiten kann, durch ein Wort mit 16 Bit oder ein Register gegeben ist. Unter Verwendung nur eines dieser Register wäre es daher nicht möglich, auf mehr als 65.536 Speicherorte zuzugreifen. Wenn der Speicher nun jedoch in Gruppen oder Segmente mit jeweils 65.536 Orten unterteilt ist und wir eine Adresse in einem exklusiven Register verwenden, um jedes Segment zu finden, und dann jede Adresse eines bestimmten Steckplatzes mit zwei Registern erstellen, können wir auf eine Speichermenge von 4.294.967.296 Bytes zugreifen.
Damit der Assembler die Daten verwalten kann, muss jede Information oder Anweisung in dem Bereich zu finden sein, der ihren jeweiligen Segmenten entspricht. Der Assembler greift auf diese Informationen zu und berücksichtigt dabei die Lokalisierung des Segments, die durch die Register DS, ES, SS und CS gegeben ist, sowie innerhalb des Registers die Adresse der angegebenen Information. Aus diesem Grund erscheint beim Erstellen eines Programms mit Debug in jeder Zeile, die wir assoziieren, etwa Folgendes:
1CB0:0102 MOV AX, BX
Dabei entspricht die erste Zahl, 1CB0, dem verwendeten Speichersegment, die zweite Zahl bezieht sich auf die Adresse innerhalb dieses Segments und es folgen die Anweisungen, die ab dieser Adresse gespeichert werden.
Der Assembler passt die Größe der Segmente an, indem er die Anzahl der Bytes als Grundlage nimmt, die jeder zusammengesetzte Befehl benötigt, da es eine Speicherverschwendung wäre, die gesamten Segmente zu verwenden. Wenn ein Programm beispielsweise nur 10 KB zum Speichern von Daten benötigt, ist das Datensegment nur 10 KB groß und nicht die 64 KB, die es verarbeiten kann.
Datenbewegung
Ich liste hier zu Ihrer Information und Bequemlichkeit einige Anweisungen in Assemblersprache für Datenoperationen auf, da wir die Grundlagen beim Programmieren mit der Hilfe von Interrupts und anderen BIOS-Operationen benötigen.
Eine detaillierte Einführung und gründliche Untersuchung der Assemblersprache geht über den Rahmen dieses Buches hinaus. Obwohl Kenntnisse der Assemblergrundlagen erforderlich sind, um mit den weiteren wichtigen Programmierkapiteln fortzufahren, besteht kein Grund zur Sorge, wenn Sie Schwierigkeiten haben, alle Anweisungen zu verstehen. Es wird jedoch empfohlen, dass Sie sich mit den Grundlagen der Anweisungen vertraut machen.
In jedem Programm müssen die Daten im Speicher und in den CPU-Registern verschoben werden. Dazu gibt es mehrere Möglichkeiten. Es können Daten im Speicher in ein Register kopiert werden, von einem Register zu einem anderen, von einem Register zu einem Stapel, von einem Stapel zu einem Register, Daten an externe Geräte übertragen werden und umgekehrt.
Für die Datenübertragung gelten bestimmte Regeln und Einschränkungen. Im Folgenden sind einige davon aufgeführt:
- Es ist nicht möglich, Daten direkt von einem Speicherplatz zu einem anderen zu verschieben. Es ist notwendig, die Daten zunächst vom Quellspeicherort in ein Register und dann vom Register zum Zielspeicherort zu verschieben.
- Es ist nicht möglich, eine Konstante direkt in ein Segmentregister zu verschieben. Sie muss zuerst in ein Register in der CPU verschoben werden.
- Es ist möglich, Datenblöcke mit den MOVS-Befehlen zu verschieben, die eine Kette von Bytes oder Wörtern kopieren. MOCSB kopiert n Bytes von einem Ort zum anderen und MOVSW kopiert n Wörter von einem Ort zum anderen. Die letzten beiden Befehle verwenden die Werte von den durch DS:SI definierten Adressen als zu verschiebende Datengruppe und ES:DI als neue Lokalisierung der Daten.
Zum Verschieben von Daten gibt es auch sogenannte Batterien, bei denen die Daten mit dem Push-Befehl eingeführt und mit dem Pop-Befehl entnommen werden. In einem Stapel sind die zuerst eingeführten Daten die letzten, die wir entnehmen können, wenn wir in unserem Programm diese Befehle verwenden:
AXT SCHIEBEN
PUSH BX
Push-CX
Um den einzelnen Registern beim Entnehmen aus dem Stapel die richtigen Werte zurückzugeben, muss die folgende Reihenfolge eingehalten werden:
POP CX
POP BX
POP AX
Zur Kommunikation mit externen Geräten dient der Out-Befehl zum Senden von Informationen an einen Port und der In-Befehl zum Lesen der von einem Port empfangenen Informationen.
Die Syntax des OUT-Befehls lautet:
AUS DX, AX
Dabei enthält DX den Wert des Ports, der für die Kommunikation verwendet wird, und AX die zu sendenden Informationen.
Die Syntax des IN-Befehls lautet:
IN AX,DX
Dabei ist AX das Register, in dem die eingehenden Informationen gespeichert werden, und DX enthält die Adresse des Ports, über den die Informationen eintreffen.
MOV-Anweisung
Wird für den Datentransfer zwischen Speicherzellen, Registern und dem Akkumulator verwendet. Die Syntax lautet wie folgt:
MOV-Ziel, Quelle
Die verschiedenen für diesen Befehl zulässigen Datenbewegungen sind in der folgenden Tabelle aufgeführt:
S. Nein. |
Ziel |
Quelle |
1. |
Erinnerung |
Akkumulator |
2. |
Akkumulator |
Erinnerung |
3. |
Segmentregister |
Speicher/Register |
4 |
Speicher/Register |
Segmentregister |
5. |
Registrieren |
registrieren |
6. |
Registrieren |
Erinnerung |
7. |
Erinnerung |
registrieren |
8. |
Registrieren |
sofortige Daten |
9. |
Erinnerung |
sofortige Daten |
Sehen wir uns ein Beispiel an:
MOV AX,0006
MOV BX, AX
MOV AX,4C00
INT 21
Dieses Programm verschiebt den Wert von 0006H in das AX-Register, dann verschiebt es den Inhalt von AX (0006h) in das BX-Register und schließlich verschiebt es den Wert 4C00h in das AX-Register, um die Ausführung mit der Option 4C der 21h-Unterbrechung zu beenden. Wir werden uns später kurz mit Interrupt 13H und Interrupt 21H befassen.
Unterbrechungen
Ein Interrupt ist eine Hardwarefunktion, die die CPU veranlasst, die Ausführung anzuhalten, ihren Status zu speichern und an einen bestimmten Ort zu übertragen. Der Übertragungsort gibt die Adresse eines Programms an, das als Reaktion auf den Interrupt eine Aktion ausführen soll. Das Programm, das als Ergebnis des Interrupts ausgeführt wird, wird als Interrupt-Handling-Programm bezeichnet.
Beispiel: Wenn DOS Informationen an das BIOS senden möchte oder das BIOS Informationen an das Computersystem senden möchte, erzeugen DOS oder das BIOS Interrupts. Wenn ein Interrupt erzeugt wird, unterbricht der Computer seine aktuelle Tätigkeit und führt zunächst die Operation aus, die den Interrupt erzeugt hat.
Jedes Gerät, das Interrupts generieren kann, erhält eine eindeutige Interruptnummer, um zu identifizieren, welches Gerät diese Interrupts generiert. In diesem Buch werden wir alle Funktionen und Unterfunktionen von Interrupt 13H, Erweiterungen von Interrupt 13H und Interrupt 21H besprechen.
Grundsätzlich können die Unterbrechungen folgender drei Arten sein:
- Interne Hardwareunterbrechungen
- Externe Hardwareunterbrechungen
- Softwareunterbrechungen
Interne Hardwareunterbrechungen
Interne Unterbrechungen werden durch bestimmte Ereignisse erzeugt, die während der Ausführung eines Programms auftreten. Diese Art von Unterbrechungen wird in ihrer Gesamtheit von der Hardware verwaltet und kann nicht geändert werden.
Ein klares Beispiel für diese Art von Unterbrechung ist die Aktualisierung des Zählers der internen Computeruhr. Die Hardware ruft diese Unterbrechung mehrmals pro Sekunde auf, um die Zeit aktuell zu halten.
Zwar können wir diese Unterbrechung nicht direkt steuern, da wir die Zeitaktualisierung nicht per Software steuern können, dennoch ist es uns möglich, ihre Auswirkungen auf den Computer zu unserem Vorteil zu nutzen.
Beispiel: Um eine virtuelle Uhr zu erstellen, die kontinuierlich aktualisiert wird, müssen wir nur ein Programm schreiben, das den aktuellen Wert des Zählers liest und in ein für den Benutzer verständliches Format übersetzt.
Externe Hardwareunterbrechungen
Externe Unterbrechungen werden von Peripheriegeräten wie Tastaturen, Druckern, Kommunikationskarten usw. erzeugt. Sie werden auch von Coprozessoren erzeugt. Externe Unterbrechungen können nicht deaktiviert werden.
Diese Unterbrechungen werden nicht direkt an die CPU gesendet, sondern an einen integrierten Schaltkreis, dessen Funktion darin besteht, ausschließlich diese Art von Unterbrechungen zu verarbeiten.
Softwareunterbrechungen
Softwareunterbrechungen können direkt aktiviert werden, indem der Assembler mit dem INT-Befehl die Nummer der gewünschten Unterbrechung aufruft.
Die Verwendung von Unterbrechungen hilft uns bei der Erstellung von Programmen und durch ihre Verwendung werden unsere Programme kürzer. Sie sind leichter zu verstehen und haben normalerweise eine bessere Leistung, hauptsächlich aufgrund ihrer geringeren Größe. Diese Art von Unterbrechungen kann in zwei Kategorien unterteilt werden: die DOS-Unterbrechungen des Betriebssystems und die BIOS-Unterbrechungen.
Der Unterschied zwischen beiden besteht darin, dass die Unterbrechungen des Betriebssystems einfacher zu verwenden sind, aber auch langsamer, da diese Unterbrechungen das BIOS nutzen, um ihr Ziel zu erreichen. Die BIOS-Unterbrechungen hingegen sind viel schneller, haben aber den Nachteil, dass sie, da sie Teil der Hardware sind, sehr spezifisch sind und sogar je nach Herstellermarke der Schaltung variieren können.
Die Wahl des zu verwendenden Unterbrechungstyps hängt ausschließlich von den Eigenschaften ab, die Sie Ihrem Programm geben möchten.
Da wir Interrupts für die Datenwiederherstellungsprogrammierung mithilfe der Sprache C über die Interrupt-Behandlung mit C verwenden, werden wir nur die Routinen Interrupt 13H, Interrupt 13H-Erweiterungen und Interrupt 21H speziell besprechen. Es ist nicht so wichtig, alle anderen Interrupts und ihre Funktionen zu besprechen, da in der Sprache C einfachere Funktionen zur Ausführung der meisten dieser Aufgaben verfügbar sind. Für die Datenwiederherstellungsprogrammierung ist jedoch die Kenntnis von Interrupt 13H und seinen Erweiterungen ein Muss. |
Lassen Sie uns kurz auf Interrupt 20H und Interrupt 21H eingehen. Der in Klammern angegebene Wert (wie 0x20) gibt an, wie man
INT 20H ( 0x20) --> Prozess beenden
Aufruf mit: CS = Segmentadresse des Programmsegmentpräfixes
Rückgaben: Nichts
Kommentare:
Es beendet den aktuellen Prozess. Dies ist eine von mehreren Methoden, die ein Programm verwenden kann, um einen endgültigen Ausgang durchzuführen. Sie können auch Funktionen (00H oder 31H oder 4CH) von INT 21H oder einfach INT 27H verwenden, um einen endgültigen Ausgang durchzuführen, wobei die Funktionen 31H und 4CH von INT 21H im Allgemeinen bevorzugt werden, da sie die Übergabe eines Rückgabecodes an den übergeordneten Prozess ermöglichen.
Wenn Sie zum Schreiben einer Datei File Control Blocks (FCBs) verwendet haben, wird empfohlen, die Datei zuerst zu schließen. Andernfalls können Daten verloren gehen, weil beim endgültigen Beenden der gesamte vom Prozess belegte Speicher freigegeben, Dateipuffer geleert und alle offenen Handles für Dateien oder Geräte im Besitz des Prozesses geschlossen werden.
Wenn Sie Handles für Dateien geöffnet haben, können daher Daten verloren gehen.
INT 21H (0x21)
Funktion 00H (0x00) --> Prozess beenden
Anruf mit: AH = 00H
CS = Segmentadresse des Programmsegmentpräfixes
Rückgaben: Nichts
Kommentare:
Dieser Interrupt beendet den aktuellen Prozess. Dies ist eine von mehreren Methoden, mit denen ein Programm einen endgültigen Prozess beenden kann. Weitere Informationen finden Sie unter INT 20H
INT 21H (0x21)
Funktion 01H (0x01) --> Zeicheneingabe mit Echo
Anruf mit: AH = 01H
Gibt zurück: AL = 8-Bit-Eingabedaten
Kommentare:
Dieser Interrupt liest ein Zeichen vom Standardeingabegerät, z. B. der Tastatur, und gibt es an das Standardausgabegerät weiter. Wenn kein Zeichen bereitsteht, wird gewartet, bis eines verfügbar ist.
INT 21H (0x21)
Funktion 02H (0x02) --> Zeichenausgabe
Anruf mit: AH = 02H
DL = 8-Bit-Daten für die Ausgabe
Rückgaben: Nichts
Kommentare:
It outputs a character to the standard output device. Output can be redirected. If output is redirected, there is no way to detect disk full.
Strings can also be sent strings to the display by performing a write (INT 21H, Function 40H) using the predefined handle for the standard output (0001H), if output has not been redirected, or a handle obtained the logical device CON.
INT 21H (0x21)
Function 03H (0x03) --> Auxiliary input
Call with: AH = 03H
Returns: AL = 8-bit input data
Comments:
It reads a character from the standard auxiliary device. The default is the first serial port (COM1).
If the auxiliary device sends data faster than your program can process it, characters may be lost. There is no way for a user program to read the status of the auxiliary device or to detect I/O errors such as lost characters, through this function call.
INT 21H (0x21)
Function 04H (0x04) --> Auxiliary output
Call with: AH = 04H
DL = 8-bit data for output
Returns: Nothing
Comments:
This function of INT 21H outputs a character to the standard auxiliary device. The default is the first serial port (COM1). Strings can also be sent to the auxiliary device by performing a write (INT 21H Function 40H) using the predefined handle for the standard auxiliary device (00034) or using a handle obtained by opening the logical device AUX.
INT 21H (0x21)
Function 05H (0x05) --> Printer output
Call with: AH = 05H
DL = 8-bit data for output
Returns: Nothing
Comments:
This function sends a character to the standard list device. The default device is the printer on the first parallel port (LPT1). Strings can also be sent to the printer by performing a write (INT 21H Function 40H) using the predefined handle for the standard printer device (0004H) or using a handle obtained by opening the logical device PRN or 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
Comments:
It reads a character from the standard input device or writes a character to the standard output device. I/O may be redirected but if I/O has been redirected, there is no way to detect EOF or disk full. This function of INT 21H is used by programs that the need to read and write all possible characters and control codes without any interference from the operating system.
INT 21H (0x21)
Function 07H (0x07) --> Unfiltered character input
without Echo
Call with: AH = 07H
Returns: AL = 8-bit input data
Comments:
This function reads a character from the standard input device without echoing it to the standard output device.
INT 21H (0x21)
Funktion 08H (0x08) --> Zeicheneingabe ohne Echo
Anruf mit: AH = 08H
Gibt zurück: AL = 8-Bit-Eingabedaten
Kommentare:
Diese Funktion liest ein Zeichen vom Standardeingabegerät, ohne es an das Standardausgabegerät zurückzugeben.
INT 21H (0x21)
Funktion 09H (0x09) --> Zeichenkette anzeigen
Anruf mit: AH = 09H
DS:DX = Segment: Offset der Zeichenfolge
Rückgaben: Nichts
Kommentare:
Es sendet eine Zeichenfolge an das Standardausgabegerät. Die Ausgabe kann umgeleitet werden. Wenn die Ausgabe umgeleitet wurde, gibt es keine Möglichkeit, eine volle Festplatte zu erkennen. Die Zeichenfolge kann auch an das Display gesendet werden, indem ein Schreibvorgang (INT 21H, Funktion 40H) mit dem vordefinierten Handle für die Standardausgabe (0001H) ausgeführt wird, wenn dieser nicht umgeleitet wurde, oder mit einem Handle, das durch Öffnen des logischen Geräts CON erhalten wurde.
INT 21H (0x21)
Funktion 0AH (0x0A oder 10) --> Gepufferte Tastatureingaben
Anruf mit: AH = 0AH
DS:DX = Segment: Offset des Puffers
Rückgabewert: Daten im Puffer abgelegt, gibt nichts zurück
Kommentare:
Es liest eine Bytefolge vom Standardeingabegerät bis einschließlich eines ASCII-Wagenrücklaufs (0DH) und platziert sie in einem benutzerdefinierten Puffer. Die Zeichen werden an das Standardausgabegerät ausgegeben. Der von der Funktion verwendete Puffer hat folgendes Format:
Byte |
Inhalt |
0 |
Maximale Anzahl zu lesender Zeichen, vom Programm festgelegt |
1 |
Anzahl der tatsächlich gelesenen Zeichen (ohne Wagenrücklauf), eingestellt durch MS-DOS |
2+ |
Von der Tastatur oder Standardeingabe gelesener String, beendet durch einen Wagenrücklauf (0DH) |
INT 21H (0x21)
Funktion 0BH (0x0B oder 11) --> Eingangsstatus prüfen
Anruf mit: AH = 0BH
Gibt zurück: AL = 00H (wenn kein Zeichen verfügbar ist)
FFH (sofern mindestens ein Charakter vorhanden ist)
Kommentare:
Überprüft, ob ein Zeichen vom Standardeingabegerät wie der Tastatur verfügbar ist. Diese Funktion entspricht IOCTL INT 21H Funktion 44H Unterfunktion 06H.
INT 21H (0x21)
Funktion 0CH (0x0C oder 12) --> Eingabepuffer leeren und dann Eingabe
Anruf mit: AH = 0CH
AL = Nummer des nach dem Zurücksetzen aufzurufenden Eingangs
Puffer (muss 01H, 06H, 07H, 08H oder 0AH sein)
Wenn AL = 0AH
DS: DX = Segment: Offset des Eingabepuffers
Rückgabewert: Bei Aufruf mit AL = 01H, 06H, 07H oder 08H,
AL = 8-Bit-Eingangsdaten
Bei einem Aufruf mit AL= 0AH,
Nichts (Daten im Puffer abgelegt)
Kommentare:
Löscht den Standardeingabepuffer und ruft dann eine der Zeicheneingabefunktionen auf. Die Eingabe kann umgeleitet werden. Eine Funktionsnummer in AL außer 01H, 06H, 07H, 08H oder 0AH leert den Eingabepuffer und gibt die Steuerung an das aufrufende Programm zurück.
INT 21H (0x21)
Funktion 0DH (0x0D oder 13) -> Disk-Reset
Anruf mit: AH = 0DH
Rückgaben: Nichts
Kommentare:
Diese Funktion leert alle Dateipuffer. Die Funktion aktualisiert das Datenträgerverzeichnis nicht für noch geöffnete Dateien.
INT 21H (0x21)
Funktion 0EH (0x0E oder 14) -> Datenträger auswählen
Anruf mit: AH = 0EH
DL = Laufwerkscode (0 = A, 1 = B usw.)
Gibt zurück: AL = Anzahl der logischen Laufwerke im System
Kommentare:
Wählt das angegebene Laufwerk als aktuelles oder Standard-Festplattenlaufwerk aus und gibt die Gesamtzahl der logischen Laufwerke im System zurück.
Die Anwendungen sollten sich auf die Laufwerksbuchstaben A–Z beschränken (0 = A, 1 = B usw.). Unter logischen Laufwerken versteht man die Gesamtzahl der Blockgeräte wie Disketten- und Festplattenlaufwerke usw. Im Allgemeinen wird ein einzelnes physisches Festplattenlaufwerk in zwei oder mehr logische Laufwerke partitioniert.
INT 21H (0x21)
Funktion 0FH (0x0F oder 15) -> Datei öffnen
Anruf mit: AH = 0FH
S: DX = Segment: Offset des Dateikontrollblocks
Rückgabewert: Wenn Funktion erfolgreich und Datei gefunden
AL = 00H
Und das von MS-DOS ausgefüllte FCB lautet wie folgt:
Laufwerksfeld (Offset 00H) = 1 für Laufwerk A, 2 für Laufwerk B usw. Aktuelles Blockfeld (Offset 0CH) = 00H
Datensatzgrößenfeld (Offset 0EH) = 0080H
Größenfeld (Offset 10H) = Dateigröße aus Verzeichnis
Datenfeld (Offset 14H) = Datumsstempel aus Verzeichnis
Zeitfeld (Offset 16H) = Zeitstempel aus Verzeichnis
Wenn die Funktion nicht erfolgreich war und die Datei nicht gefunden wurde,
AL = 0FFH
Kommentare:
Öffnet eine Datei und macht sie für nachfolgende Lese-/Schreibvorgänge verfügbar. Wenn das Programm eine andere Datensatzgröße als 128 Bytes verwenden soll, sollte es das Datensatzgrößenfeld nach dem erfolgreichen Öffnen der Datei und vor allen anderen Festplattenvorgängen auf den FCB-Offset 0EH setzen.
INT 21H (0x21)
Funktion 10H (0x10 oder 16) -> Datei schließen
Anruf mit: AH = 10H
DS: DX = Segment: Offset des Dateikontrollblocks
Rückgabewert: Bei erfolgreicher Funktion (Verzeichnisaktualisierung erfolgreich)
AL = 00H
Wenn die Funktion nicht erfolgreich war (Datei nicht im Verzeichnis gefunden)
AL = FFH
Kommentare:
Wird zum Schließen einer Datei verwendet. Es schließt eine Datei, löscht alle mit der Datei verbundenen internen MS-DOS-Festplattenpuffer auf die Festplatte und aktualisiert das Festplattenverzeichnis, wenn die Datei geändert oder erweitert wurde.
INT 21H (0x21)
Funktion 11H (0x11 oder 17) -> Erste Datei finden
Call mit: AH = 11H
DS: DX = Segment: Offset des Dateikontrollblocks
Rückgabewert: Wenn die Funktion erfolgreich war und eine passende Datei gefunden wurde
AL = 00H
Und der Puffer an der aktuellen DTA-Adresse (Disk Transfer Area) wird als ungeöffneter normaler FCB oder erweiterter FCB ausgefüllt, je nachdem, welcher FCB-Typ in die Funktion eingegeben wurde.
Wenn die Funktion nicht erfolgreich war (kein passender Dateiname gefunden)
AL = FFH
Kommentare:
Es durchsucht das aktuelle Verzeichnis auf dem angegebenen Laufwerk nach einem passenden Dateinamen. Sie können Platzhalter (? und *) verwenden. Diese Funktion gibt den ersten passenden Dateinamen zurück.
INT 21H (0x21)
Funktion 12H (0x12 oder 18) -> Nächste Datei suchen
Anruf mit: AH = 12H
DS: DX = Segment: Offset des Dateikontrollblocks
Gibt zurück: Wenn die Funktion erfolgreich war und ein passender Dateiname gefunden wurde
AL = 00H
Und Puffer an der aktuellen DTA-Adresse (Disk Transfer Area), eingerichtet als ungeöffneter normaler FCB oder erweiterter FCB, abhängig davon, welcher FCB-Typ ursprünglich in INT21H Funktion 11H eingegeben wurde.
Wenn die Funktion nicht erfolgreich war und keine passenden Dateinamen gefunden wurden
AL = FFH
Kommentare:
Dies ist die Begleitfunktion der vorherigen Funktion. Wenn INT 21H Funktion 11H erfolgreich war, gibt sie den nächsten passenden Dateinamen zurück, sofern vorhanden. Diese Funktion setzt voraus, dass der als Eingabe verwendete FCB durch einen vorherigen Aufruf von INT 21H Funktion 11H und mögliche nachfolgende Aufrufe von INT 21H Funktion 12H ordnungsgemäß initialisiert wurde und dass der gesuchte Dateiname oder die gesuchte Erweiterung mindestens ein Platzhalterzeichen enthielt.
INT 21H (0x21)
Funktion 13H (0x13 oder 19) -> Datei löschen
Anruf mit: AH = 13H
DS: DX = Segment: Offset des Dateikontrollblocks
Gibt zurück: Wenn die Funktion erfolgreich ist und die Datei oder Dateien gelöscht wurden
AL = 00H
Wenn die Funktion nicht erfolgreich ist und keine passenden Dateien gefunden wurden oder mindestens eine passende Datei schreibgeschützt war,
AL = FFH
Kommentare:
Es löscht alle passenden Dateien aus dem aktuellen Verzeichnis auf dem Standard- oder angegebenen Laufwerk. Sie können auch Platzhalter (? und *) verwenden.
INT 21H (0x21)
Funktion 14H (0x14 oder 20) -> Sequentielles Lesen
Anruf mit: AH = 14H
DS: DX = Segment: Offset des zuvor geöffneten
Dateikontrollblock
Gibt zurück: AL = 00H, wenn das Lesen erfolgreich war
01H wenn Dateiende
02H wenn Segmentumbruch
03H wenn ein Teil des Datensatzes am Ende gelesen wird
Datei
Kommentare:
Diese Funktion liest den nächsten Datenblock aus einer Datei und erhöht dann den Dateizeiger entsprechend. Die Anzahl der zu lesenden Datenbytes wird durch das Datensatzgrößenfeld (Offset 0EH) des Dateisteuerblocks (FCB) angegeben.
Der Datensatz wird an der aktuellen DTA-Adresse (Disk Transfer Area) in den Speicher eingelesen, die durch den letzten Aufruf der INT 21H-Funktion 1AH angegeben wurde. Wenn die Größe des Datensatzes und der Speicherort des Puffers so beschaffen sind, dass ein Segmentüberlauf oder ein Wraparound auftreten würde, schlägt die Funktion mit dem Rückgabecode 02H fehl.
INT 21H (0x21)
Funktion 15H (0x15 oder 21) --> Sequentielles Schreiben
Anruf mit: AH = 15H
DS: DX = Segment: Offset des zuvor geöffneten Dateikontrollblocks
Rückgabewert: AL = 00H, wenn Schreiben erfolgreich
01H, wenn die Festplatte eine Datei ist
02H, wenn Segmentumbruch
Kommentare:
Diese Funktion schreibt den nächsten Datenblock in eine Datei und erhöht dann den Dateizeiger entsprechend. Die Anzahl der zu schreibenden Datenbytes wird durch das Datensatzgrößenfeld (Offset 0EH) des Dateikontrollblocks (FCB) angegeben.
INT 21H (0x21)
Funktion 16H (0x16 oder 22) --> Datei erstellen
Anruf mit: AH = 16H
DS: DX = Segment: Offset des ungeöffneten Dateikontrollblocks
Gibt zurück: Wenn die Funktion erfolgreich ist und die Datei erstellt oder gekürzt wurde
AL = 00H
Und FCB wird von MS-DOS wie folgt ausgefüllt:
Laufwerksfeld (Offset 00H) = 1 für Laufwerk A, 2 für Laufwerk B usw.
Aktuelles Blockfeld (Offset0CH) = 00H
Datensatzgrößenfeld (Offset 0EH) = 0080H
Größenfeld (Offset 10H) = Dateigröße aus Verzeichnis
Datumsfeld (Offset 14H) = Datumsstempel aus Verzeichnis
Zeitfeld (Offset 16H = Zeitstempel aus Verzeichnis
Wenn die Funktion nicht erfolgreich war (Verzeichnis voll)
AL = FFH
Kommentare:
Diese Funktion erstellt einen neuen Verzeichniseintrag im aktuellen Verzeichnis oder kürzt eine vorhandene Datei mit demselben Namen auf die Länge Null. Außerdem wird die Datei für nachfolgende Lese-/Schreibvorgänge geöffnet. Diese Funktion muss mit Vorsicht verwendet werden, da eine vorhandene Datei mit dem angegebenen Namen auf die Länge Null gekürzt wird und alle Daten in dieser Datei unwiederbringlich verloren gehen.
INT 21H (0x21)
Funktion 17H (0x17 oder 23) --> Datei umbenennen
Anruf mit: AH = 17H
DS: DX = Segment: Offset des speziellen Dateikontrollblocks
Rückgabewert: Wenn die Funktion erfolgreich ist und eine oder mehrere Dateien umbenannt wurden
AL = 00H
Wenn die Funktion nicht erfolgreich ist und keine passenden Dateien vorhanden sind oder der neue Dateiname mit einer vorhandenen Datei übereinstimmt
AL = FFH
Kommentare:
Diese Funktion ändert den Namen aller passenden Dateien im aktuellen Verzeichnis auf der Festplatte im angegebenen Laufwerk.
Sie können dabei auch Platzhalter verwenden. Der spezielle Dateikontrollblock hat einen Laufwerkscode, einen Dateinamen und eine Erweiterung an der üblichen Position (Bytes 0 bis 0BH) und einen zweiten Dateinamen, der 6 Bytes nach dem ersten beginnt (Offset 11H).
INT 21H
Funktion 18H (0x18 oder 24) --> Reserviert
INT 21H (0x21)
Funktion 19H (0x19 oder 25) --> Aktuelle Festplatte abrufen
Anruf mit: AH = 19H
Gibt zurück: AL = Laufwerkscode (0 für Laufwerk A, 1 für Laufwerk B usw.)
Kommentare:
Diese Funktion gibt den Laufwerkscode des aktuellen oder Standardfestplattenlaufwerks zurück.
INT 21H (0x21)
Funktion 1AH (0x1A oder 26) --> DTA-Adresse setzen
Call mit: AH = 1AH
DS: DX = Segment: Offset des Festplattenübertragungsbereichs.
Rückgaben: Nichts
Kommentare:
Diese Funktion gibt die Adresse des Disk Transfer Area (DTA) an, der für nachfolgende FCB-bezogene Funktionsaufrufe verwendet werden soll.
INT 21H (0x21)
Funktion 1BH (0x1B oder 27) --> Standard-Laufwerksdaten abrufen
Call mit: AH = 1BH
Rückgabewert: Bei erfolgreicher Funktion
AL = Sektoren pro Cluster
DS: DX = Segmentoffset des Medien-ID-Bytes
CX = Größe des physischen Sektors in Bytes
DX = Anzahl der Cluster für das Standardlaufwerk
Bei erfolgloser Funktion (ungültiges Laufwerk oder kritischer Fehler)
AL = FFH
Kommentare:
Diese Funktion ruft ausgewählte Informationen über das Standarddiskettenlaufwerk und einen Zeiger auf das Medienidentifikationsbyte aus seiner Dateizuordnungstabelle ab.
Das Medien-ID-Byte hat folgende Bedeutung:
Mediendeskriptor-ID |
Medium |
0F0H |
3,5-Zoll-Diskette, doppelseitig, 18 Sektoren (oder andere) |
Die Versionsnummer lautet: F8 |
Festplatte |
Die Versionsnummer lautet: F9 |
5,25-Zoll-Diskette, doppelseitig, 15 Sektoren |
Die Versionsnummer lautet: F9 |
3,5-Zoll-Diskette, doppelseitig, 9 Sektoren |
0FCH |
5,25-Zoll-Diskette, einseitig, 9 Sektoren |
0FDH |
5,25-Zoll-Diskette, doppelseitig, 9 Sektoren |
0FDH |
8-Zoll-Diskette, einseitig, einfache Dichte |
0FEH |
5,25-Zoll-Diskette, einseitig, 8 Sektoren |
0FEH |
8-Zoll-Diskette, einseitig, einfache Dichte |
0FEH |
8-Zoll-Diskette, doppelseitig, doppelte Dichte |
0FFH |
5,25-Zoll-Diskette, doppelseitig, 8 Sektoren |
INT 21H (0x21)
Funktion 1CH (0x1C oder 28) --> Antriebsdaten abrufen
Anruf mit: AH = 1CH
DL = Laufwerkscode
Gibt zurück: Wenn die Funktion erfolgreich ist
AL = Sektoren pro Cluster
DS: BX = Segment: Offset des Medien-ID-Bytes
CX = Größe des physischen Sektors in Bytes
DX = Anzahl der Cluster für Standard- oder angegebenes Laufwerk
Wenn die Funktion nicht erfolgreich ist und ein ungültiges Laufwerk oder ein kritischer Fehler vorliegt
AL = FFH
Kommentare:
Diese Funktion erhält Zuordnungsinformationen zum angegebenen Laufwerk und einen Zeiger auf das Medienidentifikationsbyte aus seiner Dateizuordnungstabelle. Informationen zur Medien-ID finden Sie in der Mediendeskriptor-ID-Bytetabelle in INT 21H, Funktion 1BH.
INT 21H (0x21)
Funktion 1DH (0x1D oder 29) --> Reserviert
INT 21H (0x21)
Funktion 1EH (0x1E oder 30) --> Reserviert
INT 21H (0x21)
Funktion 1FH (0x1F oder 31) --> Reserviert
INT 21H (0x21)
Funktion 20H (0x20 oder 32) --> Reserviert
INT 21H (0x21)
Funktion 21H (0x21 oder 33) --> Zufälliges Lesen
Anruf mit: AH = 21H
DS: DX = Segment: Offset des zuvor geöffneten
Dateikontrollblock
Gibt zurück: AL = 00H, wenn das Lesen erfolgreich war
01H wenn Dateiende
02H wenn Segmentumbruch, Lesen abgebrochen
03H wenn ein Teil des Datensatzes am Ende gelesen wird
Datei
Kommentare:
Diese Funktion liest einen ausgewählten Datensatz aus einer Datei in den Speicher. Der Datensatz wird an der aktuellen Adresse des Datenträgerübertragungsbereichs in den Speicher gelesen, die durch den letzten Aufruf von INT 21H Funktion 1AH angegeben wurde.
INT 21H (0x21)
Funktion 22H (0x22 oder 34) --> Zufälliges Schreiben
Anruf mit: AH = 22H
DS: DX = Segment: Offset des zuvor geöffneten
Dateikontrollblock
Gibt zurück: AL = 00H, wenn das Schreiben erfolgreich war
01H, wenn die Festplatte voll ist
02H wenn Segmentumbruch, Schreiben abgebrochen
Kommentare:
Diese Funktion schreibt die Daten aus dem Speicher in einen ausgewählten Datensatz in einer Datei.
INT 21H (0x21)
Funktion 23H (0x23 oder 35) --> Dateigröße ermitteln
Anruf mit: AH = 23H
DS: DX = Segment: Offset der ungeöffneten Datei
Steuerblock
Gibt zurück: Wenn die Funktion erfolgreich ist und ein passender Dateiname gefunden wurde
AL = 00H
Und FCB Relative-Record-Feld (Offset 21H) auf die Anzahl der Datensätze in der Datei gesetzt, ggf. aufgerundet auf den nächsten vollständigen Datensatz
Wenn die Funktion nicht erfolgreich ist und keine passende Datei gefunden wird
AL = FFH
Kommentare:
Diese Funktion sucht im aktuellen Verzeichnis nach einer passenden Datei. Wird eine gefunden, wird der FCB mit der Größe der Datei in Bezug auf die Anzahl der Datensätze aktualisiert. Für diese Funktion gibt es keine Standard-Datensatzgröße. Daher muss vor dem Aufruf dieser Funktion ein entsprechender Wert in das FCB-Datensatzgrößenfeld (Offset 0EH) eingetragen werden.
INT 21H (0x21)
Funktion 24H (0x24 oder 36) --> Relative Datensatznummer setzen
Anruf mit: AH = 24H
DS: DX = Segment: Offset des zuvor geöffneten
Dateikontrollblock
Rückgabewert: AL wird vernichtet (andere Register sind nicht betroffen)
FCB-Relativdatensatzfeld (Offset 21H) aktualisiert
Kommentare:
Diese Funktion setzt das Feld für die relative Datensatznummer eines Dateisteuerblocks (FCB) so, dass es der aktuellen Dateiposition entspricht, wie sie im geöffneten FCB aufgezeichnet ist.
INT 21H (0x21)
Funktion 25H (0x25 oder 37) --> Interrupt-Vektor setzen
Anruf mit: AH = 25H
AL = Interruptnummer
DS: DX = Segment: Offset der Interruptbehandlung
Routine
Rückgaben: Nichts
Kommentare:
Diese Funktion initialisiert einen CPU-Interrupt-Vektor, um auf eine Interrupt-Behandlungsroutine zu verweisen. Sie sollte von gut funktionierenden Anwendungen der direkten Bearbeitung der Interrupt-Vektor-Tabelle vorgezogen werden.
INT 21H (0x21)
Funktion 26H (0x26 oder 38) --> Neues Programmsegmentpräfix (PSP) erstellen
Anruf mit: AH = 26H
DX = Segment: des neuen Programmsegments
Präfix (PSP)
Rückgaben: Nichts
Kommentare:
Diese Funktion kopiert das Programmsegmentpräfix (PSP) des aktuell ausgeführten Programms an eine angegebene Segmentadresse im freien Speicher und aktualisiert anschließend das neue PSP, um es für ein anderes Programm nutzbar zu machen.
INT 21H (0x21)
Funktion 27H (0x27 oder 39) --> Zufälliger Block lesen
Anruf mit: AH = 27H
CX = Anzahl der zu lesenden Datensätze
DS: DX = Segment: Offset des zuvor geöffneten
Dateikontrollblock
Gibt zurück: AL = 00H, wenn alle angeforderten Datensätze gelesen wurden
01H wenn Dateiende
02H wenn Segmentumbruch
03H wenn ein Teil des Datensatzes am Ende gelesen wird
Datei
CX = tatsächliche Anzahl der gelesenen Datensätze
Kommentare:
Diese Funktion liest einen oder mehrere aufeinanderfolgende Datensätze aus einer Datei in den Speicher, beginnend an einem angegebenen Dateispeicherort. Wenn Größe und Speicherort des Puffers so sind, dass ein Segmentüberlauf oder ein Umbruch auftreten würde, schlägt die Funktion mit dem Rückgabecode 02H fehl, und wenn am Ende der Datei ein Teildatensatz gelesen wird, wird der Rest des Datensatzes mit Nullen aufgefüllt.
INT 21H (0x21)
Funktion 28H (0x28 oder 40) --> Zufälliges Blockschreiben
Anruf mit: AH = 28H
CX = Anzahl der zu schreibenden Datensätze
DS: DX = Segment: Offset des zuvor geöffneten
Dateikontrollblock
Rückgabewert: AL = 00H, wenn alle angeforderten Datensätze geschrieben wurden
01H, wenn die Festplatte voll ist
02H wenn Segmentumbruch
CX = tatsächliche Anzahl der geschriebenen Datensätze
Kommentare:
Diese Funktion schreibt einen oder mehrere aufeinanderfolgende Datensätze aus dem Speicher in eine Datei, beginnend an einem angegebenen Dateispeicherort. Wenn Größe und Speicherort des Puffers so sind, dass ein Segmentüberlauf oder ein Segmentumbruch auftreten würde, schlägt die Funktion mit dem Rückgabecode 02H fehl.
INT 21H (0x21)
Funktion 29H (0x29 oder 41) --> Dateinamen analysieren
Anruf mit: AH = 29H
AL = Flags zur Steuerung der Analyse
Bit 0 = 1, wenn führende Trennzeichen
ausgescannt (ignoriert).
= 0, wenn führende Trennzeichen nicht
abgescannt
Bit 1 = 1, wenn das Antriebs-ID-Byte im FCB
nur geändert werden, wenn ein Laufwerk
in der analysierten Zeichenfolge angegeben.
= 0, wenn das Antriebs-ID-Byte im FCB
geändert, unabhängig davon, ob kein Laufwerk
Spezifizierer ist in der analysierten Zeichenfolge vorhanden, FCB-Laufwerkscodefeld ist auf 0 gesetzt (Standard)
Bit 2 = 1, wenn das Dateinamenfeld im FCB
nur geändert, wenn ein Dateiname
in der analysierten Zeichenfolge angegeben.
= 0, wenn das Dateinamenfeld im FCB unabhängig davon geändert wird; wenn kein Dateiname die analysierte Zeichenfolge darstellt, wird der FCB-Dateiname auf ASCIIZ-Leerzeichen gesetzt.
Bit 3 = 1, wenn das Erweiterungsfeld im FCB
nur geändert werden, wenn eine Erweiterung
in der analysierten Zeichenfolge angegeben.
= 0, wenn das Erweiterungsfeld im FCB
geändert, unabhängig davon, ob keine Erweiterung
ist im analysierten String vorhanden, FCB
Die Erweiterung ist auf ASCIIZ-Leerzeichen eingestellt
DS: SI = Segment: Offset der Zeichenfolge
ES: DI = Segment: Offset des Dateikontrollblocks
Rückgabewert: AL = 00H, wenn keine Platzhalterzeichen vorhanden sind
01H gefunden, wenn Zeichenfolge analysiert
enthielten Platzhalterzeichen FFH,
wenn Laufwerksspezifizierer ungültig ist
DS: SI = Segment: Offset des ersten Zeichens
nach dem analysierten Dateinamen
ES: DI = Segment: Offset des formatierten
ungeöffneter Dateikontrollblock
Kommentare:
Diese Funktion analysiert eine Textzeichenfolge in die verschiedenen Felder eines Dateisteuerblocks (FCB).
Diese Funktion betrachtet die Zeichen (: . ; , = + Tabulatorzeichen ) als Trennzeichen und alle Steuerzeichen und Zeichen (: . ; , = + Tabulatorzeichen < > | / “ [ ]) als Abschlusszeichen.
INT 21H (0x21)
Funktion 2AH (0x2A oder 42) --> Tag und Datum abrufen
Call mit: AH = 2AH
Gibt zurück: CX = Jahr (1980 bis 2099)
DH = Monat (1 bis 12)
DL = Tag (1 bis 31)
AL = Wochentag (0 = Sonntag,
1 = Montag usw.)
Kommentare:
Diese Funktion ermittelt den Systemtag des Monats, den Wochentag, den Monat und das Jahr.
INT 21H (0x21)
Funktion 2BH (0x2B oder 43) --> Datum setzen
Call mit: AH = 2BH
CX = Jahr (1980 bis 2099)
DH = Monat (1 bis 12)
DL = Tag (1 bis 31)
Gibt zurück: AL = 00H, wenn das Datum erfolgreich festgelegt wurde
FFH wenn Datum ungültig (ignoriert)
Kommentare:
Diese Funktion initialisiert den Systemuhrtreiber auf ein bestimmtes Datum, die Systemzeit bleibt jedoch unverändert.
INT 21H (0x21)
Funktion 2CH (0x2C oder 44) --> Uhrzeit ermitteln
Anruf mit: AH = 2CH
Gibt zurück: CH = Stunden (0 bis 23)
CL = Minuten (0 bis 59)
DH = Sekunden (0 bis 59)
DL = Hundertstelsekunden (0 bis 99)
Kommentare:
Dies wird verwendet, um die Tageszeit vom Echtzeituhrtreiber des Systems abzurufen, umgewandelt in Stunden, Minuten, Sekunden und Hundertstelsekunden.
INT 21H (0x21)
Funktion 2DH (0x2D oder 45) --> Zeit setzen
Anruf mit: AH = 2DH
CH = Stunden (0 bis 23)
CL = Minuten (0 bis 59)
DH = Sekunden (0 bis 59)
DL = Hundertstelsekunden (0 bis 99)
Gibt zurück: AL = 00H, wenn die Zeit erfolgreich gesetzt wurde
FFH, wenn Uhrzeit ungültig (ignoriert)
Kommentare:
Diese Funktion initialisiert die Echtzeituhr des Systems auf eine bestimmte Stunde, Minute, Sekunde und Hundertstelsekunde. Das Systemdatum wird nicht beeinflusst.
INT 21H (0x21)
Funktion 2EH (0x2E oder 46) --> Prüfflag setzen
Call mit: AH = 2EH
AL = 00H, wenn das Prüfflag ausgeschaltet wird
01H, wenn das Prüfflag aktiviert wird
DL = 00H
Rückgaben: Nichts
Kommentare:
Diese Funktion schaltet das Betriebssystemflag für die automatische Überprüfung von Daten beim Lesen nach dem Schreiben aus oder ein. Die Standardeinstellung des Überprüfungsflags ist AUS, da die Überprüfung beim Lesen nach dem Schreiben die Festplattenvorgänge verlangsamt.
INT 21H (0x21)
Funktion 2FH (0x2F oder 47) --> DTA-Adresse abrufen
Anruf mit: AH = 2FH
Gibt zurück: ES: BX = Segment: Offset des Datenträgerübertragungsbereichs
Kommentare:
Diese Funktion ruft die aktuelle Adresse des Disk Transfer Area (DTA) für FCB-Dateilese-/-schreibvorgänge ab.
INT 21H (0x21)
Funktion 30H (0x30 oder 48) --> MS-DOS-Versionsnummer abrufen
Anruf mit: AH = 30H
AL = 00H
Gibt zurück: AL = Hauptversionsnummer (MS-DOS 3.10=3 usw.)
AH = Nebenversionsnummer (MS-DOS 3.10 = 0AH usw.)
BH = Original Equipment Manufacturer's
(OEMs) Seriennummer (OEM-abhängig - normalerweise 00H für IBMs
PC-DOS, 0FFH oder andere Werte für MS-DOS)
BL: CX = 24-Bit Benutzerseriennummer (optional, OEM-abhängig)
Kommentare:
Es gibt die Versionsnummer des Host-MS-DOS-Betriebssystems zurück.
INT 21H (0x21)
Funktion 31H (0x31 oder 49) --> Beenden und resident bleiben (TSR)
Anruf mit: AH = 31H
AL = Rückgabecode
DX = Speichermenge in Absätzen, die reserviert werden soll
Gibt nichts zurück
Kommentare:
Diese Funktion beendet die Ausführung des aktuell ausgeführten Programms, indem sie einen Rückgabecode an den übergeordneten Prozess übergibt, reserviert jedoch einen Teil oder den gesamten Speicher des Programms, sodass dieser vom nächsten zu ladenden vorübergehenden Programm überlagert wird. Diese Funktion sollte anstelle von INT 27H verwendet werden, da sie CS unterstützt, um das Segment des Programmsegmentpräfixes zu enthalten.
INT 21H (0x21)
Funktion 32H (0x32 oder 50) --> Reserviert
INT 21H (0x21)
Funktion 33H (0x33 oder 51) --> Break-Flag abrufen oder setzen, Boot-Laufwerk abrufen
Aufruf mit: Bei Erhalt des Break-Flags
AH = 33H
AL = 00H
Wenn das Break-Flag gesetzt wird
AH = 33H
AL = 01H
DL = 00H, wenn das Break-Flag ausgeschaltet wird
01H, wenn das Break-Flag eingeschaltet wird
Wenn Sie ein Boot-Laufwerk erhalten
AH = 33H
AL = 05H
Rückgabewert: Bei Aufruf mit AL = 00H oder 01H
DL = 00H Unterbrechungsflag ist AUS
01H Unterbrechungsflagge ist EIN
Bei Aufruf mit AL = 05H
DL = Startlaufwerk (1 = A, 2 = B usw.)
Kommentare:
Diese Funktion ruft den Status des Break-Flags des Betriebssystems ab oder ändert ihn, was Einfluss auf die Strg-C-Prüfung während Funktionsaufrufen hat.
INT 21H (0x21)
Funktion 34H (0x34 oder 52) --> Reserviert
INT 21H (0x21)
Funktion 35H (0x35 oder 53) --> Interrupt-Vektor abrufen
Anruf mit: AH = 35H
AL = Interruptnummer
Gibt zurück: ES: BX = Segment: Offset des Interrupt-Handlers
Kommentare:
Diese Funktion ruft die Adresse der aktuellen Interrupt-Handler-Routine für den angegebenen Maschineninterrupt ab.
INT 21H (0x21)
Funktion 36H (0x36 oder 54) --> Informationen zur Laufwerkszuordnung abrufen
Anruf mit: AH = 36H
DL = Laufwerkscode (0 Standard, 1 = A usw.)
Rückgabewert: Bei erfolgreicher Funktion
AX = Sektor pro Cluster
BX = Anzahl der verfügbaren Cluster
CX = Bytes pro Sektor
DX = Cluster pro Laufwerk
Bei erfolgloser Funktion (Laufwerk ungültig)
AX = FFFFH
Kommentare:
Diese Funktion ruft ausgewählte Informationen über ein Laufwerk ab.
Diese Funktion ist bei der Programmierung zur Datenwiederherstellung und Festplattenfehlerbehebung sehr wichtig, da mit ihr die Kapazität des Laufwerks, der verbleibende freie Speicherplatz und viele andere wichtige Dinge berechnet werden können.
INT 21H (0x21)
Funktion 37H (0x37 oder 55) --> Reserviert
INT 21H (0x21)
Funktion 38H (0x38 oder 56) --> Länderinformationen abrufen oder festlegen
Rufen Sie an mit: Wenn Sie Länderinformationen erhalten
AH = 38H
AL = 0, um aktuelle Länderinformationen zu erhalten
1-FEH, um Informationen zu erhalten für
Länder mit Code <255
FFH, um Informationen für Länder zu erhalten
mit Code >=255
BX = Ländercode, wenn AL = FFH
DS:DX = Segment: Offset des Puffers für zurückgegebene Informationen
Bei Einstellung der aktuellen Landesvorwahl
AH = 38H
AL = 1-FEH, Ländercode für Länder mit Code <255
FFH, für Länder mit Code >=255
BX = Ländercode, wenn AL = 0FFH
DX = FFFFH
Widerrufsfolgen:
Wenn die Funktion erfolgreich ist
Carry-Flag = löschen
Und wenn Sie Informationen zur Internationalisierung erhalten
BX = Ländercode
DS: DX = Segment: Offset des Puffers, der Internationalisierungsinformationen enthält.
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Mit dieser Funktion können Sie internationale Informationen für das aktuelle oder angegebene Land abrufen oder die aktuelle Landesvorwahl festlegen.
INT 21H (0x21)
Funktion 39H (0x39 oder 57) --> Verzeichnis erstellen
Anruf mit: AH = 39H
DS: DX = Segment: Offset des ASCIIZ-Pfadnamens
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion erstellt ein Verzeichnis mit dem angegebenen Laufwerk und Pfad.
ASCIIZ ist bekannt als die Folge von ASCII-Zeichen, die mit Null oder Null, Byte endet. |
INT 21H (0x21)
Funktion 3AH (0x3A oder 58) --> Verzeichnis löschen
Call mit: AH = 3AH
DS: DX = Segment: Offset des ASCIIZ-Pfadnamens
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion entfernt ein Verzeichnis unter Verwendung des angegebenen Laufwerks und Pfads. Wenn ein Element des Pfadnamens nicht vorhanden ist, das Verzeichnis nicht leer ist, der Zugriff verweigert wird oder das angegebene Verzeichnis gleichzeitig das aktuelle Verzeichnis ist, schlägt die Funktion zum Löschen des Verzeichnisses fehl.
INT 21H (0x21)
Funktion 3BH (0x3B oder 59) --> Aktuelles Verzeichnis festlegen
Rufen Sie mit: AH = 3BH
DS: DX = Segment: Offset des ASCIIZ-Pfadnamens
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion legt das aktuelle oder Standardverzeichnis unter Verwendung des angegebenen Laufwerks und Pfads fest. Wenn der angegebene Pfad oder ein beliebiges Element des Pfads nicht vorhanden ist, schlägt die Funktion fehl.
INT 21H (0x21)
Funktion 3CH (0x3C oder 60) --> Datei erstellen
Anruf mit: AH = 3CH
CX = Dateiattribut, wobei Attribut
Signifikanzbits können kombiniert werden.
Die Bedeutung der Bits ist in der folgenden Tabelle aufgeführt:
Bit(s) |
Bedeutung (sofern festgelegt) |
0 |
Schreibgeschützt |
1 |
Versteckt |
2 |
System |
3 |
Datenträgerbezeichnung |
4 |
Reserviert (0) |
5 |
Archiv |
6 – 15 |
Reserviert (0) |
DS: DX = Segment: Offset von ASCIIZ
Pfadname
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AX = Griff
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Wenn ein ASCIIZ-Pfadname angegeben wird, erstellt diese Funktion eine neue Datei im angegebenen oder Standardverzeichnis auf dem angegebenen oder Standardlaufwerk. Wenn die angegebene Datei bereits vorhanden ist, wird sie auf die Länge Null gekürzt. In beiden Fällen wird die Datei geöffnet und ein Handle zurückgegeben, das vom Programm für den späteren Zugriff auf die Datei verwendet werden kann.
Wenn ein beliebiges Element des Pfadnamens nicht vorhanden ist oder die Datei im Stammverzeichnis erstellt wird und das Stammverzeichnis voll ist oder der Zugriff verweigert wird oder sich bereits eine Datei mit schreibgeschütztem Attribut im angegebenen Verzeichnis befindet, schlägt die Funktion zum Erstellen der Datei fehl.
INT 21H (0x21)
Funktion 3DH (0x3D oder 61) --> Datei öffnen
Anruf mit: AH = 3DH
AL = Zugriffsmodus
Die Bedeutung der Zugriffsmodus-Bits ist in der folgenden Tabelle aufgeführt:
Gebisse |
Bedeutung |
0 – 2 |
Zugriffsmodus
000 = Lesezugriff
001 = Schreibzugriff
010 = Lese-/Schreibzugriff |
3 |
Reserviert (0) |
4 – 6 |
Freigabemodus
000 = Kompatibilitätsmodus
001 = alles verweigern
010 = Schreiben verweigern
011 = Lesen verweigern
100 = keinen verweigern |
7 |
Vererbungsflag
0 = Kindprozess erbt Handle
1 = Kindprozess erbt Handle nicht |
DS: DX = Segment: Offset des ASCIIZ-Pfadnamens
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AX = Griff
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Wenn ein ASCIIZ-Pfadname angegeben ist, öffnet diese Funktion die angegebene Datei im angegebenen oder Standardverzeichnis auf dem angegebenen oder Standardlaufwerk. Es wird ein Handle zurückgegeben, das vom Programm für den späteren Zugriff auf die Datei verwendet werden kann.
INT 21H (0x21)
Funktion 3EH (0x3E oder 62) --> Datei schließen
Anruf mit: AH = 3EH
BX = Griff
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion leert alle internen Puffer, die mit der Datei verknüpft sind, auf die Festplatte, schließt die Datei und gibt den Handle zur Wiederverwendung frei, wenn er zuvor geöffnet oder mit einem bestimmten Handle erfolgreich erstellt wurde. Wenn die Datei geändert wurde, werden Zeit- und Datumsstempel sowie Dateigröße im Verzeichniseintrag der Datei aktualisiert.
INT 21H (0x21)
Funktion 3FH (0x3F oder 63) --> Datei oder Gerät lesen
Anruf mit: AH = 3FH
BX = Griff
CX = Anzahl der zu lesenden Bytes
DS: DX = Segment: Offset des Puffers
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AX = übertragenes Byte
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion überträgt Daten an der aktuellen Dateizeigerposition aus der Datei in den Puffer und aktualisiert dann die Dateizeigerposition für einen gegebenen gültigen Dateihandle aus einem vorherigen Öffnungs- oder Erstellungsvorgang, eine Pufferadresse und eine Länge in Bytes.
INT 21H (0x21)
Funktion 40H (0x40 oder 64) --> Datei oder Gerät schreiben
Anruf mit: AH = 40H
BX = Griff
CX = Anzahl der zu schreibenden Bytes
DS: DX = Segment: Offset des Puffers
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AX = übertragenes Byte
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion überträgt Daten aus dem Puffer in die Datei und aktualisiert dann die Dateizeigerposition für einen gültigen Dateihandle aus einem vorherigen Öffnungs- oder Erstellungsvorgang, eine Pufferadresse und eine Länge in Bytes. Wenn die Funktion mit CX = 0 aufgerufen wird, wird die Datei bis zur aktuellen Dateizeigerposition gekürzt oder verlängert.
INT 21H (0x21)
Funktion 41H (0x41 oder 65) --> Datei löschen
Call mit: AH = 41H
DS: DX = Segment: Offset des ASCIIZ-Pfadnamens
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion löscht eine Datei vom Standarddatenträger und -verzeichnis oder vom angegebenen Datenträger. Die Funktion löscht eine Datei, indem sie das erste Zeichen ihres Dateinamens im Stammverzeichnis durch das Zeichen E5H (0xE5) ersetzt und die Cluster der Datei für die neuen Daten in der Dateizuordnungstabelle verfügbar macht. Bis dahin werden die in diesen Clustern gespeicherten Daten nicht überschrieben.
INT 21H (0x21)
Funktion 42H (0x42 oder 66) --> Dateizeiger setzen
Anruf mit: AH = 42H
AL = Methodencode
00H absoluter Offset vom Dateianfang
01H signierter Offset von der aktuellen Datei
Zeiger
02H signierter Offset vom Dateiende
BX = Griff
CX = signifikanteste Hälfte des Offsets
DX = niedrigstwertige Hälfte des Offsets
Gibt zurück: wenn die Funktion erfolgreich ist
Carry-Flag = löschen
DX = signifikanteste Hälfte der resultierenden Datei
Zeiger
AX = niederwertigste Hälfte der resultierenden Datei
Zeiger
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion legt die Position des Dateizeigers relativ zum Dateiende, zum Dateiende oder zur aktuellen Dateiposition fest.
INT 21H (0x21)
Funktion 43H (0x43 oder 67) --> Dateiattribute abrufen oder festlegen
Anruf mit: AH = 43H
AL = 00H, um Attribute zu erhalten
01H zum Festlegen von Attributen
CX = Dateiattribut, wenn AL=01H. Bits können kombiniert werden
DS: DX = Segment: Offset des ASCIIZ-Pfadnamens
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
CX = Dateiattribut
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion erhält oder ändert die Attribute einer Datei (schreibgeschützt, versteckt, System oder Archiv) oder eines Verzeichnisses. Die Bedeutung der Bits für verschiedene Attribute finden Sie in der zuvor angegebenen Tabelle mit den Bitbedeutungen.
INT 21H (0x21)
Funktion 44H (0x44 oder 68) --> Ein-/Ausgabesteuerung (I/O Ctrl)
Diese Funktion stellt einen direkten Kommunikationspfad zwischen einem Anwendungsprogramm und einem Gerätetreiber bereit. Sie ermöglicht es einem Programm, hardwareabhängige Informationen abzurufen und Vorgänge anzufordern, die von anderen MS-DOS-Funktionsaufrufen nicht unterstützt werden.
Die Unterfunktionen der Eingabe- und Ausgabesteuerung sind in der folgenden Tabelle aufgeführt:
Unterfunktion |
Vorgangsname |
00 Uhr |
Geräteinformationen abrufen |
01 Uhr |
Geräteinformationen festlegen |
02 Uhr |
Empfangen Sie Steuerdaten vom Zeichengerätetreiber |
03 Uhr |
Steuerdaten an den Zeichengerätetreiber senden |
04 Uhr |
Empfangen Sie Steuerdaten vom Blockgerätetreiber |
05 Uhr |
Steuerdaten an Blockgerätetreiber senden |
06 Uhr |
Eingangsstatus prüfen |
07 Uhr |
Ausgabestatus prüfen |
08 Uhr |
Überprüfen Sie, ob das Blockgerät entfernbar ist |
09 Uhr |
Überprüfen, ob das Blockgerät remote ist |
0AH (10) |
Überprüfen Sie, ob der Griff eine Fernbedienung ist |
0BH (11) |
Anzahl der Wiederholungsversuche für die Freigabe ändern |
0CH (12)
|
Generische E/A-Steuerung für Zeichengeräte
Wert |
Beschreibung |
CL = 45H |
Iterationsanzahl festlegen |
CL = 4AH |
Codepage auswählen |
CL = 4CH |
Beginnen Sie mit der Codepage-Vorbereitung |
CL = 4DH |
Codepage-Vorbereitung beenden |
CL = 5FH |
Anzeigeinformationen festlegen |
CL = 65H |
Iterationsanzahl abrufen |
CL = 6AH |
Ausgewählte Codepage abfragen |
CL = 6BH |
Abfragevorbereitungsliste |
CL = 7FH |
Anzeigeinformationen abrufen |
|
0DH (13)
|
Generische E/A-Steuerung für Blockgeräte
Wert |
Beschreibung |
CL = 40H |
Geräteparameter festlegen |
CL = 41H |
Track schreiben |
CL = 42H |
Track formatieren und überprüfen |
CL = 47H |
Zugriffsflag setzen |
CL = 60H |
Geräteparameter abrufen |
CL = 61H |
Titel lesen |
CL = 62H |
Titel überprüfen |
CL = 67H |
Zugriffsflagge abrufen |
|
0EH (14) |
Logische Laufwerkszuordnung abrufen |
0FH (15) |
Festlegen der logischen Laufwerkszuordnung |
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 00H (0x00) I/O Ctrl --> Geräteinformationen abrufen
Anruf mit: AH = 44H
AL = 00H
BX = Griff
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
DX = Geräteinformationswort
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion gibt ein Geräteinformationswort für die Datei oder das Gerät zurück, das mit dem angegebenen Handle verknüpft ist.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 01H (0x01) I/O Ctrl --> Geräteinformationen setzen
Anruf mit: AH = 44H
AL = 01H
BX = Griff
DX = Geräteinformationswort
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion der Funktion 44H von INT 21H setzt bestimmte Flags für einen Handle, der einem Zeichengerät zugeordnet ist. Diese Unterfunktion darf nicht für einen Handle verwendet werden, der einer Datei zugeordnet ist.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 02H (0x02) I/O Ctrl --> Steuerdaten lesen Zeichengerätetreiber
Anruf mit: AH = 44H
AL = 02H
BX = Griff
CX = Anzahl der zu lesenden Bytes
DS: DX = Segment: Offset des Puffers
Gibt zurück: Wenn die Funktion erfolgreich ist
Carry-Flag = löschen
AX = gelesene Bytes
Und der Puffer enthält Steuerdaten vom Treiber
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Es liest Steuerdaten von einem Zeichengerätetreiber. Die Länge und der Inhalt der Daten werden für jeden Gerätetreiber angegeben und folgen keinem Standardformat. Diese Funktion führt nicht unbedingt zu einer Eingabe vom physischen Gerät.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 03H (0x03) I/O Ctrl --> Steuerdaten schreiben Zeichengerätetreiber
Anruf mit: AH = 44H
AL = 03H
BX = Griff
CX = Anzahl der zu schreibenden Bytes
DS: DX = Segment: Datenoffset
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AX = übertragene Bytes
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion überträgt Steuerdaten von einer Anwendung an einen Zeichengerätetreiber. Länge und Inhalt der Daten sind spezifisch für jeden Gerätetreiber und folgen keinem Standardformat. Diese Funktion führt nicht unbedingt zu einer Ausgabe an das physische Gerät.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 04H (0x04) I/O Ctrl --> Steuerdaten Blockgerätetreiber lesen
Anruf mit: AH = 44H
AL = 04H
BL = Gerätecode (0 = Standard, 1 = A, 2 = B usw.)
CX = Anzahl der zu lesenden Bytes
DS: DX = Segment: Offset des Puffers
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AX = übertragene Bytes
Und der Puffer enthält Steuerdaten vom Gerätetreiber
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion überträgt Steuerdaten von einem Blockgerätetreiber direkt in den Puffer eines Anwendungsprogramms. Länge und Inhalt der Daten sind gerätespezifisch und folgen keinem Standardformat. Diese Funktion führt nicht notwendigerweise zu einer Eingabe vom physischen Gerät.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 05H (0x05) I/O Ctrl --> Schreibsteuerdaten Blockgerätetreiber
Anruf mit: AH = 44H
AL = 05H
BL = Gerätecode (0 = Standard, 1 = A, 2 = B usw.)
CX = Anzahl der zu schreibenden Bytes
DS: DX = Segment: Datenoffset
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AX = übertragene Bytes
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion überträgt Steuerdaten von einem Anwendungsprogramm direkt an einen Blockgerätetreiber. Länge und Inhalt der Steuerdaten sind gerätespezifisch und folgen keinem Standardformat. Diese Funktion führt nicht zwangsläufig zu einer Ausgabe an das physische Gerät.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 06H (0x06) I/O Ctrl --> Eingangsstatus prüfen
Anruf mit: AH = 44H
AL = 06H
BX = Griff
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Und für ein Gerät:
AL = 00H, wenn Gerät nicht bereit
FFH, wenn Gerät bereit
Für eine Datei:
AL = 00H, wenn Dateizeiger am EOF
FFH, wenn Dateizeiger nicht am EOF
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Es wird ein Code zurückgegeben, der angibt, ob das mit einem Handle verknüpfte Gerät oder die zugehörigen Dateien zur Eingabe bereit sind.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 07H (0x07) I/O Ctrl --> Ausgangsstatus prüfen
Anruf mit: AH = 44H
AL = 07H
BX = Griff
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Und für ein Gerät:
AL = 00H, wenn Gerät nicht bereit
FFH, wenn Gerät bereit
Für eine Datei:
AL = FFH
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Es wird ein Code zurückgegeben, der angibt, ob das einem Handle zugeordnete Gerät zur Ausgabe bereit ist.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 08H (0x08) I/O Ctrl --> prüfen, ob Blockgerät entfernbar ist
Anruf mit: AH = 44H
AL = 08H
BL = Laufwerksnummer (0 = Standard, 1=A, 2=B usw.)
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AL = 00H, wenn das Medium entfernbar ist
01H, wenn das Medium nicht entfernbar ist
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion prüft, ob das angegebene Blockgerät ein entfernbares Speichermedium, beispielsweise eine Diskette, enthält. Wenn eine Datei auf einem bestimmten Laufwerk nicht wie erwartet gefunden wird, kann ein Programm diese Unterfunktion verwenden, um zu bestimmen, ob der Benutzer aufgefordert werden soll, eine andere Diskette einzulegen.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 09H (0x09) I/O Ctrl --> prüfen, ob Blockgerät remote ist
Anruf mit: AH = 44H
AL = 09H
BL = Laufwerksnummer (0 = Standard, 1=A, 2=B usw.)
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
DX = Geräteattributwort
Bit 12 = 0, wenn das Laufwerk lokal ist
= 1, wenn das Laufwerk remote ist
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion prüft, ob das angegebene Blockgerät lokal (an den Computer angeschlossen, auf dem das Programm ausgeführt wird) oder remote (auf einen Netzwerkserver umgeleitet) ist.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0AH (0x0A oder 10) I/O Ctrl --> prüfen, ob Handle remote ist
Anruf mit: AH = 44H
AL = 0AH
BX = Griff
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
DX = Attributwort für Datei oder Gerät
Bit 15 = 0 wenn lokal
1 wenn Remote
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Dabei wird geprüft, ob sich der angegebene Handle auf eine Datei oder ein Gerät bezieht, das lokal (auf dem PC, auf dem das Programm ausgeführt wird) oder remote (auf einem Netzwerkserver) ist.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0BH (0x0B oder 11) I/O Ctrl --> Anzahl der Wiederholungsversuche für gemeinsame Nutzung ändern
Anruf mit: AH = 44H
AL = 0BH
CX = Verzögerungen pro Wiederholungsversuch (Standard = 1)
DX = Anzahl der Wiederholungsversuche (Standard = 3)
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion legt fest, wie oft MS-DOS nach einem Fehler aufgrund einer Dateifreigabeverletzung einen Festplattenvorgang erneut versucht, bevor es dem anfordernden Prozess einen Fehler zurückgibt. Diese Unterfunktion ist nur verfügbar, wenn das Dateifreigabemodul geladen ist.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0CH (0x0C oder 12) I/O Ctrl generische I/O-Steuerung für Zeichengeräte
Anruf mit: AH = 44H
AL = 0CH
BX = Griff
CH =Kategorie (Haupt)-Code:
00H = unbekannt
01H = COM1, COM2, COM3 oder COM4
03H = CON (Tastatur und Display)
05H = LPT1, LPT2 oder LPT3
CL = Funktionscode (Nebenfunktionscode):
45H = Iterationsanzahl festlegen
4AH = Codepage auswählen
4CH = Codepage-Vorbereitung starten
4DH = Codepage-Vorbereitung beenden
5FH = Anzeigeinformationen festlegen
65H = Iterationsanzahl abrufen
6AH = Ausgewählte Codepage abfragen
6BH = Abfrage-Vorbereitungsliste
7FH = Anzeigeinformationen abrufen
DS: DX = Segment: Offset des Parameterblocks
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Und wenn mit CL = 65H, 6AH, 6BH oder 7FH gecallt wird
DS: DX = Segment: Offset des Parameterblocks
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Es bietet einen allgemeinen Mechanismus für die Kommunikation zwischen Anwendungsprogrammen und Zeichengerätetreibern.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0DH (0x0D oder 13) I/O Ctrl --> generische I/O-Steuerung für Blockgeräte
Anruf mit: AH = 44H
AL = 0DH
BL = Laufwerkscode (0 = Standard, 1 = A, 2 = B usw.)
CH = Kategorie- (Haupt-)Code:
08H = Diskettenlaufwerk
CL = Funktionscode (Nebenfunktionscode):
40H = Antriebsparameter einstellen
41H = Spur schreiben
42H = Track formatieren und überprüfen
47H = Zugriffsflag setzen
60H = Geräteparameter abrufen
61H = Spur lesen
62H = Track überprüfen
67H = Zugriffsflagge abrufen
DS: DX = Segment: Offset des Parameterblocks
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Und wenn mit CL = 60H oder 61H aufgerufen wird
DS: DX = Segment: Offset des Parameterblocks
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion bietet einen allgemeinen Mechanismus für die Kommunikation zwischen Anwendungsprogrammen und Blockgerätetreibern. Ermöglicht einem Programm, Geräteparameter für ein logisches Laufwerk zu prüfen oder zu ändern und Festplattenspuren hardwareunabhängig zu lesen, zu schreiben, zu formatieren und zu überprüfen.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0EH (0x0E oder 14) I/O Ctrl -->> logische Laufwerkszuordnung abrufen
Anruf mit: AH = 44H
AL = 0EH
BL = Laufwerkscode (0 = Standard, 1 = A, 2 = B usw.)
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AL = Zuordnungscode
00H, wenn nur ein logischer Laufwerkscode
dem Blockgerät zugewiesen
01H-1AH logischer Laufwerkscode (1=A,
2=B usw.), das dem Blockgerät zugeordnet ist
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX =Fehlercode
Kommentare:
Es gibt den logischen Laufwerkscode zurück, der zuletzt für den Zugriff auf das angegebene Blocklaufwerk verwendet wurde.
INT 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0FH (0x0F oder 15) I/O Ctrl --> logische Laufwerkszuordnung festlegen
Anruf mit: AH = 44H
AL = 0FH
BL = Laufwerkscode (0 = Standard, 1 = A, 2 = B usw.)
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AL = Zuordnungscode
00H, wenn nur ein logischer Laufwerkscode
dem Blockgerät zugewiesen
01H-1AH, logischer Laufwerkscode (1=A,
2=B, usw.) abgebildet auf die
Gerät blockieren
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion legt den nächsten logischen Laufwerkscode fest, der zum Verweisen auf ein Blockgerät verwendet wird.
INT 21H (0x21)
Funktion 45H (0x45 oder 69) --> Handle duplizieren
Anruf mit: AH = 45H
BX = zu duplizierender Griff
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AX = neuer Griff
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion gibt einen neuen Handle zurück, der für ein aktuell geöffnetes Gerät oder eine aktuell geöffnete Datei auf dasselbe Gerät oder dieselbe Datei an derselben Position verweist.
INT 21H (0x21)
Funktion 46H (0x46 oder 70) --> Umleitungs-Handle
Anruf mit: AH = 46H
BX = Handle für Datei oder Gerät
CX = umzuleitender Handle
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Wenn zwei Handles angegeben sind, bewirkt diese Funktion, dass das zweite Handle auf dasselbe Gerät oder dieselbe Datei am selben Speicherort verweist wie das erste Handle. Das zweite Handle wird dann als umgeleitet bezeichnet.
INT 21H (0x21)
Funktion 47H (0x47 oder 71) --> Aktuelles Verzeichnis abrufen
Anruf mit: AH = 47H
DL = Laufwerkscode (0 =Standard, 1=A,
2=B usw.)
DS: SI = Segment: Offset des 64-Byte-Puffers
Gibt zurück: Wenn die Funktion erfolgreich ist
Carry-Flag = löschen
Und der Puffer wird mit dem vollständigen Pfadnamen vom Stammverzeichnis des aktuellen Verzeichnisses gefüllt.
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion ruft eine ASCIIZ-Zeichenfolge ab, die den Pfad vom Stammverzeichnis zum aktuellen Verzeichnis und den Namen dieses Verzeichnisses beschreibt.
INT 21H (0x21)
Funktion 48H (0x48 oder 72) --> Speicherblock allokieren
Anruf mit: AH = 48H
BX = Anzahl der Speicherabsätze
nötig
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Ax = Basissegmentadresse des zugewiesenen
Block
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
BX = Größe des größten verfügbaren Blocks
(Absätze)
Kommentare:
Es reserviert einen Speicherblock und gibt einen Zeiger auf den Anfang des reservierten Bereichs zurück.
INT 21H (0x21)
Funktion 49H (0x49 oder 73) --> Speicherblock freigeben
Anruf mit: AH = 49H
ES = freizugebendes Blocksegment
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Mit dieser Funktion wird ein Speicherblock freigegeben und für die Verwendung durch andere Programme verfügbar gemacht. Die Funktion schlägt fehl oder kann unvorhersehbare Systemfehler verursachen, wenn das Programm einen Speicherblock freigibt, der ihm nicht gehört, oder wenn die im Register ES übergebene Segmentadresse keine gültige Basisadresse für einen vorhandenen Speicherblock ist.
INT 21H (0x21)
Funktion 4AH (0x4A oder 74) --> Speicherblockgröße ändern
Call mit: AH = 4AH
BX = gewünschte neue Blockgröße in Absätzen
ES = zu änderndes Blocksegment
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
BX = maximal verfügbare Blockgröße
(Absätze)
Kommentare:
Diese Funktion verkleinert oder erweitert einen Speicherblock dynamisch, je nach den Anforderungen eines Anwendungsprogramms.
INT 21H (0x21)
Funktion 4BH (0x4B oder 75) --> Programm ausführen (EXEC)
Rufen Sie mit: AH = 4BH
AL = Unterfunktion
00H = Programm laden und ausführen
03H = Overlay laden
ES: BX = Segment: Offset des Parameterblocks
DS: DX = Segment: Offset des ASCIIZ-Programms
Pfadname
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Register werden in der üblichen Weise aufbewahrt.
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Mit dieser Funktion kann ein Anwendungsprogramm ein anderes Programm ausführen und nach dessen Abschluss die Kontrolle zurückerlangen. Kann auch zum Laden von Overlays verwendet werden, obwohl diese Verwendung selten ist.
INT 21H (0x21)
Funktion 4CH (0x4C oder 76) --> Prozess mit Returncode beenden
Anruf mit: AH = 4CH
AL = Rückgabecode
Rückgaben: Nichts
Kommentare:
Diese Funktion beendet den aktuellen Prozess und übergibt einen Rückgabecode an den übergeordneten Prozess. Dies ist eine von mehreren Methoden, mit denen ein Programm einen endgültigen Abschluss durchführen kann.
INT 21H (0x21)
Funktion 4DH (0x4D oder 77) --> Rückgabecode abrufen
Anruf mit: AH = 4DH
Gibt zurück: AH = Exit-Typ
00H, wenn normale Beendigung durch INT 20H, INT 21H
Funktion 00H oder INT 21H Funktionen 4CH
01H wenn Beendigung durch Benutzereingabe von Strg-C
02H wenn Beendigung durch Kritischer-Fehler-Handler
03H wenn Beendigung durch INT21H Funktion 31H oder
INT 27H |
AL = vom Kindprozess übergebener Rückgabecode
(0 wenn das Kind durch INT 20H beendet wurde,
INT 21H Funktion 00H oder INT 27H)
Kommentare:
Diese Funktion wird von einem übergeordneten Prozess nach der erfolgreichen Ausführung eines EXEC-Aufrufs (INT 21H Funktion 4BH) verwendet, um den Rückgabecode und den Beendigungstyp eines untergeordneten Prozesses abzurufen.
INT 21H (0x21)
Funktion 4EH (0x4E oder 78) --> Erste Datei suchen
Anruf mit: AH = 4EH
CX = Suchattribut (Bits können kombiniert werden)
DS: DX = Segment: Offset des ASCIIZ-Pfadnamens
Rückgabewert: Wenn die Funktion erfolgreich war und eine passende Datei gefunden wurde
Carry-Flag = löschen
Und die Suchergebnisse im aktuellen Datenträgerübertragungsbereich lauten wie folgt:
Änderung(en) |
Beschreibung |
00H-14H |
Reserviert (0) |
15 Uhr |
Attribut der übereinstimmenden Datei oder des übereinstimmenden Verzeichnisses |
16H-17H |
Dateizeit
Bits 00H-04H = 2-Sekunden-Schritte (0-29)
Bits 05H-0AH = Minuten (0-59)
Bits 0BH-0FH = Stunden (0-23) |
18H-19H
|
Dateidatum
Bits 00H-04H = Tag (1-31)
Bits 05H-08H = Monat (1-12)
Bits 09H-0FH = Jahr (relativ zu 1980) |
1AH-1DH |
Dateigröße |
1EH-2AH |
ASCIIZ-Dateiname und -Erweiterung |
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion durchsucht das Standard- oder angegebene Verzeichnis auf dem Standard- oder angegebenen Laufwerk nach der ersten passenden Datei für eine gegebene Dateispezifikation in Form einer ASCIIZ-Zeichenfolge. Informationen zur Bitbedeutung von Attributen finden Sie in der zuvor angegebenen Bitbedeutungstabelle.
INT 21H (0x21)
Funktion 4FH (0x4F oder 79) --> Nächste Datei suchen
Anruf mit: AH = 4FH
Gibt zurück: Wenn die Funktion erfolgreich ist und eine passende Datei gefunden wurde
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Wenn zuvor die Funktion INT 21H (Funktion 4EH) erfolgreich aufgerufen wurde, sucht diese Funktion die nächste Datei im Standard- oder angegebenen Verzeichnis auf dem Standard- oder angegebenen Laufwerk, die der ursprünglichen Dateispezifikation entspricht.
INT 21H (0x21)
Funktion 50H (0x50 oder 80) --> Reserviert
INT 21H (0x21)
Funktion 51H (0x51 oder 81) --> Reserviert
INT 21H (0x21)
Funktion 52H (0x52 oder 82) --> Reserviert
INT 21H (0x21)
Funktion 53H (0x53 oder 83) --> Reserviert
INT 21H (0x21)
Funktion 54H (0x54 oder 84) --> Prüfflag abrufen
Anruf mit: AH = 54H
Gibt zurück: AL = aktueller Wert des Prüfflags
00H wenn Überprüfung deaktiviert ist
01H wenn Überprüfung ein
Kommentare:
Diese Funktion ruft den aktuellen Wert des Systemüberprüfungsflags (Lesen nach Schreiben) ab.
INT 21H (0x21)
Funktion 55H (0x55 oder 85) --> Reserviert
INT 21H (0x21)
Funktion 56H (0x56 oder 86) --> Datei umbenennen
Anruf mit: AH = 56H
DS: DX = Segment: Offset des aktuellen ASCIIZ
Pfadname
ES: DI = Segment: Offset des neuen ASCIIZ
Pfadname
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion benennt eine Datei um und/oder verschiebt ihren Verzeichniseintrag in ein anderes Verzeichnis auf derselben Festplatte. In MS-DOS-Versionen 3.0 und höher kann diese Funktion auch zum Umbenennen von Verzeichnissen verwendet werden.
Wenn ein beliebiges Element des Pfadnamens nicht existiert oder eine Datei mit dem neuen Pfadnamen bereits vorhanden ist oder die aktuelle Pfadnamenangabe ein anderes Laufwerk enthält als der neue Pfadname oder die Datei in das Stammverzeichnis verschoben wird und das Stammverzeichnis voll ist oder der Benutzer nicht über ausreichende Rechte verfügt, schlägt die Funktion zum Umbenennen von Dateien fehl.
INT 21H (0x21)
Funktion 57H (0x57 oder 87) --> Dateidatum und -uhrzeit abrufen oder festlegen
Anrufen mit: Wenn Sie Datum und Uhrzeit erhalten möchten
AH = 57H
AL = 00H
BX = Griff
Bei der Einstellung von Datum und Uhrzeit
AH = 57H
AL = 01H
BX = Griff
CX = Zeit
Bits 00H-04H = 2-Sekunden-Schritte (0-29)
Bits 05H-0AH = Minuten (0-59)
Bits 0BH-0FH = Stunden (0-23)
DX = Datum
Bits 00H-04H = Tag (1-31)
Bits 05H-08H = Monat (1-12)
Bits 09H-0FH = Jahr (bezogen auf 1980)
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
und, wenn mit AL = 00H aufgerufen
CX = Zeit
DX = Datum
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion ruft den Datums- und Zeitstempel im Stammverzeichniseintrag der Datei ab oder ändert ihn.
INT 21H (0x21)
Funktion 58H (0x58 oder 88) --> Zuordnungsstrategie abrufen oder festlegen
Anrufen mit: Bei Erhalt des Strategiecodes
AH = 58H
AL = 00H
Wenn Sie den Strategiecode festlegen
AH = 58H
AL = 01H
BX = gewünschter Strategiecode
00H = erste Anpassung
01H = beste Anpassung
02H = letzte Anpassung
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
und, wenn mit AL = 00H aufgerufen
AX = aktueller Strategiecode
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Ruft den Code ab oder ändert ihn, der die aktuelle MS-DOS-Strategie zum Zuweisen von Speicherblöcken angibt. Die standardmäßige MS-DOS-Speicherzuweisungsstrategie ist First Fit (Code 0).
Bei der First-Fit-Speicherzuweisung durchsucht MS-DOS die verfügbaren Speicherblöcke von der niedrigsten bis zur höchsten Adresse und weist den ersten zu, der groß genug ist, um die Blockzuweisungsanforderung zu erfüllen.
Bei der Zuordnungsstrategie „Best Fit“ durchsucht MS-DOS alle verfügbaren Speicherblöcke und weist den kleinsten verfügbaren Block zu, der die Anforderung erfüllt, unabhängig von seiner Position.
Bei der Speicherzuweisungsstrategie „Last Fit“ durchsucht MS-DOS die verfügbaren Speicherblöcke von den höchsten zu den niedrigsten Adressen und weist den höchsten zu, der groß genug ist, um die Blockzuweisungsanforderung zu erfüllen.
INT 21H (0x21)
Funktion 59H (0x59 oder 89) --> Erweiterte Fehlerinformationen abrufen
Anruf mit: AH = 59H
BX = 00H
Rückgabewert: AX = erweiterter Fehlercode
Unten finden Sie eine Tabelle mit Fehlercodes:
Fehlercode |
Fehler |
01 Uhr |
Funktionsnummer ungültig |
02 Uhr |
Datei nicht gefunden |
03 Uhr |
Pfad nicht gefunden |
04 Uhr |
zu viele offene Dateien |
05 Uhr |
Zugriff verweigert |
06 Uhr |
Handle ungültig |
07 Uhr |
Speicherkontrollblöcke zerstört |
08 Uhr |
nicht genügend Arbeitsspeicher |
09 Uhr |
Speicherblockadresse ungültig |
0AH (10) |
Umgebung Ungültig |
0BH (11) |
Format ungültig |
0CH (12) |
Zugangscode ungültig |
0DH (13) |
Daten ungültig |
0EH (14) |
unbekannte Einheit |
0FH (15) |
Diskettenlaufwerk ungültig |
10 Std. (16) |
hat versucht, das aktuelle Verzeichnis zu entfernen |
11 Std. (17) |
nicht dasselbe Gerät |
12 Std. (18) |
keine Dateien mehr |
13 Uhr (19) |
Festplatte schreibgeschützt |
14 Std. (20) |
unbekannte Einheit |
15 Std. (21) |
Laufwerk nicht bereit |
16H (22) |
unbekannter Befehl |
17 Uhr (23) |
Datenfehler (CRC) |
18H (24) |
ungültige Länge der Anforderungsstruktur |
19 Uhr (25) |
Fehler suchen |
1AH (26) |
unbekannter Medientyp |
1BH (27) |
Sektor nicht gefunden |
1 Kanal (28) |
Drucker hat kein Papier mehr |
1DH (29) |
Schreibfehler |
1EH (30) |
Fehler lesen |
1FH (31) |
allgemeines Versagen |
20 Std. (32) |
Freigabeverstoß |
21 Uhr (33) |
Sperrverletzung |
22H (34) |
Datenträgeränderung ungültig |
23 Std. (35) |
FCB nicht erreichbar |
24 Std. (36) |
Freigabepuffer überschritten |
25-31 Uhr |
reserviert |
32H (50) |
nicht unterstützte Netzwerkanforderung |
33H (51) |
Remote-Computer hört nicht zu |
34H (52) |
doppelter Name im Netzwerk |
35H (53) |
Netzwerkname nicht gefunden |
36H (54) |
Netzwerk ausgelastet |
37H (55) |
Gerät existiert nicht mehr im Netzwerk |
38H (56) |
Netto-BIOS-Befehlslimit überschritten |
39H (57) |
Fehler in der Netzwerkadapterhardware |
3AH (58) |
falsche Antwort vom Netzwerk |
3BH (59) |
unerwarteter Netzwerkfehler |
3CH (60) |
Remote-Adapter inkompatibel |
3DH (61) |
Druckwarteschlange voll |
3EH (62) |
nicht genügend Speicherplatz für die Druckdatei |
3FH (63) |
Datei drucken abgebrochen |
40 Stunden (64) |
Netzwerkname gelöscht |
41H (65) |
Netzwerkzugriff verweigert |
42H (66) |
falscher Netzwerkgerätetyp |
43H (67) |
Netzwerkname nicht gefunden |
44H (68) |
Netzwerknamenlimit überschritten |
45H (69) |
Netto-BIOS-Sitzungslimit überschritten |
46H (70) |
Dateifreigabe vorübergehend angehalten |
47H (71) |
Netzwerkanforderung nicht akzeptiert |
48 Stunden (72) |
Druck- oder Datenträgerumleitung angehalten |
49H-4FH |
reserviert |
50 Stunden (80) |
Datei existiert bereits |
51H (81) |
reserviert |
52H (82) |
Verzeichnis kann nicht erstellt werden |
53H (83) |
Fehler bei INT 24H (kritischer Fehler) |
54H (84) |
zu viele Umleitungen |
55H (85) |
doppelte Weiterleitung |
56H (86) |
ungültiges Passwort |
57H (87) |
ungültiger Parameter |
58H (88) |
Netzwerkgerätefehler |
59H (89) |
Funktion wird vom Netzwerk nicht unterstützt |
5AH (90) |
erforderliche Systemkomponente nicht installiert |
BH = Fehlerklasse
01 Uhr |
wenn keine Ressourcen mehr vorhanden sind (wie Speicher oder Handles) |
02 Uhr |
wenn kein Fehler vorliegt, sondern eine vorübergehende Situation (z. B. ein gesperrter Bereich in einer Datei), die voraussichtlich bald endet |
03 Uhr |
bei Autorisierungsproblem |
04 Uhr |
bei internem Fehler in der Systemsoftware |
05 Uhr |
bei einem Hardwarefehler |
06 Uhr |
wenn ein Fehler in der Systemsoftware nicht auf den aktiven Prozess zurückzuführen ist (z. B. fehlende Konfigurationsdateien) |
07 Uhr |
wenn ein Anwendungsprogrammfehler auftritt |
08 Uhr |
wenn Datei oder Element nicht gefunden |
09 Uhr |
wenn die Datei oder das Element einen ungültigen Typ oder ein ungültiges Format hat |
0AH (10) |
wenn Datei oder Element gesperrt |
0BH (11) |
wenn die falsche Diskette im Laufwerk ist, eine fehlerhafte Stelle auf der Diskette oder ein Problem mit dem Speichermedium vorliegt |
0CH (12) |
wenn das Element bereits vorhanden ist |
0DH (13) |
unbekannter Fehler |
BL = Aktion empfehlen
01 Uhr |
Eine angemessene Anzahl von Wiederholungsversuchen durchführen und den Benutzer dann auffordern, „Abbrechen“ oder „Ignorieren“ auszuwählen. |
02 Uhr |
eine angemessene Anzahl von Wiederholungsversuchen mit einer Verzögerung zwischen den Wiederholungsversuchen durchführen und den Benutzer dann auffordern, „Abbrechen“ oder „Ignorieren“ auszuwählen |
03 Uhr |
korrekte Informationen vom Benutzer einholen (normalerweise verursacht durch falsche Dateinamen oder Gerätespezifikationen) |
04 Uhr |
Anwendung mit Bereinigung abbrechen (d. h. das Programm möglichst geordnet beenden: Sperren freigeben, Dateien schließen usw.) |
05 Uhr |
sofortiges Beenden ohne Bereinigung durchführen |
06 Uhr |
Fehler ignorieren |
07 Uhr |
erneuter Versuch nach Benutzereingriff zur Beseitigung der Fehlerursache |
CH = Fehlerort
01H unbekannt
02H Blockgerät (Festplatte oder Festplattenemulator)
03H Netzwerk
04H Serielles Gerät
05H Speicher
ES: DI = ASCIIZ-Datenträgerbezeichnung der zu
einfügen, wenn AX = 0022H (ungültiger Datenträgerwechsel)
Kommentare:
Diese Funktion erhält detaillierte Fehlerinformationen nach einem vorherigen erfolglosen INT 21H-Funktionsaufruf, einschließlich der empfohlenen Abhilfemaßnahme.
INT 21H (0x21)
Funktion 5AH (0x5A oder 90) --> Temporäre Datei erstellen
Call mit: AH = 5AH
CX = Attribut (Bits können kombiniert werden)
DS: DX = Segment: Offset des ASCIIZ-Pfades
Gibt zurück: Wenn die Funktion erfolgreich ist
Carry-Flag = löschen
AX = Griff
DS: DX = Segment: Offset des kompletten ASCIIZ
Pfadname
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion erstellt eine Datei mit einem eindeutigen Namen im aktuellen oder angegebenen Verzeichnis auf dem Standard- oder angegebenen Laufwerk und gibt einen Handle zurück, den das Programm für spätere Zugriffe auf die Datei verwenden kann. Der für die Datei generierte Name wird auch in einem vom Programm angegebenen Puffer zurückgegeben.
Wenn ein beliebiges Element des Pfadnamens nicht vorhanden ist oder die Datei im Stammverzeichnis erstellt wird und das Stammverzeichnis voll ist, schlägt die Funktion fehl.
INT 21H (0x21)
Funktion 5BH (0x5B oder 91) --> Neue Datei erstellen
Call mit: AH = 5BH
CX = Attribut (Bits können kombiniert werden)
DS: DX = Segment: Offset des ASCIIZ-Pfadnamens
Gibt zurück: Wenn die Funktion erfolgreich ist
Carry-Flag = löschen
AX = Griff
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion erstellt eine Datei im angegebenen oder Standardverzeichnis auf dem angegebenen oder Standardlaufwerk und gibt einen Handle zurück, der vom Programm für den nachfolgenden Zugriff auf die Datei für einen angegebenen ASCIIZ-Pfadnamen verwendet werden kann.
Wenn bereits eine Datei mit gleichem Namen und Pfad existiert oder ein beliebiges Element des angegebenen Pfades nicht existiert oder die Datei im Stammverzeichnis erstellt wird und das Stammverzeichnis voll ist oder der Benutzer nicht über ausreichende Zugriffsrechte verfügt, schlägt die Funktion fehl.
INT 21H (0x21)
Funktion 5CH (0x5C oder 92) --> Dateibereich sperren oder entsperren
Anruf mit: AH = 5CH
AL = 00H, wenn Sperrbereich
01H beim Entsperren der Region
BX = Griff
CX = oberer Teil des Regionsversatzes
DX = unterer Teil des Regionsversatzes
SI = Länge des oberen Teils der Region
DI = unterer Teil der Regionslänge
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Mit dieser Funktion können Sie den angegebenen Bereich einer Datei sperren oder entsperren. Diese Funktion ist nur verfügbar, wenn das Dateifreigabemodul (z. B. SHARE.EXE) geladen ist.
INT 21H (0x21)
Funktion 5DH (0x5D oder 93) --> Reserviert
INT 21H (0x21)
Funktion 5EH (0x5E oder 94), Unterfunktion 00H (0x00) --> Maschinennamen abrufen
Anruf mit: AH = 5EH
AL = 00H
DS: DX = Segment: Offset des zu empfangenden Puffers
Schnur
Gibt zurück: Wenn die Funktion erfolgreich ist
Carry-Flag = löschen
CH = 00H, wenn der Name nicht definiert ist
<> 00H wenn Name definiert
CL = NetBIOS-Namensnummer (wenn CH <> 0)
DX: DX = Segment: Offset der Kennung (wenn CH <> 0)
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion gibt die Adresse einer ASCIIZ-Zeichenfolge zurück, die den lokalen Computer identifiziert. Dieser Funktionsaufruf ist nur verfügbar, wenn das Microsoft-Netzwerk ausgeführt wird.
INT 21H (0x21)
Funktion 5EH (0x5E oder 94), Unterfunktion 02H (0x02) --> Drucker-Setup-String festlegen
Anruf mit: AH = 5EH
AL = 02H
BX = Umleitungslistenindex
CX = Länge der Setup-Zeichenfolge
DS: SI = Segment: Offset der Setup-Zeichenfolge
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion gibt eine Zeichenfolge an, die vor allen an einen bestimmten Netzwerkdrucker gerichteten Dateien gesendet werden soll. So können Benutzer an verschiedenen Netzwerkknoten individuelle Betriebsmodi für denselben Drucker angeben.
INT 21H (0x21)
Funktion 5EH (0x5E oder 94), Unterfunktion 03H (0x03) --> Drucker-Setup-String abrufen
Anruf mit: AH = 5EH
AL = 03H
BX = Umleitungslistenindex
ES: DI = Segment: Offset des zu empfangenden Puffers
Setup-Zeichenfolge
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
CX = Länge der Drucker-Setup-Zeichenfolge
ES: DI = Segment: Offset des zu empfangenden Puffers
Setup-Zeichenfolge
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Mit dieser Funktion wird die Drucker-Setup-Zeichenfolge für einen bestimmten Netzwerkdrucker abgerufen.
INT 21H (0x21)
Funktion 5FH (0x5F oder 95), Unterfunktion 02H (0x02) --> Umleitungslisteneintrag abrufen
Call mit: AH = 5FH
AL = 02H
BX = Umleitungslistenindex
DS: SI = Segment: Offset des 16-Byte-Puffers zu
Lokalen Gerätenamen erhalten
ES: DI = Segment: Offset des 128-Byte-Puffers zu
Netzwerknamen empfangen
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
BH = Gerätestatusflag
Bit 0 = 0, wenn Gerät gültig
= 1 wenn nicht gültig
BL = Gerätetyp
03H, wenn Drucker
04H, wenn Laufwerk
CX = gespeicherter Parameterwert
DX = zerstört
BP = zerstört
DS: SI = Segment: Offset des lokalen ASCIIZ
Gerätename
ES: DI = Segment: Offset des ASCIIZ-Netzwerks
Name
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Mit dieser Unterfunktion können Sie die Systemumleitungsliste überprüfen, die lokale logische Namen mit Netzwerkdateien, Verzeichnissen oder Druckern verknüpft. Dieser Funktionsaufruf ist nur verfügbar, wenn Microsoft Networks ausgeführt wird und das Dateifreigabemodul geladen wurde.
INT 21H (0x21)
Funktion 5FH (0x5F oder 95), Unterfunktion 03H (0x03) --> Gerät umleiten
Call mit: AH = 5FH
AL = 03H
BL = Gerätetyp
03H, wenn Drucker
04H, wenn Laufwerk
DS: SI = Segment: Offset des lokalen ASCIIZ
Gerätename
ES: DI = Segment: Offset des ASCIIZ-Netzwerks
Name, gefolgt vom ASCIIZ-Passwort
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Richtet eine Umleitung über das Netzwerk ein, indem ein lokaler Gerätename mit einem Netzwerknamen verknüpft wird. Dieser Funktionsaufruf ist nur verfügbar, wenn Microsoft Networks ausgeführt wird und das Dateifreigabemodul (SHARE.EXE) geladen wurde.
INT 21H (0x21)
Funktion 5FH (0x5F oder 95), Unterfunktion 04H (0x04) --> Geräteumleitung abbrechen
Call mit: AH = 5FH
AL = 04H
DS: SI = Segment: Offset des lokalen ASCIIZ
Gerätename
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Unterfunktion bricht eine vorherige Umleitungsanforderung ab, indem sie die Zuordnung eines lokalen Gerätenamens zu einem Netzwerknamen entfernt. Dieser Funktionsaufruf ist nur verfügbar, wenn Microsoft Networks ausgeführt wird und das Dateifreigabemodul wie SHARE.EXE geladen wurde.
INT 21H (0x21)
Funktion 60H (0x60 oder 96) --> Reserviert
INT 21H (0x21)
Funktion 61H (0x61 oder 97) --> Reserviert
INT 21H (0x21)
Funktion 62H (0x62 oder 98) --> Programmsegmentpräfix (PSP)-Adresse abrufen
Anruf mit: AH = 62H
Rückgabewert: BX = Segmentadresse des Programmsegments
Präfix
Kommentare:
Diese Funktion ruft die Segmentadresse (Absatzadresse) des Programmsegmentpräfixes (PSP) für das aktuell ausgeführte Programm ab.
INT 21H (0x21)
Funktion 64H (0x64 oder 100) --> Reserviert
INT 21H
Funktion 65H (0x65 oder 101) --> Erweiterte Länderinformationen abrufen
Anruf mit: AH = 65H
AL = Unterfunktion
00H = Allgemeines abrufen
Informationen zur Internationalisierung
02H = Zeiger auf Großbuchstaben holen
Tisch
04H = Zeiger auf Dateinamen abrufen
Großbuchstabentabelle
06H = Zeiger auf Sortiertabelle abrufen
07H = Zeiger auf Doppelbyte holen
Zeichensatz (DBCS) Vektor
BX = gewünschte Codepage (-1 = aktiv
CON-Gerät)
CX = Länge des zu empfangenden Puffers
Informationen (muss >=5 sein)
DX = Länderkennung (-1 = Standard)
ES: DI = Adresse des zu empfangenden Puffers
Information
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Und die angeforderten Daten werden in den Puffer des aufrufenden Programms gestellt
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Dadurch werden Informationen über das angegebene Land und/oder die Codepage abgerufen. Informationen zu den Informationsbytes finden Sie in der zuvor angegebenen Internationalisierungstabelle.
INT 21H (0x21)
Funktion 66H (0x66 oder 102) --> Codepage abrufen oder festlegen
Anruf mit: AH = 66H
AL = Unterfunktion
01H = Codepage abrufen
02H = Codepage auswählen
BX = auszuwählende Codeseite, wenn AL = 02H
Gibt zurück: Wenn die Funktion erfolgreich ist
Carry-Flag = löschen
Und wenn mit AL = 01H aufgerufen
BX = aktive Codepage
DX = Standard-Codepage
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion ruft die aktuelle Codepage ab bzw. wählt sie aus.
INT 21H (0x21)
Funktion 67H (0x67 oder 103) --> Handle-Anzahl festlegen
Anruf mit: AH = 67H
BX = Anzahl der gewünschten Griffe
Gibt zurück: Wenn die Funktion erfolgreich ist
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion legt die maximale Anzahl von Dateien und Geräten fest, die vom aktuellen Prozess mithilfe von Handles gleichzeitig geöffnet werden können.
INT 21H (0x21)
Funktion 68H (0x68 oder 104) --> Datei übermitteln
Anruf mit: AH = 68H
BX = Griff
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion erzwingt, dass alle Daten in internen Puffern von MS DOS, die mit einem angegebenen Handle verknüpft sind, physisch auf das Gerät geschrieben werden. Wenn sich das Handle auf eine Datei bezieht und die Datei geändert wurde, werden der Zeit- und Datumsstempel sowie die Dateigröße im Stammverzeichniseintrag der Datei aktualisiert.
INT 21H (0x21)
Funktion 69H (0x69 oder 105) --> Reserviert
INT 21H (0x21)
Funktion 6AH (0x6A oder 106) --> Reserviert
INT 21H (0x21)
Funktion 6BH (0x6B oder 107) --> Reserviert
INTERN 21H (0x21)
Funktion 6CH (0x6C oder 108) --> Erweiterte Datei öffnen
Anruf von: AH = 6CH
AL = 00N
BX = offener Modus
Seite(n) |
Bedeutung |
0-2 |
Zugriffstyp
000 = Nur Lesen
001 = Nur Schreiben
010 = Lesen/Schreiben |
3 |
Reserviert (0) |
4-6 |
Öffentlicher Modus
000 = Kompatibilität
001 = Lesen/Schreiben verweigern (alles verweigern)
010 = Schreiben verweigern
011 = Lesen verweigern
100 = Nichts verweigern |
7 |
Vererbung
0 = Kindprozess erbt Handle
1 = Kindprozess erbt Handle nicht |
8-12 |
Reserviert (0) |
13 |
Kritische Fehlerbehandlung
0 = INT 24H ausführen
1 = Fehler an Prozess zurückgeben |
14 |
Write-Through
0 = Schreibvorgänge können gepuffert und verschoben werden
1 = physische Schreibvorgänge zum Anforderungszeitpunkt |
15 |
Reserviert (0) |
CX = Dateiattribut (Bits können kombiniert werden;
wenn ignoriert, wenn offen, siehe Tabelle zur Bitbedeutung .
DX = offene Flagge
Seite(n) |
Bedeutung |
0-3 |
Aktion, wenn Datei vorhanden ist
0000 = Fehler
0001 = Datei öffnen
0010 = Datei ersetzen |
4-7 |
Aktion, wenn die Datei nicht existiert
0000 = Fehler
0001 = Datei erstellen |
8-15 |
Reserviert (0) |
DS:SI = Segment:ASCIIZ-Pfadoffset
Rückgabewert: mWenn die Funktion erfolgreich ist
Carry-Flag = löschen
AXE = Griff
CX = durchgeführte Aktion
1 = Datei existierte und wurde
geöffnet
2 = Datei existiert nicht und
wurde erstellt
3 = Datei existierte und wurde
ersetzt
Wenn die Funktion fehlschlägt
Carry-Flag = gesetzt
AX = Fehlercode
Kommentare:
Diese Funktion öffnet, erstellt oder ersetzt eine Datei im angegebenen oder Standardverzeichnis auf dem angegebenen oder Standardlaufwerk für den angegebenen ASCIIZ-Pfad und gibt einen Handle zurück, mit dem das Programm anschließend auf die Datei zugreifen kann.
Wenn ein beliebiges Element des Pfads nicht vorhanden ist, oder die Datei im Stammverzeichnis erstellt wird und das Stammverzeichnis voll ist, oder die Datei erstellt wird und im angegebenen Verzeichnis bereits eine Datei mit demselben Namen und dem schreibgeschützten Attribut vorhanden ist, oder der Benutzer nicht über ausreichende Zugriffsrechte verfügt, schlägt die Funktion fehl.