Kapitel – 6
Einführung in die Computergrundlagen
Einführung
Manchmal, in einigen Fällen, wenn Sie versuchen, die Daten wiederherzustellen, oder wenn Sie eine Daten- und Datenträger-Fehlerbehebungsaufgabe durchführen (oder es kann eine andere systembezogene Aufgabe sein), ist es sehr praktisch, den DEBUG-Befehl von DOC zu verwenden.
In einigen besonderen Fällen kann es auch möglich sein, dass Sie es einfacher finden, diese bestimmte Aufgabe mit Hilfe von DEBUG statt mit Programmierung zu erledigen. Nehmen wir ein Beispiel. Die folgende Debug-Codierung reicht aus, um eine Sicherungskopie von DBR zu erstellen. Geben Sie einfach die folgenden Zeilen ein:
DEBUG BKDBR.BIN
L 100 2 0 1
R CX
200
W
Q
Hier können Sie sehen, dass Sie es vermeiden können, ein Programm zu schreiben, wenn Sie nur die obigen paar Zeilen eingeben. Sehen wir uns ein weiteres Codierungsbeispiel an, das die Sicherungskopie von DBR auf die Festplatte lädt
Immer daran denken! Versuchen Sie dies nicht ohne das vollständige Wissen. Sei dir sicher, was du tun wirst. Eine unvorsichtige Verwendung der folgenden Anweisungen kann zu einem großen Datenverlust führen, da der Missbrauch der Anweisungen dazu führen kann, dass alle Ihre Informationen auf der Festplatte nicht mehr zugänglich sind.
DEBUG BKDBR.BIN
W 100 2 0 1
Q
Wenn Sie sich die Codierung dieses Beispiels ansehen, können Sie leicht erraten, wie sehr es Ihnen helfen kann, wenn Sie es am dringendsten benötigen. Auch ist es nicht möglich, in jeder Situation zu programmieren. Jedoch innerhalb einer Grenze von einfachen Fällen des Problems, um eine Montageanleitung zu verwenden,Sie müssen nur debug.exe/debug.com in Ihre Bootdiskette kopieren und mit dem Schreiben des Codes beginnen.
Die Funktionsweise und die beschriebenen Beispiele in diesem Kapitel und in diesem Buch sind nur mit der x86-Architektur der Intel-Prozessorfamilie kompatibel.
Zunächst müssen wir uns ein wenig Wissen über die Grundlagen der Computerarchitektur aneignen, um die in den folgenden Abschnitten verwendeten Begriffe zu verstehen und die Funktionsweise und Beispiele in verschiedenen Schritten zu beschreiben. Teilen Sie uns einige Grundlagen der Computerarchitektur mit:
Grundlegendes Konzept
Zentralprozessor
Dieser Teil wird auch als Zentraleinheit oder CPU bezeichnet, die wiederum aus der Steuereinheit und der Recheneinheit besteht. Seine Funktionen bestehen darin, den Inhalt der Speicherzellen zu lesen und zu schreiben, Daten zwischen Speicherzellen und Spezialregistern weiterzuleiten und die Anweisungen eines Programms zu dekodieren und auszuführen. Der Prozessor verfügt über eine Reihe von Speicherzellen, die sehr häufig verwendet werden und somit Teil der CPU sind.
Diese Zellen sind unter dem Namen Register bekannt. Ein Prozessor kann ein oder zwei Dutzend dieser Register haben. Die Arithmetik- und Logikeinheit der CPU realisiert die mit numerischen und symbolischen Berechnungen verbundenen Operationen.
Typischerweise sind diese Einheiten nur in der Lage, sehr elementare Operationen auszuführen, wie z. B. die Addition und Subtraktion zweier ganzer Zahlen, Multiplikation und Division ganzer Zahlen, Handhabung der Registerbits und Vergleich des Inhalts zweier Register. Personalcomputer können nach der sogenannten Wortgröße klassifiziert werden, dh der Menge an Bits, die der Prozessor gleichzeitig verarbeiten kann.
Zentralspeicher
Es handelt sich um eine Gruppe von Zellen, die aus Halbleitern hergestellt sind und für allgemeine Prozesse wie die Ausführung von Programmen und die Speicherung von Informationen für den Betrieb verwendet werden. Jede dieser Zellen kann einen numerischen Wert enthalten und sie haben die Eigenschaft, richtungsfähig zu sein. Das heißt, sie können sich durch eine eindeutige Nummer oder eine Adresse für jede Zelle voneinander unterscheiden. Der generische Name dieser Speicher ist Random Access Memory oder RAM.
Der Hauptnachteil dieses Speichertyps besteht darin, dass die integrierten Schaltkreise ihre gespeicherte Information verlieren, wenn der Stromfluss unterbrochen wird. Dies war der Grund für die Erstellung von Speichern, deren Informationen nicht verloren gehen, wenn das System ausgeschaltet wird. Diese Speicher erhalten den Namen Read Only Memory oder ROM.
Damit der PC Informationen verarbeiten kann, müssen sich diese Informationen in speziellen Zellen befinden, die als Register bezeichnet werden. Die Register sind Gruppen von 8 oder 16 Flip-Flops.
Ein Flip-Flop ist ein Gerät, das zwei Spannungspegel speichern kann, einen niedrigen, normalerweise 0,5 Volt, und einen anderen, üblicherweise 5 Volt. Der niedrige Energiepegel im Flip-Flop wird als Aus oder 0 interpretiert und der hohe Pegel als Ein oder
- Diese Zustände werden üblicherweise als Bits bezeichnet, die die kleinste Informationseinheit in einem Computer darstellen.
Eine Gruppe von 16 Bits ist als Wort bekannt; ein Wort kann in Gruppen von 8 Bits unterteilt werden, die Bytes genannt werden, und die Gruppen von 4 Bits werden Nibbles genannt.
CPU-Register
Die CPU hat 4 interne Register mit jeweils 16 Bits. Die ersten vier, AX, BX, CX und DX, sind allgemein verwendbare Register und können auch als 8-Bit-Register verwendet werden, wenn sie so verwendet werden Es ist notwendig, sie zum Beispiel wie folgt zu bezeichnen: AH und AL, die die High- und Low-Bytes des AX-Registers sind. Diese Nomenklatur gilt auch für die BX-, CX- und DX-Register.
Die unter ihren spezifischen Namen bekannten Register:
Register |
Specific Name |
AX |
Accumulator |
BX |
Base register |
CX |
Counting register |
DX |
Data register |
DS |
Data segment register |
ES |
Extra segment register |
SS |
Battery segment register |
CS |
Code segment register |
BP |
Base pointers register |
SI |
Source index register |
DI |
Destination index register |
SP |
Battery pointer register |
IP |
Next Instruction pointer register |
F |
Flag register |
Wir werden diese Register jedoch in den nächsten Kapiteln im Detail bei der Interrupt-Programmierung über C verwenden, aber das Erlernen der Grundlagen der Assemblersprache hier ist ein gutes Ideal und hilft uns bei der Programmierung von Festplattenoperationen usw.
Mit dem Debug-Programm können die Werte der internen Register der CPU visualisiert werden. Um mit der Arbeit mit Debug zu beginnen, geben Sie die folgende Eingabeaufforderung auf Ihrem Computer ein:
C:/>Debug <Enter>
In der nächsten Zeile erscheint ein Bindestrich, dies ist der Indikator für Debug, in diesem Moment können die Debug-Anweisungen mit dem folgenden Befehl eingeführt werden:
- r <Enter>
Alle Inhalte der internen Register der CPU werden angezeigt. Eine Alternative zum Anzeigen ist die Verwendung des "r" Befehl, der als Parameter den Namen des Registers verwendet, dessen Wert angezeigt werden soll. Beispielsweise:
-rbx <Eingabe>
Dieser Befehl zeigt nur den Inhalt des BX-Registers an und der Debug-Indikator ändert sich von "-" zu ":"
Wenn die Eingabeaufforderung so aussieht, ist es möglich, den Wert des angezeigten Registers zu ändern, indem Sie den neuen Wert und <Enter> eingeben, oder den alten Wert verlassen, indem Sie die Eingabetaste drücken, 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 ausgeschaltet, und seine Beziehung zu den Operationen des Prozessors:
Overflow
NV = there is no overflow
OV = there is an overflow
Direction
UP = forward
DN = backward
Interrupts
DI = deactivated
EI = activated
Sign
PL = positive
NG = negative
Zero
NZ = it is not zero
ZR = it is zero
Auxiliary Carry
NA = there is no auxiliary carry
AC = there is auxiliary carry
Parity
PO = uneven parity
PE = even parity
Carry
NC = there is no carry
CY = there is carry
Assembler-Struktur
In der Assemblersprache bestehen Codezeilen aus zwei Teilen, der erste ist der Name der auszuführenden Anweisung und der zweite sind die Parameter des Befehls. Zum Beispiel:
HINZUFÜGEN ah, bh
Hier "HINZUFÜGEN" ist der auszuführende Befehl; in diesem Fall ein Zusatz und „ah” sowie "bh" sind die Parameter.
Der Name der Anleitung in 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 ihren Betrieb keine Parameter benötigen, und andere, die nur einen Parameter benötigen.
Manchmal werden Anweisungen wie folgt verwendet:
Nummer 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 für unser erstes Programm zu programmieren. Wir werden ein Programm erstellen, das funktioniert, um zu veranschaulichen, was wir gesehen haben, und was wir tun werden, ist, zwei Werte hinzuzufügen, die wir direkt in das Programm einführen werden.
Der erste Schritt besteht darin, den Debug zu starten. Dieser Schritt besteht nur aus der Eingabe von debug <Enter> an der Eingabeaufforderung des Betriebssystems.
Um ein Programm auf dem Debug zu assemblieren, wird das "a" (Assemble)-Befehl verwendet wird. 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 von CS:IP angegebenen Lokalität initiiert, normalerweise 0100h, die die Lokalität ist, wo Programme mit der Erweiterung .COM muss initiiert werden. Und es wird der Ort sein, den wir verwenden werden, da nur Debug diese spezielle Art von Programmen erstellen kann.
Auch wenn es in diesem Moment nicht notwendig ist, das "a" Wenn Sie einen Parameter befehlen, ist es empfehlenswert, dies zu tun, um Probleme zu vermeiden, sobald die CS:IP-Register verwendet werden. Daher geben wir Folgendes ein:
-a0100 <Eingabe>
Wenn dies erledigt ist, erscheint auf dem Bildschirm etwa Folgendes: 0C1B:0100 und der Cursor befindet sich rechts von diesen Zahlen. Beachten Sie, dass die ersten vier Ziffern im Hexadezimalsystem unterschiedlich sein können, die letzten vier jedoch 0100 sein müssen , da es die Adresse ist, die wir als Anfang angegeben haben. Jetzt können wir die Anleitung vorstellen:
0C1B:0100 mov ax,0002; puts the 0002 value on the ax register
0C1B:0103 mov bx,0004; puts the 0004 value on the bx register
0C1B:0106 add ax,bx; the content of bx is added to the content of ax
0C1B:0108 int 20; provoques the termination of the program.
0C1B:010A
Es ist nicht erforderlich, die Kommentare hinter dem ";" zu schreiben. Sobald der letzte Befehl eingegeben wurde, int 20, <Enter> gedrückt wird, ohne etwas weiter zu schreiben, um die Debugger-Eingabeaufforderung erneut anzuzeigen.
Die letzte geschriebene Zeile ist eigentlich keine Assembler-Anweisung, sondern eine Aufforderung zur Unterbrechung des Betriebssystems. Diese Unterbrechungen ersparen uns eine Menge Zeilen und sind sehr nützlich, um auf Funktionen des Betriebssystems zuzugreifen.
Um das von uns geschriebene Programm auszuführen, muss das "g" Befehl verwendet wird, und bei Verwendung wird eine Nachricht angezeigt, die besagt:
"Programm wurde normal beendet". Natürlich können wir bei einer Meldung wie dieser nicht sicher sein, ob das Programm die Hinzufügung vorgenommen hat, aber es gibt eine einfache Möglichkeit, dies zu überprüfen, indem Sie das "r" Befehl des Debug können wir den Inhalt aller Register des Prozessors sehen, geben Sie einfach ein:
-r <Enter>
Jedes Register mit seinem jeweiligen tatsächlichen Wert erscheint wie folgt auf dem Bildschirm:
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A OF DB
Es besteht die Möglichkeit, dass die Register unterschiedliche Werte enthalten, aber AX und BX müssen gleich sein, da wir gerade diese geändert haben.
Eine andere Möglichkeit, die Werte zu sehen, während das Programm ausgeführt wird, 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 es: g108, Dieser Befehl führt das Programm aus, stoppt an der Adresse 108 und zeigt den Inhalt der Register an.
Eine Nachverfolgung dessen, was in den Registern vor sich geht, kann mit Hilfe des "t" Befehl (trace), die Funktion dieses Befehls ist es, das zusammengestellte zeilenweise auszuführen, wobei jedes Mal der Inhalt der Register angezeigt wird.
Um Debug zu beenden, verwenden Sie die "q" (Beenden) Befehl.
Vorteile des Assemblers
Der erste Grund, mit Assembler zu arbeiten, ist, dass es die Möglichkeit bietet, mehr über die Funktionsweise Ihres PCs zu erfahren, was eine konsistentere Entwicklung von Software ermöglicht.
Der zweite Grund ist die totale Kontrolle über den Computer, die Sie mit dem Assembler haben können. Ein weiterer Grund ist, dass die Assembler-basierten Programme schneller und in einigen Fällen kleiner sind und größere Kapazitäten haben als solche, die mit anderen Sprachen erstellt wurden.
Lass mich mein Versprechen halten!!
Im früheren Teil dieses Kapitels haben wir einige Anweisungen als Beispiel verwendet, um die Sicherung von DBR zu erstellen und die Sicherung von DBR an ihren ursprünglichen Speicherort zu laden, wenn sie benötigt wird. Zuerst untersuchen wir die Anweisung zum Erstellen der Sicherung.
C:\>DEBUG A:\BKDBR.BIN <Enter>
File not found
- L 100 2 0 1 <Enter>
- R CX <Enter>
CX 0000
: 200 <Enter>
- W <Enter>
Writing 00200 bytes
- Q <Enter>
Beginnen wir in diesem Beispiel mit dem Lernen ab der ersten Zeile. Der Befehl DEBUG A:\BKDBR.BIN Initialisiert den Debug-Befehl mit der Erstellung einer Datei im Diskettenlaufwerk A: mit dem Namen BKDBR.BIN, falls sie dort noch nicht vorhanden ist. Deshalb bekamen wir am Anfang die Meldung „Datei nicht gefunden“.
In unserer zweiten Anweisung L 100 2 0 1 dient der L-Befehl (Laden) dazu, den DBR des angewiesenen Laufwerks zu laden. Lassen Sie uns lernen, wie? In dieser Anweisung ist die Nummer 100 die Adresse des Puffers, wo der DBR gespeichert wird, die nächste Nummer 2 wird für das Laufwerk C(C :) verwendet. Die Laufwerksnummern sind wie folgt angegeben:
Drive Letter |
Number Used |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
and so on |
. |
Die nächste Zahl 0 ist die Startsektornummer der Anzahl der zu lesenden Sektoren. Hier verwenden wir 0, um den 1. Sektor, dh den DBR-Sektor, zu lesen. Die nächste Zahl, die 1 ist, wird verwendet, um die Anzahl der zu lesenden Sektoren anzugeben.
Hier haben wir 1 angegeben, weil wir nur einen Sektor lesen wollen. Wir können jedoch die Nummern und Orte der Start- und Endsektoren gemäß unseren Anforderungen in verschiedenen Arten anderer Operationen verwenden. Daher wird ein Sektor beginnend mit dem 1. Sektor des Laufwerks C: auf den Speicherplatz 100 geladen.
Und der R CX-Befehl wird verwendet, um die Länge der Daten zu ändern oder zu definieren, die wir in die BKDBR.BIN-Datei schreiben möchten. Diese Anweisung zeigt den aktuellen Wert des CX-Registers und ermöglicht Ihnen, Ä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, was 512 Bytes im Dezimalsystem entspricht.
Der W-Befehl weist DEBUG an, die 200 (h) Bytes von Position 100 in die Datei BKDBR.BIN zu schreiben. Und schließlich verwenden wir die Anweisung Q, um das DEBUG zu verlassen und zum DOS-Prompt zurückzukehren.
Warning!!! Warning!!! Warning!!!
It is strictly recommended that you should know what and how are you doing in the procedure of restoring DBR of any disk. If accidentally you store the illegal or DBR of any other Disk, it is possible in most of the cases that the complete data of the disk may become inaccessible.
when you type the first Instruction of the coding that is:
DEBUG A:\BKDBR.BIN <Enter>
File must be in the given location where you are starting the DEBUG program. Now if you get the error message “File not found” before the DEBUG prompt then immediately stop the process by using the Q (quit) command. Because it means that the BKDBR.BIN file could not be found or opened by the DEBUG program and if you continue this process some junk information will be written on DBR and it will make the complete partition inaccessible. |
Lassen Sie uns nun sehen, was wir bei der Codierung der Anweisungen zum Wiederherstellen des DBR aus der von uns erstellten Sicherungsdatei mit dem Namen BKDBR.BIN gemacht haben. Die Befehle von DEBUG zum Wiederherstellen der Sicherung lauten wie folgt:
C:\> DEBUG A:\BKDBR.BIN <Enter>
- W 100 2 0 1 <Enter>
- Q <Enter>
|
Dieser Befehl schreibt 1 Informationssektor aus der Datei BKDBR.BIN im Diskettenlaufwerk (a:) an der Speicherstelle 100 in den ersten Sektor, der Sektor 0 des zweiten Laufwerks ist, das Laufwerk (C:) ist.
Speichern und Laden der Programme
Es erscheint nicht praktikabel, jedes Mal, wenn es benötigt wird, ein ganzes Programm einzutippen, und um dies zu vermeiden, ist es möglich, ein Programm auf der Festplatte zu speichern, mit dem enormen Vorteil, dass es nicht notwendig ist, Debug erneut auszuführen, da es bereits zusammengestellt ist Führ es aus.
Die Schritte zum Speichern eines bereits gespeicherten Programms sind:
- Erhalten Sie die Länge des Programms, indem Sie die Endadresse von der Anfangsadresse subtrahieren, natürlich im Hexadezimalsystem.
- Geben Sie dem Programm einen Namen und eine Erweiterung.
- Geben Sie die Länge des Programms in das CX-Register ein.
- Weisen Sie Debug an, das Programm auf die Diskette zu schreiben.
Anhand des folgenden Programms als Beispiel haben wir eine klarere Vorstellung davon, wie diese Schritte auszuführen sind. Wenn das Programm fertig zusammengestellt ist, würde es so aussehen:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010 A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-w
Schreiben von 000A-Bytes
Um die Länge eines Programms zu erhalten, muss das „h” Der Befehl wird verwendet, da er uns die Addition und Subtraktion zweier Zahlen im Hexadezimalformat zeigt. Um unsere Länge zu erhalten, geben wir ihr als Parameter den Wert der Endadresse unseres Programms (10A) und der Anfangsadresse des Programms (100). Das erste Ergebnis, das uns der Befehl zeigt, ist die Addition der Parameter und das zweite die Subtraktion.
Das "n" Befehl ermöglicht es uns, das Programm zu benennen. Der "rcx" Der Befehl erlaubt es uns, den Inhalt des CX-Registers auf den Wert zu ändern, den wir aus der Größe der Datei mit "h" erhalten haben, in diesem Fall 000a, da das Ergebnis der Subtraktion der Endadresse von der Anfangsadresse ist.
Schließlich ist das "w" Der Befehl schreibt unser Programm auf die Festplatte und gibt an, wie viele Bytes es geschrieben hat. Auch zum Speichern einer bereits geladenen Datei sind zwei Schritte notwendig:
- Geben Sie den Namen der zu ladenden Datei an.
- Laden Sie es mit der "l" (Laden) Befehl.
Um das richtige Ergebnis der folgenden Schritte zu erhalten, muss das obige Programm bereits erstellt sein.
Innerhalb von Debug schreiben wir Folgendes:
-n test.com
-l
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
Das letzte "u" Der Befehl wird verwendet, um zu überprüfen, ob das Programm in den Speicher geladen wurde. Es zerlegt den Code und zeigt ihn zerlegt an. Die Parameter geben DEBUG an, von wo und bis wohin disassembliert werden soll. DEBUG lädt die Programme immer in den Speicher auf 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 diese Segmente liegt darin, dass es unter Berücksichtigung der Tatsache, dass die maximale Größe einer Zahl, die der Prozessor verwalten kann, durch ein Wort von 16 Bits oder ein Register gegeben ist, nicht möglich wäre, mit nur einem Segment auf mehr als 65536 Speicherstellen zuzugreifen dieser Register, aber jetzt, wenn der Speicher in Gruppen oder Segmente unterteilt ist, jede von 65536 Orten, und wir verwenden eine Adresse in einem exklusiven Register, um jedes Segment zu finden, und dann machen wir jede Adresse eines bestimmten Slots mit zwei Registern , und es ist uns möglich, auf eine Speichermenge von 4294967296 Bytes zuzugreifen.
Damit der Assembler die Daten verwalten kann, ist es erforderlich, dass jede Information oder Anweisung in dem Bereich zu finden ist, der ihren jeweiligen Segmenten entspricht. Der Assembler greift auf diese Informationen zu, wobei er die Lokalisierung des Segments berücksichtigt, die durch die Register DS, ES, SS und CS gegeben ist, und innerhalb des Registers die Adresse der spezifizierten Information. Aus diesem Grund erscheint beim Erstellen eines Programms mit Debug in jeder Zeile, die wir zusammenstellen, so etwas wie das Folgende:
1CB0:0102 BEWEGUNG AX,BX
Wo die erste Zahl, 1CB0, dem verwendeten Speichersegment entspricht, bezieht sich die zweite auf die Adresse innerhalb dieses Segments, und die Anweisungen, die von dieser Adresse gespeichert werden, folgen.
Der Assembler passt die Größe der Segmente an, indem er die Anzahl der Bytes, die jeder zusammengesetzte Befehl benötigt, als Grundlage nimmt, da es eine Verschwendung von Speicher wäre, die ganzen Segmente zu verwenden. Wenn ein Programm beispielsweise nur 10 KB zum Speichern von Daten benötigt, hat das Datensegment nur 10 KB und nicht die 64 KB, die es verarbeiten kann.
Datenbewegung
Ich liste hier einige Anweisungen in Assemblersprache für Datenoperationen für Ihr Wissen und Ihre Bequemlichkeit auf. Wenn wir mit Hilfe von Interrupts und anderen BIOS-Operationen programmieren, benötigen wir die Grundlagen.
Eine detaillierte Einführung und gründliches Studium der Assemblersprache würde den Rahmen dieses Buches sprengen. Obwohl die Kenntnis der Grundlagen der Assemblierung erforderlich ist, um in den weiteren wichtigen Programmierkapiteln fortzufahren, brauchen Sie sich keine Sorgen zu machen, wenn Sie Schwierigkeiten haben, alle Anweisungen zu verstehen, aber es wird empfohlen, dass Sie sich die Grundidee der Anweisungen aneignen.
In jedem Programm ist es notwendig, die Daten im Speicher und in den CPU-Registern zu verschieben, und es gibt mehrere Möglichkeiten, dies zu tun. Es kann Daten im Speicher in ein Register, von Register zu Register, von einem Register zu einem Stack, von einem Stack zu einem Register kopieren, um Daten an externe Geräte zu übertragen und umgekehrt.
Dieser Datenverkehr unterliegt Regeln und Einschränkungen. Im Folgenden sind einige davon aufgeführt:
- Es ist nicht möglich, Daten direkt von einem Speicherplatz auf einen anderen zu verschieben. Es ist notwendig, die Daten des Quellortes zuerst in ein Register zu verschieben und dann vom Register zum Zielort.
- Es ist nicht möglich, eine Konstante direkt in ein Segmentregister zu verschieben; es muss zuerst in ein Register in der CPU verschoben werden.
- Es ist möglich, Datenblöcke mithilfe der MOVS-Anweisungen 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 Anweisungen nehmen die Werte von den definierten Adressen durch DS:SI als eine zu verschiebende Datengruppe und ES:DI als die neue Lokalisierung der Daten.
Zum Verschieben von Daten gibt es auch Batterien genannte Strukturen, bei denen die Daten mit dem Push-Befehl eingeführt und mit dem Pop-Befehl extrahiert werden. In einem Stapel sind die ersten einzuführenden Daten die letzten, die wir nehmen können, wenn wir in unserem Programm diese Anweisungen verwenden:
PUSH AX
PUSH BX
PUSH CX
Um jedem Register die korrekten Werte im Moment der Entnahme aus dem Stack zurückzugeben, ist es notwendig, dies in der folgenden Reihenfolge zu tun:
POP CX
POP BX
POP AX
Für die Kommunikation mit externen Geräten wird der out-Befehl verwendet, um Informationen an einen Port zu senden, und der in-Befehl, um die von einem Port empfangenen Informationen zu lesen.
Die Syntax des OUT-Befehls lautet:
AUS DX,AX
Wobei DX den Wert des Ports enthält, der für die Kommunikation verwendet wird, und AX die Informationen enthält, die gesendet werden.
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 ankommen.
MOV-Anweisung
Wird zur Datenübertragung zwischen Speicherzellen, Registern und dem Akkumulator verwendet. Syntax ist wie folgt:
MOV-Ziel, Quelle
Die verschiedenen für diese Anweisung zulässigen Datenbewegungen sind in der folgenden Tabelle aufgeführt:
S. No. |
Destination |
Source |
1. |
memory |
accumulator |
2. |
accumulator |
memory |
3. |
segment register |
memory/register |
4 |
memory/register |
segment register |
5. |
Register |
register |
6. |
Register |
memory |
7. |
memory |
register |
8. |
Register |
immediate data |
9. |
memory |
immediate data |
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 den Inhalt von AX (0006h) in das BX-Register und schließlich den 4C00h-Wert in das AX-Register, um die Ausführung mit der 4C-Option der 21h-Unterbrechung zu beenden . Wir werden später eine kurze Einführung in Interrupt 13H und Interrupt 21H geben.
Unterbrechungen
Ein Interrupt ist eine Hardwareeinrichtung, die bewirkt, dass die CPU die Ausführung aussetzt, ihren Status speichert und an einen bestimmten Ort überträgt. Die Transferstelle gibt die Adresse eines Programms an, das als Antwort auf die Unterbrechung handeln soll. Das Programm, das als Ergebnis des Interrupts ausgeführt wird, wird Interrupt-Behandlungsprogramm genannt.
Beispielsweise : Wenn DOS einige Informationen an das BIOS senden möchte oder das BIOS einige Informationen an das Computersystem senden möchte, erzeugen DOS oder BIOS Interrupts. Immer wenn ein Interrupt erzeugt wird, unterbricht der Computer, was er tut, und kümmert sich zuerst um die Operation, die den Interrupt erzeugt hat.
Jedem Gerät, das Interrupts erzeugen kann, wird eine eindeutige Interrupt-Nummer gegeben, um zu identifizieren, welches Gerät diese Interrupts erzeugt. Wir werden alle Funktionen und Unterfunktionen von Interrupt 13H, Erweiterungen von Interrupt 13H und Interrupt 21H in diesem Buch besprechen.
Grundsätzlich können die Unterbrechungen von folgenden drei Arten sein:
- Interne Hardwareunterbrechungen
- Externe Hardwareunterbrechungen
- Software-Unterbrechungen
Interne Hardware-Unterbrechungen
Interne Unterbrechungen werden durch bestimmte Ereignisse erzeugt, die während der Ausführung eines Programms auftreten. Diese Art von Unterbrechungen wird vollständig von der Hardware verwaltet und kann nicht geändert werden.
Ein klares Beispiel für diese Art von Unterbrechungen ist diejenige, die den Zähler der internen Uhr des Computers aktualisiert, die Hardware ruft diese Unterbrechung mehrmals während einer Sekunde auf, um die Zeit auf dem neuesten Stand zu halten.
Wir können diese Unterbrechung zwar nicht direkt verwalten, da wir die Zeitaktualisierung nicht per Software steuern können, aber es ist möglich, ihre Auswirkungen auf dem Computer zu unserem Vorteil zu nutzen.
Beispielsweise : Um eine kontinuierlich aktualisierte virtuelle Uhr zu erstellen, müssen wir nur ein Programm schreiben, das den tatsächlichen Wert des Zählers liest und ihn 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. Es ist nicht möglich, externe Unterbrechungen zu deaktivieren.
Diese Unterbrechungen werden nicht direkt an die CPU gesendet, sondern sie werden an eine integrierte Schaltung gesendet, deren Funktion es ist, ausschließlich diese Art von Unterbrechungen zu handhaben
Software-Unterbrechungen
Softwareunterbrechungen können direkt durch den Assembler aktiviert werden, der die Nummer der gewünschten Unterbrechung mit dem INT-Befehl aufruft.
Die Verwendung von Unterbrechungen hilft uns bei der Erstellung von Programmen und durch ihre Verwendung werden unsere Programme kürzer. Sie sind einfacher 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 Betriebssystem-DOS-Unterbrechungen und die BIOS-Unterbrechungen.
Der Unterschied zwischen den beiden besteht darin, dass die Unterbrechungen des Betriebssystems einfacher zu verwenden sind, aber sie sind auch langsamer, da diese Unterbrechungen das BIOS nutzen, um ihr Ziel zu erreichen, andererseits sind die Unterbrechungen des BIOS viel schneller, aber sie haben den Nachteil, dass sie da sind Sie sind Teil der Hardware, sie sind sehr spezifisch und können sogar je nach Herstellermarke der Schaltung variieren.
Die Wahl des zu verwendenden Unterbrechungstyps hängt ausschließlich von den Eigenschaften ab, die Sie Ihrem Programm geben möchten.
Since we shall use interrupts for data recovery programming with the help of C language via Interrupt handling with C, we shall discuss only Interrupt 13H, Interrupt 13H Extensions and Interrupt 21H routines specially. It is not so important to discuss all of the other interrupts and their functions because in C language, easier functions are available to perform most of those tasks. However, the knowledge of Interrupt 13H and its Extensions is must, for data recovery programming. |
Nehmen wir eine kurze Einführung in Interrupt 20H und Interrupt 21H. Der in Klammern geschriebene Wert (wie 0x20) gibt an, wie zu verwenden
INT 20H ( 0x20) --> Vorgang beenden
Aufruf mit: CS = Segmentadresse des Programmsegmentpräfixes
Rückgabe: Nichts
Bemerkungen:
Es beendet den laufenden Prozess. Dies ist eine von mehreren Methoden, die ein Programm verwenden kann, um einen endgültigen Exit durchzuführen. Sie können auch die Funktionen (00H oder 31H oder 4CH) von INT 21H oder einfach INT 27H verwenden, um einen endgültigen Ausgang auszuführen, wobei die Funktionen 31H und 4CH von INT 21H im Allgemeinen bevorzugt werden, da sie die Übergabe eines Rückkehrcodes an den übergeordneten Prozess ermöglichen.
Es wird empfohlen, dass Sie, wenn Sie File Control Blocks (FCBs) zum Schreiben einer Datei verwendet haben, die Datei zuerst schließen sollten, da sonst die Daten verloren gehen können, da beim endgültigen Beenden der gesamte vom Prozess belegte Speicher freigegeben wird. Dateipuffer werden geleert und alle offenen Handles für Dateien oder Geräte, die dem Prozess gehören, werden geschlossen.
Wenn Sie also offene Handles für Dateien haben, können Sie die Daten verlieren.
GANZZAHL 21H (0x21)
Funktion 00H (0x00) --> Vorgang beenden
Aufruf mit: AH = 00H
CS = Segmentadresse des Programmsegmentpräfixes
Rückgabe: Nichts
Bemerkungen:
Dieser Interrupt beendet den aktuellen Prozess. Dies ist eine von mehreren Methoden, die ein Programm verwenden kann, um einen endgültigen Exit durchzuführen. Weitere Informationen finden Sie unter INT 20H
GANZZAHL 21H (0x21)
Funktion 01H (0x01) --> Zeicheneingabe mit Echo
Aufruf mit: AH = 01H
Rückgabe: AL = 8-Bit-Eingangsdaten
Bemerkungen:
Dieser Interrupt liest ein Zeichen vom Standard-Eingabegerät wie der Tastatur und gibt es an das Standard-Ausgabegerät zurück. Wenn kein Charakter bereit ist, wird gewartet, bis einer verfügbar ist.
GANZZAHL 21H (0x21)
Funktion 02H (0x02) --> Zeichenausgabe
Aufruf mit: AH = 02H
DL = 8-Bit-Daten für die Ausgabe
Rückgabe: Nichts
Bemerkungen:
Es gibt ein Zeichen an das Standardausgabegerät aus. Die Ausgabe kann umgeleitet werden. Wenn die Ausgabe umgeleitet wird, gibt es keine Möglichkeit, einen vollen Datenträger zu erkennen.
Strings können auch an die Anzeige gesendet werden, indem ein Write (INT 21H, Funktion 40H) unter Verwendung des vordefinierten Handles für die Standardausgabe (0001H) durchgeführt wird, wenn die Ausgabe nicht umgeleitet wurde oder ein Handle das logische Gerät CON erhalten hat.
GANZZAHL 21H (0x21)
Funktion 03H (0x03) --> AUX Eingang
Aufruf mit: AH = 03H
Rückgabe: AL = 8-Bit-Eingangsdaten
Bemerkungen:
Es liest ein Zeichen aus dem Standard-Zusatzgerät. Voreingestellt ist die erste serielle Schnittstelle (COM1).
Wenn das Zusatzgerät Daten schneller sendet, als Ihr Programm sie verarbeiten kann, können Zeichen verloren gehen. Es gibt keine Möglichkeit für ein Benutzerprogramm, durch diesen Funktionsaufruf den Status des Zusatzgeräts zu lesen oder E/A-Fehler wie verlorene Zeichen zu erkennen.
GANZZAHL 21H (0x21)
Funktion 04H (0x04) --> Hilfsausgang
Aufruf mit: AH = 04H
DL = 8-Bit-Daten für die Ausgabe
Rückgabe: Nichts
Bemerkungen:
Diese Funktion von INT 21H gibt ein Zeichen an das standardmäßige Hilfsgerät aus. Voreingestellt ist die erste serielle Schnittstelle (COM1). Zeichenfolgen können auch an das Hilfsgerät gesendet werden, indem ein Schreibvorgang (INT 21H Funktion 40H) unter Verwendung des vordefinierten Handles für das Standard-Hilfsgerät (00034) oder unter Verwendung eines Handles durchgeführt wird, das durch Öffnen des logischen Geräts AUX erhalten wird.
GANZZAHL 21H (0x21)
Funktion 05H (0x05) --> Druckerausgabe
Aufruf mit: AH = 05H
DL = 8-Bit-Daten für die Ausgabe
Rückgabe: Nichts
Bemerkungen:
Diese Funktion sendet ein Zeichen an das Standardlistengerät. Das Standardgerät ist der Drucker am ersten parallelen Anschluss (LPT1). Zeichenketten können auch durch Ausführen eines Schreibvorgangs (INT 21H Funktion 40H) unter Verwendung des vordefinierten Handles für das Standarddruckergerät (0004H) oder unter Verwendung eines Handles, das durch Öffnen des logischen Geräts PRN oder LPT1 erhalten wird, an den Drucker gesendet werden.
GANZZAHL 21H (0x21)
Funktion 06H (0x06) --> Direkte Konsolen-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
Bemerkungen:
Es liest ein Zeichen vom Standard-Eingabegerät oder schreibt ein Zeichen auf das Standard-Ausgabegerät. E/A kann umgeleitet werden, aber wenn E/A umgeleitet wurde, gibt es keine Möglichkeit, EOF oder einen vollen Datenträger zu erkennen. Diese Funktion von INT 21H wird von Programmen verwendet, die alle möglichen Zeichen und Steuercodes ohne Eingriffe des Betriebssystems lesen und schreiben müssen.
GANZZAHL 21H (0x21)
Funktion 07H (0x07) --> Ungefilterte Zeicheneingabe
ohne Echo
Call with: AH = 07H
Returns: AL = 8-bit input data
Bemerkungen:
Diese Funktion liest ein Zeichen vom Standard-Eingabegerät, ohne es an das Standard-Ausgabegerät zurückzugeben.
GANZZAHL 21H (0x21)
Funktion 08H (0x08) --> Zeicheneingabe ohne Echo
Call with: AH = 08H
Returns: AL = 8-bit input data
Bemerkungen:
Diese Funktion liest ein Zeichen vom Standard-Eingabegerät, ohne es an das Standard-Ausgabegerät zurückzugeben.
GANZZAHL 21H (0x21)
Funktion 09H (0x09) --> Zeichenfolge anzeigen
Call with: AH = 09H
DS:DX = segment: offset of string
Returns: Nothing
Bemerkungen:
Es sendet eine Zeichenfolge an das Standardausgabegerät. Die Ausgabe kann umgeleitet werden. Wenn die Ausgabe umgeleitet wurde, gibt es keine Möglichkeit, einen vollen Datenträger zu erkennen. Die Zeichenfolge kann auch an die Anzeige gesendet werden, indem ein Schreibvorgang (INT 21H Funktion 40H) unter Verwendung des vordefinierten Handles für die Standardausgabe (0001H) durchgeführt wird, wenn es nicht umgeleitet wurde, oder eines Handles, das durch Öffnen des logischen Geräts CON erhalten wurde.
GANZZAHL 21H (0x21)
Funktion 0AH (0x0A oder 10) --> Gepufferte Tastatur Eingang
Call with: AH = 0AH
DS:DX = segment: offset of buffer
Returns: Data placed in buffer, Returns Nothing
Bemerkungen:
Es liest eine Reihe von Bytes vom Standardeingabegerät bis einschließlich eines ASCII-Wagenrücklaufs (0DH) und legt sie in einem vom Benutzer festgelegten Puffer ab. Die Zeichen werden an das Standardausgabegerät ausgegeben. Der von der Funktion verwendete Puffer hat folgendes Format:
Byte |
Contents |
0 |
Maximum number of characters to read, set by program |
1 |
Number of characters actually read (excluding carriage return), set by MS-DOS |
2+ |
String read from keyboard or standard input, terminated by a carriage return (0DH) |
GANZZAHL 21H (0x21)
Funktion 0BH (0x0B oder 11) --> Überprüfen Sie den Eingangsstatus
Call with: AH = 0BH
Returns: AL = 00H (if no character is available)
FFH (if at least one character is available)
Bemerkungen:
Überprüft, ob ein Zeichen auf dem Standardeingabegerät wie der Tastatur verfügbar ist. Diese Funktion entspricht IOCTL INT 21H Funktion 44H Unterfunktion 06H.
GANZZAHL 21H (0x21)
Funktion 0CH (0x0C oder 12) --> Eingangspuffer leeren und dann Eingabe
Call with: AH = 0CH
AL = number of input to be invoked after resetting
buffer (must be 01H, 06H, 07H, 08H or 0AH)
If AL = 0AH
DS: DX = segment: offset of input buffer
Returns: If called with AL = 01H, 06H, 07H, or 08H,
AL = 8-bit input data
If called with AL= 0AH,
Nothing (data placed in buffer)
Bemerkungen:
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 löscht den Eingabepuffer und gibt die Steuerung an das aufrufende Programm zurück.
GANZZAHL 21H (0x21)
Funktion 0DH (0x0D oder 13) -> Festplatte zurücksetzen
Aufruf mit: AH = 0DH
Rückgabe: Nichts
Bemerkungen:
Diese Funktion leert alle Dateipuffer. Die Funktion aktualisiert das Plattenverzeichnis nicht für noch geöffnete Dateien.
GANZZAHL 21H (0x21)
Funktion 0EH (0x0E oder 14) -> Datenträger auswählen
Aufruf mit: AH = 0EH
DL = Laufwerkscode (0 = A, 1= B usw.)
Rückgabewerte: AL = Anzahl der logischen Laufwerke im System
Bemerkungen:
Wählt das angegebene Laufwerk als aktuelles oder Standardlaufwerk aus und gibt die Gesamtzahl der logischen Laufwerke im System zurück.
Die Anwendungen sollten sich auf die Laufwerksbuchstaben A-Z (0 = A, 1 = B usw.) beschränken. Logische Laufwerke bedeutet die Gesamtzahl der Blockgeräte wie Disketten- und Festplattenlaufwerke usw. Allgemein Ein einzelnes physisches Festplattenlaufwerk ist in zwei oder mehr logische Laufwerke partitioniert.
GANZZAHL 21H (0x21)
Funktion 0FH (0x0F oder 15) -> Datei öffnen
Call with: AH = 0FH
S: DX = segment: offset of file control block
Returns: If function successful and file found
AL = 00H
And FCB filled in by MS-DOS is as follows:
Drive field (offset 00H) =1 for drive A, 2 for drive B, etc. Current block field (offset 0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Data field (offset 14H) = date stamp from directory
Time field (offset 16H) = time stamp from directory
Wenn Funktion nicht erfolgreich und Datei nicht gefunden
AL = 0FFH
Bemerkungen:
Öffnet eine Datei und stellt sie für nachfolgende Lese-/Schreiboperationen zur Verfügung. Wenn das Programm eine andere Datensatzgröße als 128 Bytes verwenden wird, sollte es das Feld für die Datensatzgröße auf den FCB-Offset 0EH setzen, nachdem die Datei erfolgreich geöffnet wurde, und vor jeder anderen Festplattenoperation.
GANZZAHL 21H (0x21)
Funktion 10H (0x10 oder 16) -> Datei schließen
Call with: AH = 10H
DS: DX = segment: offset of file control block
Returns: If function successful (directory update successful)
AL = 00H
If function unsuccessful (file not found in directory)
AL = FFH
Bemerkungen:
Es wird verwendet, um eine Datei zu schließen. Es schließt eine Datei, leert alle internen MS-DOS-Festplattenpuffer, die der Datei zugeordnet sind, auf die Festplatte und aktualisiert das Festplattenverzeichnis, wenn die Datei geändert oder erweitert wurde.
GANZZAHL 21H (0x21)
Funktion 11H (0x11 oder 17) -> Erste Datei finden
Call with: AH = 11H
DS: DX = segment: offset of file control block
Returns: If function successful and matching file found
AL = 00H
Und Puffer an der Adresse des aktuellen Plattenübertragungsbereichs (DTA), gefüllt als ungeöffneter normaler FCB oder erweiterter FCB, je nachdem, welche Art von FCB eingegeben wurde, um zu funktionieren.
Wenn Funktion nicht erfolgreich (kein passender Dateiname gefunden)
AL = FFH
Bemerkungen:
Es durchsucht das aktuelle Verzeichnis auf dem angegebenen Laufwerk nach einem passenden Dateinamen. Sie können Wildcards (? und *) verwenden. Diese Funktion gibt den ersten übereinstimmenden Dateinamen zurück.
GANZZAHL 21H (0x21)
Funktion 12H (0x12 oder 18) -> Nächste Datei finden
Call with: AH = 12H
DS: DX = segment: offset of file control block
Returns: If function successful and matching filename found
AL = 00H
And buffer at current disk transfer area (DTA) address set up as an unopened normal FCB or extended FCB, depending on which type of FCB was originally input to INT21H function 11H
If function unsuccessful and matching filenames not found
AL = FFH
Bemerkungen:
Dies ist der Begleiter der vorherigen Funktion. Wenn INT 21H Funktion 11H erfolgreich war, gibt sie den nächsten übereinstimmenden Dateinamen zurück, falls vorhanden. Diese Funktion setzt voraus, dass der als Eingabe verwendete FCB durch einen vorherigen Aufruf der INT 21H-Funktion 11H und mögliche nachfolgende Aufrufe der INT 21H-Funktion 12H ordnungsgemäß initialisiert wurde und dass der Dateiname oder die Erweiterung, nach der gesucht wird, mindestens ein Platzhalterzeichen enthielt.
GANZZAHL 21H (0x21)
Funktion 13H (0x13 oder 19) -> Datei löschen
Call with: AH = 13H
DS: DX = segment: offset of file control block
Returns: If function is successful and file or files deleted
AL = 00H
If function is unsuccessful and no matching files were found or at least one matching file was read-only,
AL = FFH
Bemerkungen:
Es löscht alle übereinstimmenden Dateien aus dem aktuellen Verzeichnis auf dem standardmäßigen oder angegebenen Laufwerk. Sie können auch Platzhalter (? und *) verwenden.
GANZZAHL 21H (0x21)
Funktion 14H (0x14 oder 20) -> Sequentielles Lesen
Call with: AH = 14H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
Bemerkungen:
Diese Funktion liest den nächsten sequentiellen Datenblock aus einer Datei und inkrementiert 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 Adresse des Plattenübertragungsbereichs (DTA), die durch den letzten Aufruf der INT 21H-Funktion 1AH angegeben ist, in den Speicher gelesen. Wenn die Größe des Datensatzes und die Position des Puffers so sind, dass ein Segmentüberlauf oder -umbruch auftreten würde, schlägt die Funktion mit dem Rückgabecode 02H fehl.
GANZZAHL 21H (0x21)
Funktion 15H (0x15 oder 21) --> Sequentielles Schreiben
Call with: AH = 15H
DS: DX = segment: offset of previously opened file control block
Returns: AL = 00H, if write successful
01H, if disk is file
02H, if segment wrap
Bemerkungen:
Diese Funktion schreibt den nächsten sequentiellen Datenblock in eine Datei und inkrementiert dann den Dateizeiger entsprechend. Die Anzahl der zu schreibenden Datenbytes wird durch das Datensatzgrößenfeld (Offset 0EH) des Dateisteuerblocks (FCB) angegeben.
GANZZAHL 21H (0x21)
Funktion 16H (0x16 oder 22) --> Erstelle Datei
Call with: AH = 16H
DS: DX = segment: offset of unopened file control block
Returns: If function is successful and file was created or truncated
AL = 00H
And FCB filled in by MS-DOS as follows:
Drive field (offset 00H) = 1 for drive A, 2 for drive B, etc.
Current block field (offset0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Date field (offset 14H) = date stamp from directory
Time field (offset 16H = time stamp from directory
If function unsuccessful (directory full)
AL = FFH
Bemerkungen:
Diese Funktion erstellt einen neuen Verzeichniseintrag im aktuellen Verzeichnis oder kürzt jede vorhandene Datei mit demselben Namen auf die Länge Null. Öffnet die Datei auch für nachfolgende Lese-/Schreibvorgänge. 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.
GANZZAHL 21H (0x21)
Funktion 17H (0x17 oder 23) --> Datei umbenennen
Call with: AH = 17H
DS: DX = segment: offset of special file control block
Returns: If function is successful and one or more files renamed
AL = 00H
If function is unsuccessful and no matching files, or new filename matched an existing file
AL = FFH
Bemerkungen:
Diese Funktion ändert den Namen aller übereinstimmenden Dateien im aktuellen Verzeichnis auf der Festplatte im angegebenen Laufwerk.
Dabei können Sie auch Wildcards verwenden. Der spezielle Dateisteuerblock 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
GANZZAHL 21H (0x21)
Funktion 19H (0x19 oder 25) --> Holen Sie sich die aktuelle Festplatte
Call with: AH = 19H
Returns: AL = drive code (0 for A drive, 1 for B drive etc.)
Bemerkungen:
Diese Funktion gibt den Laufwerkscode des aktuellen oder Standardlaufwerks zurück.
GANZZAHL 21H (0x21)
Funktion 1AH (0x1A oder 26) --> DTA-Adresse einstellen
Call with: AH = 1AH
DS: DX = segment: offset of disk transfer area.
Returns: Nothing
Bemerkungen:
Diese Funktion gibt die Adresse des Plattenübertragungsbereichs (DTA) an, der für nachfolgende FCB-bezogene Funktionsaufrufe verwendet werden soll.
GANZZAHL 21H (0x21)
Funktion 1BH (0x1B oder 27) --> Standardlaufwerk abrufen
Daten
Call with: AH = 1BH
Returns: If function successful
AL = sectors per cluster
DS: DX = segment offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default drive
If function unsuccessful (invalid drive or critical error)
AL = FFH
Bemerkungen:
Diese Funktion erhält ausgewählte Informationen über das Standard-Plattenlaufwerk und einen Zeiger auf das Medienidentifikationsbyte aus seiner Dateizuordnungstabelle.
Das Medien-ID-Byte hat folgende Bedeutung:
Media Descriptor ID |
Medium |
0F0H |
3.5-inch Floppy Disk, double-sided, 18 sectors (or other) |
0F8H |
fixed disk |
0F9H |
5.25-inch Floppy Disk, double-sided, 15 sectors |
0F9H |
3.5-inch Floppy Disk, double-sided, 9 sectors |
0FCH |
5.25-inch Floppy Disk, single-sided, 9 sectors |
0FDH |
5.25-inch Floppy Disk, double-sided, 9 sectors |
0FDH |
8-inch Floppy Disk, single sided, single density |
0FEH |
5.25-inch Floppy Disk, single-sided, 8 sectors |
0FEH |
8-inch Floppy Disk, Single Sided, Single Density |
0FEH |
8-inch Floppy Disk, Double Sided, Double Density |
0FFH |
5.25-inch Floppy Disk, double-sided, 8 sectors |
GANZZAHL 21H (0x21)
Funktion 1CH (0x1C oder 28) --> Fahrdaten abrufen
Call with: AH = 1CH
DL = Drive Code
Returns: If function is successful
AL = sectors per cluster
DS: BX = segment: offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default or specified drive
If function is unsuccessful and invalid drive or critical error
AL = FFH
Bemerkungen:
Diese Funktion erhält Zuordnungsinformationen über das angegebene Plattenlaufwerk und einen Zeiger auf das Medienidentifikationsbyte aus seiner Dateizuordnungstabelle. Beziehen Sie sich für Medien-ID-Informationen auf die Medien-Beschreibungs-ID-Byte-Tabelle, die in INT 21H, Funktion 1BH angegeben ist.
GANZZAHL 21H (0x21)
Funktion 1DH (0x1D oder 29) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 1EH (0x1E oder 30) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 1FH (0x1F oder 31) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 20H (0x20 oder 32) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 21H (0x21 oder 33) --> Zufälliges Lesen
Call with: AH = 21H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap, read canceled
03H if partial record read at end of
file
Bemerkungen:
Diese Funktion liest einen ausgewählten Datensatz aus einer Datei in den Speicher. Der Datensatz wird an der aktuellen Plattentransferbereichsadresse in den Speicher gelesen, die durch den letzten Aufruf der INT 21H-Funktion 1AH angegeben ist.
GANZZAHL 21H (0x21)
Funktion 22H (0x22 oder 34) --> Zufälliges Schreiben
Call with: AH = 22H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if write successful
01H if disk full
02H if segment wrap, write canceled
Bemerkungen:
Diese Funktion schreibt die Daten aus dem Speicher in einen ausgewählten Datensatz in einer Datei.
GANZZAHL 21H (0x21)
Funktion 23H (0x23 oder 35) --> Dateigröße erhalten
Call with: AH = 23H
DS: DX = segment: offset of unopened file
control block
Returns: If function is successful and matching filename found
AL = 00H
And FCB relative-record field (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record
If function is unsuccessful and no matching file found
AL = FFH
Bemerkungen:
Diese Funktion sucht im aktuellen Verzeichnis nach einer passenden Datei; wenn einer gefunden wird, aktualisiert der FCB mit der Größe der Datei in Bezug auf die Anzahl der Datensätze. 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) gesetzt werden.
GANZZAHL 21H (0x21)
Funktion 24H (0x24 oder 36) --> Relativen Rekord setzen
Nummer
Call with: AH = 24H
DS: DX = segment: offset of previously opened
file control block
Returns: AL is destroyed (other register not affected)
FCB relative-record field (offset 21H) updated
Bemerkungen:
Diese Funktion setzt das relative Datensatznummernfeld eines Dateisteuerblocks (FCB) so, dass es der aktuellen Dateiposition entspricht, wie sie im geöffneten FCB aufgezeichnet ist.
GANZZAHL 21H (0x21)
Funktion 25H (0x25 oder 37) --> Interrupt-Vektor setzen
Call with: AH = 25H
AL = interrupt number
DS: DX = segment: offset of interrupt handling
routine
Returns: Nothing
Bemerkungen:
Diese Funktion initialisiert einen CPU-Unterbrechungsvektor, um auf eine Unterbrechungsbehandlungsroutine zu zeigen. Sie sollte der direkten Bearbeitung der Interrupt-Vektortabelle durch wohlerzogene Anwendungen vorgezogen werden.
GANZZAHL 21H (0x21)
Funktion 26H (0x26 oder 38) --> Neues Programm erstellen
Segmentpräfix (PSP)
Call with: AH = 26H
DX = segment: of new program segment
prefix (PSP)
Returns: Nothing
Bemerkungen:
Diese Funktion kopiert das Programmsegmentpräfix (PSP) des derzeit ausgeführten Programms an eine angegebene Segmentadresse im freien Speicher und aktualisiert dann das neue PSP, um es für ein anderes Programm verwendbar zu machen.
GANZZAHL 21H (0x21)
Funktion 27H (0x27 oder 39) --> Zufälliges Lesen von Blöcken
Call with: AH = 27H
CX = number of records to read
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records read
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
CX = actual number of records read
Bemerkungen:
Diese Funktion liest einen oder mehrere aufeinanderfolgende Datensätze aus einer Datei in den Speicher, beginnend an einer bestimmten Dateiposition. Wenn die Größe und Position des Puffers so sind, dass ein Segmentüberlauf oder -umbruch auftreten würde, schlägt die Funktion mit einem Rückkehrcode von 02H fehl, und wenn ein Teilsatz am Ende der Datei gelesen wird, wird der Rest des Satzes mit Nullen aufgefüllt .
GANZZAHL 21H (0x21)
Funktion 28H (0x28 oder 40) --> Zufälliges Blockschreiben
Call with: AH = 28H
CX = number of records to write
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records written
01H if disk full
02H if segment wrap
CX = actual number of records written
Bemerkungen:
Diese Funktion schreibt einen oder mehrere aufeinanderfolgende Datensätze aus dem Speicher in eine Datei, beginnend an einer bestimmten Dateiposition. Wenn Größe und Position des Puffers so sind, dass ein Segmentüberlauf oder -umbruch auftreten würde, schlägt die Funktion mit dem Rückkehrcode 02H fehl.
GANZZAHL 21H (0x21)
Funktion 29H (0x29 oder 41) --> Dateinamen parsen
Call with: AH = 29H
AL = flags to control parsing
Bit 0 = 1, if leading separators will be
scanned off (ignored).
= 0, if leading separators will not be
scanned off
Bit 1 = 1, if drive ID byte in FCB will be
modified only if a drive was
specified in the string being parsed.
= 0, if the drive ID byte in FCB will be
modified regardless, if no drive
specifier is present in the parsed string, FCB drive code field is set to 0 (default)
Bit 2 = 1, if filename field in FCB will be
modified only if a filename is
specified in the string being parsed.
= 0, if filename field in FCB will be modified regardless, if no filename is presenting the parsed string, FCB filename is set to ASCIIZ blanks.
Bit 3 = 1, if extension field in FCB will be
modified, only if an Extension is
specified in the string being parsed.
= 0, if extension field in FCB will be
modified regardless, if no extension
is present in the parsed string, FCB
extension is set to ASCIIZ blanks
DS: SI = segment: offset of string
ES: DI = segment: offset of file control block
Returns: AL = 00H, if no wildcard characters
Encountered 01H, if parsed string
contained wildcard characters FFH,
if drive specifier invalid
DS: SI = segment: offset of first character
after parsed filename
ES: DI = segment: offset of formatted
unopened file control block
Bemerkungen:
Diese Funktion parst eine Textzeichenfolge in die verschiedenen Felder eines Dateisteuerblocks (FCB).
Diese Funktion betrachtet die Zeichen (: . ; , = + Tabulator ) als Trennzeichen und alle Steuerzeichen und Zeichen (: . ; , = + Tabulator < > | / “ [ ]) als Abschlusszeichen.
GANZZAHL 21H (0x21)
Funktion 2AH (0x2A oder 42) --> Holen Sie sich Tag und Datum
Call with: AH = 2AH
Returns: CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
AL = day of the week (0 = Sunday,
1= Monday, etc.)
Bemerkungen:
Diese Funktion ermittelt den Systemtag des Monats, den Wochentag, den Monat und das Jahr.
GANZZAHL 21H (0x21)
Funktion 2BH (0x2B oder 43) --> Datum einstellen
Call with: AH = 2BH
CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
Returns: AL = 00H if date set successfully
FFH if date not valid (ignored)
Bemerkungen:
Diese Funktion initialisiert den Systemuhrtreiber auf ein bestimmtes Datum, aber die Systemzeit bleibt unverändert.
GANZZAHL 21H (0x21)
Funktion 2CH (0x2C oder 44) --> Zeit kriegen
Call with: AH = 2CH
Returns: CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Bemerkungen:
Dies wird verwendet, um die Tageszeit vom Echtzeituhrtreiber des Systems zu erhalten, konvertiert in Stunden, Minuten, Sekunden und Hundertstelsekunden.
GANZZAHL 21H (0x21)
Funktion 2DH (0x2D oder 45) --> Zeit einstellen
Call with: AH = 2DH
CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Returns: AL = 00H, if time set successfully
FFH, if time not valid (ignored)
Bemerkungen:
Diese Funktion initialisiert die Echtzeituhr des Systems auf eine angegebene Stunde, Minute, Sekunde und Hundertstelsekunde. Das Systemdatum wird nicht beeinflusst.
GANZZAHL 21H (0x21)
Function 2EH (0x2E or 46) --> Set verify flag
Call with: AH = 2EH
AL = 00H, if turning off verify flag
01H, if turning on verify flag
DL = 00H
Returns: Nothing
Bemerkungen:
Diese Funktion schaltet das Betriebssystem-Flag für die automatische Read-after-Write-Überprüfung von Daten aus oder ein. Die Standardeinstellung des Prüfflags ist AUS, da die Lese-nach-Schreib-Prüfung den Festplattenbetrieb verlangsamt.
GANZZAHL 21H (0x21)
Funktion 2FH (0x2F oder 47) --> DTA-Adresse abrufen
Call with: AH = 2FH
Returns:ES: BX = segment: offset of disk transfer area
Bemerkungen:
Diese Funktion erhält die aktuelle Adresse des Plattenübertragungsbereichs (DTA) für FCB-Datei-Lese-/Schreiboperationen.
GANZZAHL 21H (0x21)
Funktion 30H (0x30 oder 48) --> Holen Sie sich MS-DOS
Versionsnummer
Call with: AH = 30H
AL = 00H
Returns: AL = major version number (MS-DOS 3.10=3, etc.)
AH = minor version number (MS-DOS 3.10= 0AH, etc.)
BH = Original Equipment Manufacturer’s
(OEM’s) serial number (OEM-dependent-usually 00H for IBM’s
PC-DOS, 0FFH or other values for MS-DOS)
BL: CX = 24-bit user serial number (optional, OEM-dependent)
Bemerkungen:
Es gibt die Versionsnummer des Host-MS-DOS-Betriebssystems zurück.
GANZZAHL 21H (0x21)
Funktion 31H (0x31 oder 49) --> Kündigen und bleiben
Einwohner (TSR)
Call with: AH = 31H
AL = return code
DX = amount of memory in paragraphs, to reserve
Returns Nothing
Bemerkungen:
Diese Funktion beendet die Ausführung des aktuell ausgeführten Programms, indem sie einen Rückkehrcode an den übergeordneten Prozess weiterleitet, reserviert jedoch einen Teil oder den gesamten Speicher des Programms, so dass es von dem nächsten zu ladenden Übergangsprogramm überlagert wird. Diese Funktion sollte INT 27H vorgezogen werden, da sie CS unterstützt, um das Segment des Programmsegmentpräfixes zu enthalten.
GANZZAHL 21H (0x21)
Funktion 32H (0x32 oder 50) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 33H (0x33 oder 51) --> Break-Flag abrufen oder setzen, Boot-Laufwerk abrufen
Call with: If getting break flag
AH = 33H
AL = 00H
If setting break flag
AH = 33H
AL = 01H
DL = 00H if turning break flag OFF
01H if turning break flag ON
If getting boot drive
AH = 33H
AL = 05H
Returns: If called with AL = 00H or 01H
DL = 00H break flag is OFF
01H break flag is ON
If called with AL = 05H
DL = boot drive (1 = A, 2 = B, etc.)
Bemerkungen:
Diese Funktion erhält oder ändert den Status des Break-Flags des Betriebssystems, das die Ctrl-C-Prüfung während Funktionsaufrufen beeinflusst.
GANZZAHL 21H (0x21)
Funktion 34H (0x34 oder 52) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 35H (0x35 oder 53) --> Interrupt-Vektor erhalten
Call with: AH = 35H
AL = interrupt number
Returns: ES: BX = segment: offset of interrupt handler
Bemerkungen:
Diese Funktion erhält die Adresse der aktuellen Interrupt-Handler-Routine für den angegebenen Maschinen-Interrupt.
GANZZAHL 21H (0x21)
Funktion 36H (0x36 oder 54) --> Laufwerkszuweisung erhalten
Information
Call with: AH = 36H
DL = drive code (0 default, 1 = A, etc.)
Returns: If function successful
AX = sector per cluster
BX = number of available cluster
CX = bytes per sector
DX = cluster per drive
If function unsuccessful (drive invalid)
AX = FFFFH
Bemerkungen:
Diese Funktion ruft ausgewählte Informationen über ein Laufwerk ab.
Diese Funktion ist sehr wichtig bei der Datenwiederherstellung und der Programmierung der Datenträgerfehlersuche, aus der die Kapazität des Laufwerks und der verbleibende freie Speicherplatz und viele andere wichtige Dinge berechnet werden können.
GANZZAHL 21H (0x21)
Funktion 37H (0x37 oder 55) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 38H (0x38 oder 56) --> Land abrufen oder festlegen
Information
Call with: If getting country information
AH = 38H
AL = 0, to get current country information
1-FEH, to get information for
countries with code <255
FFH, to get information for countries
with code >=255
BX = country code, if AL = FFH
DS:DX = segment: offset of buffer for returned information
If setting current country code
AH = 38H
AL = 1-FEH, country code for countries with code <255
FFH, for countries with code >=255
BX = country code, if AL = 0FFH
DX = FFFFH
Returns:
If function is successful
Carry flag = clear
And, if getting internationalization information
BX = country code
DS: DX = segment: offset of buffer holding internationalization Information.
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion ruft internationale Informationen für das aktuelle oder angegebene Land ab oder stellt den aktuellen Ländercode ein.
GANZZAHL 21H (0x21)
Funktion 39H (0x39 oder 57) --> Verzeichnis erstellen
Call with: AH = 39H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion erstellt ein Verzeichnis unter Verwendung des angegebenen Laufwerks und Pfads.
ASCIIZ is known as the sequence of ASCII characters terminated be, Null or Zero, Byte. |
GANZZAHL 21H (0x21)
Funktion 3AH (0x3A oder 58) --> Verzeichnis löschen
Call with: AH = 3AH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion entfernt ein Verzeichnis unter Verwendung des angegebenen Laufwerks und Pfads. Wenn ein Element des Pfadnamens nicht existiert oder das Verzeichnis nicht leer ist oder der Zugriff verweigert wird oder das angegebene Verzeichnis auch das aktuelle Verzeichnis ist, schlägt die Funktion zum Löschen des Verzeichnisses fehl.
GANZZAHL 21H (0x21)
Funktion 3BH (0x3B oder 59) --> Strom einstellen
Verzeichnis
Call with: AH = 3BH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion legt das aktuelle oder Standardverzeichnis unter Verwendung des angegebenen Laufwerks und Pfads fest. Wenn der angegebene Pfad oder ein Element des Pfads nicht vorhanden ist, schlägt die Funktion fehl.
GANZZAHL 21H (0x21)
Funktion 3CH (0x3C oder 60) --> Erstelle Datei
Call with: AH = 3CH
CX = file attribute, where attribute
significance bits may be Combined.
Die Bedeutung der Bits ist in der folgenden Tabelle angegeben:
Bit(s) |
Significance (if set) |
0 |
Read-only |
1 |
Hidden |
2 |
System |
3 |
Volume label |
4 |
Reserved (0) |
5 |
Archive |
6 – 15 |
Reserved (0) |
DS: DX = segment: offset of ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Wenn ein ASCIIZ-Pfadname angegeben wird, erstellt diese Funktion eine neue Datei im bezeichneten oder Standardverzeichnis auf dem bezeichneten oder Standard-Plattenlaufwerk. 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 Element des Pfadnamens nicht vorhanden ist oder eine Datei im Stammverzeichnis erstellt wird und das Stammverzeichnis voll ist oder der Zugriff verweigert wird oder eine Datei mit dem Nur-Lesen-Attribut bereits im angegebenen Verzeichnis vorhanden ist, schlägt die Funktion zum Erstellen der Datei fehl.
GANZZAHL 21H (0x21)
Funktion 3DH (0x3D oder 61) --> Datei öffnen
Call with: AH = 3DH
AL = access mode
Die Bedeutung der Zugriffsmodus-Bits ist in der folgenden Tabelle angegeben:
Bits |
Significance |
0 – 2 |
Access Mode
000 = read access
001 = write access
010 = read/write access |
3 |
Reserved (0) |
4 – 6 |
Sharing Mode
000 = compatibility mode
001 = deny all
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance flag
0 = child process inherits handle
1 = child does not inherit handle |
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Wenn ein ASCIIZ-Pfadname angegeben ist, öffnet diese Funktion die angegebene Datei im bezeichneten oder Standardverzeichnis auf dem bezeichneten oder Standard-Plattenlaufwerk. Es wird ein Handle zurückgegeben, das vom Programm für spätere Zugriffe auf die Datei verwendet werden kann.
GANZZAHL 21H (0x21)
Funktion 3EH (0x3E oder 62) --> Datei schließen
Call with: AH = 3EH
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion löscht alle internen Puffer, die der Datei zugeordnet sind, auf die Platte, schließt die Datei und gibt das Handle zur Wiederverwendung frei, das zuvor geöffnet oder mit Erfolg eines bestimmten Handles erstellt wurde. Wenn die Datei geändert wurde, werden der Zeit- und Datumsstempel und die Dateigröße im Verzeichniseintrag der Datei aktualisiert.
GANZZAHL 21H (0x21)
Funktion 3FH (0x3F oder 63) --> Datei oder Gerät lesen
Call with: AH = 3FH
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion überträgt Daten an der aktuellen Dateizeigerposition aus der Datei in den Puffer und aktualisiert dann die Dateizeigerposition für ein gegebenes gültiges Dateihandle von einer vorherigen Öffnungs- oder Erstellungsoperation, eine Pufferadresse und eine Länge in Bytes.
GANZZAHL 21H (0x21)
Funktion 40H (0x40 oder 64) --> Datei oder Gerät schreiben
Call with: AH = 40H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion überträgt Daten aus dem Puffer in die Datei und aktualisiert dann die Dateizeigerposition für ein gegebenes gültiges Dateihandle von einer vorherigen Öffnungs- oder Erstellungsoperation, eine Pufferadresse und eine Länge in Bytes. Wird die Funktion mit CX = 0 aufgerufen, wird die Datei abgeschnitten bzw. bis zur aktuellen Dateizeigerposition erweitert.
GANZZAHL 21H (0x21)
Funktion 41H (0x41 oder 65) --> Datei löschen
Call with: AH = 41H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion löscht eine Datei vom standardmäßigen oder angegebenen Datenträger und Verzeichnis. 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 tatsächlich in diesen Clustern gespeicherten Daten nicht überschrieben.
GANZZAHL 21H (0x21)
Funktion 42H (0x42 oder 66) --> Dateizeiger setzen
Call with: AH = 42H
AL = method code
00H absolute offset from start of file
01H signed offset from current file
pointer
02H signed offset from end of file
BX = handle
CX = most significant half of offset
DX = least significant half of offset
Returns: if function is successful
Carry flag = clear
DX = most significant half of resulting file
pointer
AX = least significant half of resulting file
pointer
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion setzt die Position des Dateizeigers relativ zum Anfang der Datei, zum Ende der Datei oder zur aktuellen Dateiposition.
GANZZAHL 21H (0x21)
Funktion 43H (0x43 oder 67) --> Get- oder Set-Datei
Attribute
Call with: AH = 43H
AL = 00H to get attributes
01H to set attributes
CX = file attribute, if AL=01H. Bits can be combined
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
CX = file attribute
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion erhält oder ändert die Attribute einer Datei (schreibgeschützt, versteckt, System oder Archiv) oder eines Verzeichnisses. Für die Bedeutung von Bits für verschiedene Attribute siehe die zuvor angegebene Bit-Bedeutungstabelle.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68) --> Input-Output Steuerung (E/A-Steuerung)
Diese Funktion stellt einen direkten Kommunikationsweg zwischen einem Anwendungsprogramm und einem Gerätetreiber bereit. Es ermöglicht einem Programm, hardwareabhängige Informationen abzurufen und Operationen anzufordern, die von anderen MS-DOS-Funktionsaufrufen nicht unterstützt werden.
Die Unterfunktionen der Eingangs- und Ausgangssteuerung sind in der folgenden Tabelle angegeben:
Sub function |
Operation Name |
00H |
Get Device Information |
01H |
Set Device Information |
02H |
Receive Control Data from Character Device Driver |
03H |
Send Control Data to Character Device Driver |
04H |
Receive Control Data from Block Device Driver |
05H |
Send Control Data to Block Device Driver |
06H |
Check Input Status |
07H |
Check Output Status |
08H |
Check If Block Device Is Removable |
09H |
Check If Block Device Is Remote |
0AH (10) |
Check If Handle Is Remote |
0BH (11) |
Change Sharing Retry Count |
0CH (12)
|
Generic I/O Control for Character Devices
Value |
Description |
CL = 45H |
Set Iteration Count |
CL = 4AH |
Select Code Page |
CL = 4CH |
Start Code Page Preparation |
CL = 4DH |
End Code Page Preparation |
CL = 5FH |
Set Display Information |
CL = 65H |
Get Iteration Count |
CL = 6AH |
Query Selected Code Page |
CL = 6BH |
Query Prepare List |
CL = 7FH |
Get Display Information |
|
0DH (13)
|
Generic I/O Control for Block Devices
Value |
Description |
CL = 40H |
Set Device Parameters |
CL = 41H |
Write Track |
CL = 42H |
Format and Verify Track |
CL = 47H |
Set Access Flag |
CL = 60H |
Get Device Parameters |
CL = 61H |
Read Track |
CL = 62H |
Verify Track |
CL = 67H |
Get Access Flag |
|
0EH (14) |
Get Logical Drive Map |
0FH (15) |
Set Logical Drive Map |
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 00H (0x00)
E/A-Strg --> Geräteinformationen abrufen
Call with: AH = 44H
AL = 00H
BX = handle
Returns: If function successful
Carry flag = clear
DX = device information word
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion gibt ein Geräteinformationswort für die Datei oder das Gerät zurück, das dem angegebenen Handle zugeordnet ist.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 01H (0x01)
E/A-Strg --> Geräteinformationen einstellen
Call with: AH = 44H
AL = 01H
BX = handle
DX = device information word
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
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 ein Handle verwendet werden, das einer Datei zugeordnet ist.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 02H (0x02) E/A-Strg --> Steuerdatenzeichengerät lesen Treiber
Call with: AH = 44H
AL = 02H
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function is successful
Carry flag = clear
AX = bytes read
And buffer contains control data from driver
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Es liest Steuerdaten von einem Zeichengerätetreiber. Die Länge und der Inhalt der Daten sind für jeden Gerätetreiber spezifiziert und folgen keinem Standardformat. Diese Funktion führt nicht notwendigerweise zu einer Eingabe von dem physikalischen Gerät.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 03H (0x03) E/A-Strg --> Steuerdaten schreiben Zeichengerät Treiber
Call with: AH = 44H
AL = 03H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion überträgt Steuerdaten von einer Anwendung zu einem Zeichengerätetreiber. Die Länge und der Inhalt der Daten sind für jeden Gerätetreiber spezifisch und folgen keinem Standardformat. Diese Funktion ergibt sich nicht notwendigerweise aus einer Ausgabe an das physische Gerät.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 04H (0x04) E/A-Strg --> Steuerdatenblock-Gerätetreiber lesen
Call with: AH = 44H
AL = 04H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = bytes transferred
And buffer contains control data from device driver
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion überträgt Steuerdaten von einem Blockgerätetreiber direkt in den Puffer eines Anwendungsprogramms. Die Länge und der Inhalt der Daten sind für jeden Gerätetreiber spezifisch und folgen keinem Standardformat. Diese Funktion führt nicht notwendigerweise zu einer Eingabe von dem physischen Gerät.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 05H (0x05) E/A-Strg --> Steuerdatenblock-Gerätetreiber schreiben
Call with: AH = 44H
AL = 05H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion überträgt Steuerdaten von einem Anwendungsprogramm direkt an einen Blockgerätetreiber. Die Länge und der Inhalt der Steuerdaten sind für jeden Gerätetreiber spezifisch und folgen keinem Standardformat. Diese Funktion führt nicht notwendigerweise zu einer Ausgabe an das physische Gerät.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 06H (0x06) E/A-Strg --> Überprüfen Sie den Eingangsstatus
Call with: AH = 44H
AL = 06H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = 00H, if file pointer at EOF
FFH, if file pointer not at EOF
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Es gibt einen Code zurück, der angibt, ob das Gerät oder die Dateien, die einem Handle zugeordnet sind, zur Eingabe bereit sind.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 07H (0x07) E/A-Strg --> Ausgangsstatus prüfen
Call with: AH = 44H
AL = 07H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = FFH
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Es gibt einen Code zurück, der angibt, ob das einem Handle zugeordnete Gerät zur Ausgabe bereit ist.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 08H (0x08)
E/A-Strg --> Überprüfen Sie, ob das Blockgerät entfernbar ist
Call with: AH = 44H
AL = 08H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = 00H, if medium is removable
01H, if medium is not removable
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion prüft, ob das angegebene Blockgerät ein Wechselspeichermedium, wie z. B. eine Diskette, enthält. Wenn eine Datei nicht wie erwartet auf einem bestimmten Laufwerk gefunden wird, kann ein Programm diese Unterfunktion verwenden, um zu bestimmen, ob der Benutzer aufgefordert werden soll, eine andere Diskette einzulegen.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 09H (0x09)
E/A-Strg --> Überprüfen Sie, ob das Blockgerät remote ist
Call with: AH = 44H
AL = 09H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
DX = device attribute word
bit 12 = 0, if drive is local
= 1, if drive is remote
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion überprüft, ob das angegebene Blockgerät lokal (mit dem Computer verbunden ist, auf dem das Programm ausgeführt wird) oder remote (auf einen Netzwerkserver umgeleitet) ist.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0AH (0x0A oder 10) I/O Ctrl --> Überprüfen Sie, ob der Griff entfernt ist
Call with: AH = 44H
AL = 0AH
BX = handle
Returns: If function successful
Carry flag = clear
DX = attribute word for file or device
bit 15 = 0 if local
1 if remote
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Es prüft, ob sich das angegebene Handle auf eine Datei oder ein Gerät bezieht, das lokal (auf dem PC, auf dem das Programm ausgeführt wird) oder entfernt (auf einem Netzwerkserver) ist.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0BH (0x0B oder 11) I/O Ctrl --> Anzahl der Wiederholungsversuche für die Freigabe ändern
Call with: AH = 44H
AL = 0BH
CX = delays per retry (default = 1)
DX = number of retries (default = 3)
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion legt fest, wie oft MS-DOS einen Festplattenvorgang nach einem Fehler, der durch eine Dateifreigabeverletzung verursacht wurde, wiederholt, bevor es einen Fehler an den anfordernden Prozess zurückgibt. Diese Unterfunktion ist nur verfügbar, wenn das Dateifreigabemodul geladen ist.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0CH (0x0C oder 12) I/O Ctrl generische I/O-Steuerung für
Zeichengeräte
Call with: AH = 44H
AL = 0CH
BX = handle
CH =category (major) code:
00H = unknown
01H = COM1, COM2, COM3,OR COM4
03H = CON (keyboard and display)
05H = LPT1, LPT2, OR LPT3
CL = function (minor) code:
45H = Set Iteration Count
4AH = Select Code Page
4CH = Start Code Page Preparation
4DH = End Code Page Preparation
5FH = Set Display Information
65H = Get Iteration Count
6AH = Query Selected Code Page
6BH = Query Prepare List
7FH = Get Display Information
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 65H, 6AH, 6BH or 7FH
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Es stellt einen Allzweckmechanismus für die Kommunikation zwischen Anwendungsprogrammen und Zeichengerätetreibern bereit.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0DH (0x0D oder 13) I/O Ctrl --> generische E/A-Steuerung für Block
Geräte
Call with: AH = 44H
AL = 0DH
BL = drive code (0 =default, 1=A, 2=B, etc.)
CH = category (major) code:
08H = disk drive
CL = function (minor) code:
40H = Set Drive Parameters
41H = Write Track
42H = Format and Verify Track
47H = Set Access Flag
60H = Get Device Parameters
61H = Read Track
62H = Verify track
67H = Get Access Flag
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 60H or 61H
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion stellt einen Allzweckmechanismus für die Kommunikation zwischen Anwendungsprogrammen und Blockgerätetreibern bereit. Ermöglicht einem Programm, Geräteparameter für ein logisches Laufwerk zu prüfen oder zu ändern und Datenträgerspuren hardwareunabhängig zu lesen, zu schreiben, zu formatieren und zu überprüfen.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0EH (0x0E oder 14) I/O Ctrl -->> Holen Sie sich die logische Laufwerkskarte
Call with: AH = 44H
AL = 0EH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH logical drive code (1=A,
2=B, etc.) mapped to the block device
If function unsuccessful
Carry flag = set
AX =error code
Bemerkungen:
Es gibt den logischen Laufwerkscode zurück, der zuletzt verwendet wurde, um auf das angegebene Blocklaufwerk zuzugreifen.
GANZZAHL 21H (0x21)
Funktion 44H (0x44 oder 68), Unterfunktion 0FH (0x0F oder 15) I/O Ctrl --> logische Laufwerkszuordnung festlegen
Call with: AH = 44H
AL = 0FH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH, logical drive code (1=A,
2=B, etc.) mapped to the
block device
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion setzt den nächsten logischen Laufwerkscode, der verwendet wird, um auf ein Blockgerät zu verweisen.
GANZZAHL 21H (0x21)
Funktion 45H (0x45 oder 69) --> Doppelter Griff
Call with: AH = 45H
BX = handle to be duplicated
Returns: If function successful
Carry flag = clear
AX = new handle
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion gibt ein neues Handle zurück, das sich auf dasselbe Gerät oder dieselbe Datei an derselben Position für ein gegebenes Handle für ein aktuell geöffnetes Gerät oder eine Datei bezieht.
GANZZAHL 21H (0x21)
Funktion 46H (0x46 oder 70) --> Handle umleiten
Call with: AH = 46H
BX = handle for file or device
CX = handle to be redirected
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Wenn es zwei gegebene Handles gibt, 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.
GANZZAHL 21H (0x21)
Funktion 47H (0x47 oder 71) --> Holen Sie sich aktuell
Verzeichnis
Call with: AH = 47H
DL = drive code (0 =default, 1=A,
2=B, etc.)
DS: SI = segment: offset of 64-byte buffer
Returns: If function is successful
Carry flag = clear
And buffer is filled in with full pathname from root of current directory.
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion erhält eine ASCIIZ-Zeichenfolge, die den Pfad vom Stammverzeichnis zum aktuellen Verzeichnis und den Namen dieses Verzeichnisses beschreibt.
GANZZAHL 21H (0x21)
Funktion 48H (0x48 oder 72) --> Arbeitsspeicher zuweisen
Block
Call with: AH = 48H
BX = number of paragraphs of memory
needed
Returns: If function successful
Carry flag = clear
Ax = base segment address of allocated
block
If function unsuccessful
Carry flag = set
AX = error code
BX = size of largest available block
(paragraphs)
Bemerkungen:
Es weist einen Speicherblock zu und gibt einen Zeiger auf den Anfang des zugeordneten Bereichs zurück.
GANZZAHL 21H (0x21)
Funktion 49H (0x49 oder 73) --> Speicher loslassen
Block
Call with: AH = 49H
ES = segment of block to be released
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion wird verwendet, um einen Speicherblock freizugeben und ihn für die Verwendung durch andere Programme verfügbar zu machen. Die Funktion schlägt fehl oder kann unvorhersehbare Systemfehler verursachen, wenn das Programm einen Speicherblock freigibt, der nicht zu ihm gehört, oder die im Register ES übergebene Segmentadresse keine gültige Basisadresse für einen vorhandenen Speicherblock ist.
GANZZAHL 21H (0x21)
Funktion 4AH (0x4A oder 74) --> Speichergröße ändern
Block
Call with: AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
BX = maximum block size available
(paragraphs)
Bemerkungen:
Diese Funktion verkleinert oder erweitert einen Speicherblock entsprechend den Anforderungen eines Anwendungsprogramms dynamisch.
GANZZAHL 21H (0x21)
Funktion 4BH (0x4B oder 75) --> Programm ausführen (EXEC)
Call with: AH = 4BH
AL = sub function
00H = Load and Execute Program
03H = Load Overlay
ES: BX = segment: offset of parameter block
DS: DX = segment: offset of ASCIIZ program
pathname
Returns: If function successful
Carry flag = clear
Registers are preserved in the usual fashion.
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion ermöglicht es einem Anwendungsprogramm, ein anderes Programm auszuführen und die Kontrolle wiederzuerlangen, wenn es beendet ist. Kann auch zum Laden von Overlays verwendet werden, obwohl diese Verwendung ungewöhnlich ist.
GANZZAHL 21H (0x21)
Funktion 4CH (0x4C oder 76) --> Vorgang beenden
mit Returncode
Call with: AH = 4CH
AL = return code
Returns: Nothing
Bemerkungen:
Diese Funktion beendet den aktuellen Prozess und übergibt einen Rückgabecode an den übergeordneten Prozess. Dies ist eine von mehreren Methoden, die ein Programm verwenden kann, um einen endgültigen Exit durchzuführen.
GANZZAHL 21H (0x21)
Funktion 4DH (0x4D oder 77) --> Rückgabecode erhalten
Aufruf mit: AH = 4DH
Rückgabe: AH = Exit-Typ
00H, if normal termination by INT 20H, INT 21H
Function 00H, or INT 21H Functions 4CH
01H if termination by user’s entry of Ctrl-C
02H if termination by critical-error handler
03H if termination by INT21H Function 31H or
INT 27H |
AL = return code passed by child process
(0 if child terminated by INT 20H,
INT 21H Function 00H, or INT 27H)
Bemerkungen:
Diese Funktion wird von einem übergeordneten Prozess nach der erfolgreichen Ausführung eines EXEC-Aufrufs (INT 21H-Funktion 4BH) verwendet, um den Rückkehrcode und den Beendigungstyp eines untergeordneten Prozesses zu erhalten.
GANZZAHL 21H (0x21)
Funktion 4EH (0x4E oder 78) --> Erste Datei finden
Call with: AH = 4EH
CX = search attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful and matching file found
Carry flag = clear
Und die Suchergebnisse wurden im aktuellen Datenträgerübertragungsbereich wie folgt zurückgegeben:
Byte(s) |
Description |
00H-14H |
Reserved (0) |
15H |
Attribute of matched file or directory |
16H-17H |
File time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23) |
18H-19H
|
File date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980) |
1AH-1DH |
File size |
1EH-2AH |
ASCIIZ filename and extension |
Wenn die Funktion nicht erfolgreich ist
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion durchsucht das Standard- oder angegebene Verzeichnis auf dem Standard- oder angegebenen Laufwerk nach der ersten übereinstimmenden Datei für eine bestimmte Dateispezifikation in Form einer ASCIIZ-Zeichenfolge. Informationen zur Bitwertigkeit von Attributen finden Sie in der zuvor angegebenen Bitwertigkeitstabelle.
GANZZAHL 21H (0x21)
Funktion 4FH (0x4F oder 79) --> Nächste Datei finden
Call with: AH = 4FH
Returns: If function is successful and matching file found
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Wenn ein vorheriger erfolgreicher Aufruf der INT 21H-Funktion 4EH vorhanden ist, findet diese Funktion die nächste Datei im standardmäßigen oder angegebenen Verzeichnis auf dem standardmäßigen oder angegebenen Laufwerk, das der ursprünglichen Dateispezifikation entspricht.
GANZZAHL 21H (0x21)
Funktion 50H (0x50 oder 80) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 51H (0x51 oder 81) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 52H (0x52 oder 82) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 53H (0x53 oder 83) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 54H (0x54 oder 84) --> Bestätigungsflag erhalten
Call with: AH = 54H
Returns: AL = current verify flag value
00H if verify off
01H if verify on
Bemerkungen:
Diese Funktion erhält den aktuellen Wert des Systemverifizierungs-(Lesen-nach-Schreiben)-Flags.
GANZZAHL 21H (0x21)
Funktion 55H (0x55 oder 85) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 56H (0x56 oder 86) --> Datei umbenennen
Call with: AH = 56H
DS: DX = segment: offset of current ASCIIZ
pathname
ES: DI = segment: offset of new ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion benennt eine Datei um und/oder verschiebt ihren Verzeichniseintrag an einen anderen Ort auf derselben Festplatte. In MS-DOS-Versionen 3.0 und höher kann diese Funktion auch zum Umbenennen von Verzeichnissen verwendet werden
Wenn ein Element des Pfadnamens nicht existiert oder eine Datei mit dem neuen Pfadnamen bereits existiert oder die aktuelle Pfadnamenspezifikation ein anderes Laufwerk enthält als der neue Pfadname oder die Datei in das Stammverzeichnis verschoben wird und das Stammverzeichnis voll ist oder Benutzer hat unzureichende Rechte, Funktion zum Umbenennen von Dateien schlägt fehl.
GANZZAHL 21H (0x21)
Funktion 57H (0x57 oder 87) --> Abrufen oder Festlegen von Dateidatum und -zeit
Call with: If getting date and time
AH = 57H
AL = 00H
BX = handle
If setting date and time
AH = 57H
AL = 01H
BX = handle
CX = time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23)
DX = date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980)
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
CX = time
DX = date
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion erhält oder modifiziert den Datums- und Zeitstempel im Stammverzeichniseintrag der Datei.
GANZZAHL 21H (0x21)
Funktion 58H (0x58 oder 88) --> Abrufen oder Festlegen der Zuweisungsstrategie
Call with: If getting strategy code
AH = 58H
AL = 00H
If setting strategy code
AH = 58H
AL = 01H
BX = desired strategy code
00H = first fit
01H = best fit
02H = last fit
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
AX = current strategy code
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Ruft den Code ab oder ändert ihn, der die aktuelle MS-DOS-Strategie zum Zuweisen von Speicherblöcken angibt. Die standardmäßige MS-DOS-Speicherzuordnungsstrategie ist First Fit (Code 0).
Bei der First-Fit-Speicherzuweisung durchsucht MS-DOS die verfügbaren Speicherblöcke von niedriger Adresse zu hoher Adresse und weist den ersten zu, der groß genug ist, um die Blockzuweisungsanforderung zu erfüllen.
Bei der Best-Fit-Zuweisungsstrategie 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 Last-fit-Speicherzuweisungsstrategie durchsucht MS-DOS die verfügbaren Speicherblöcke von hohen Adressen zu niedrigen Adressen und weist den höchsten zu, der groß genug ist, um die Blockzuweisungsanforderung zu erfüllen.
GANZZAHL 21H (0x21)
Funktion 59H (0x59 oder 89) --> Erweiterten Fehler erhalten
Information
Call with: AH = 59H
BX = 00H
Returns: AX = extended error code
Die Tabelle der Fehlercodes ist unten angegeben:
Error Code |
Error |
01H |
function number invalid |
02H |
file not found |
03H |
path not found |
04H |
too many open files |
05H |
access denied |
06H |
handle invalid |
07H |
memory control blocks destroyed |
08H |
insufficient memory |
09H |
memory block address invalid |
0AH (10) |
environment Invalid |
0BH (11) |
format invalid |
0CH (12) |
access code invalid |
0DH (13) |
data invalid |
0EH (14) |
unknown unit |
0FH (15) |
disk drive invalid |
10H (16) |
attempted to remove current directory |
11H (17) |
not same device |
12H (18) |
no more files |
13H (19) |
disk write-protected |
14H (20) |
unknown unit |
15H (21) |
drive not ready |
16H (22) |
unknown command |
17H (23) |
data error (CRC) |
18H (24) |
bad request structure length |
19H (25) |
seek error |
1AH (26) |
unknown media type |
1BH (27) |
sector not found |
1CH (28) |
printer out of paper |
1DH (29) |
write fault |
1EH (30) |
read fault |
1FH (31) |
general failure |
20H (32) |
sharing violation |
21H (33) |
lock violation |
22H (34) |
disk change invalid |
23H (35) |
FCB unavailable |
24H (36) |
sharing buffer exceeded |
25H-31H |
reserved |
32H (50) |
unsupported network request |
33H (51) |
remote machine not listening |
34H (52) |
duplicate name on network |
35H (53) |
network name not found |
36H (54) |
network busy |
37H (55) |
device no longer exists on network |
38H (56) |
net BIOS command limit exceeded |
39H (57) |
error in network adapter hardware |
3AH (58) |
incorrect response from network |
3BH (59) |
unexpected network error |
3CH (60) |
remote adapter incompatible |
3DH (61) |
print queue full |
3EH (62) |
not enough space for print file |
3FH (63) |
print file canceled |
40H (64) |
network name deleted |
41H (65) |
network access denied |
42H (66) |
incorrect network device type |
43H (67) |
network name not found |
44H (68) |
network name limit exceeded |
45H (69) |
net BIOS session limit exceeded |
46H (70) |
file sharing temporarily paused |
47H (71) |
network request not accepted |
48H (72) |
print or disk redirection paused |
49H-4FH |
reserved |
50H (80) |
file already exists |
51H (81) |
reserved |
52H (82) |
cannot make directory |
53H (83) |
fail on INT 24H (critical error) |
54H (84) |
too many redirections |
55H (85) |
duplicate redirection |
56H (86) |
invalid password |
57H (87) |
invalid parameter |
58H (88) |
network device fault |
59H (89) |
function not supported by network |
5AH (90) |
required system component not installed |
BH = error class
01H |
if out of resource (such as storage or handles) |
02H |
if not error, but temporary situation (such as locked region in file) that can be expected to end |
03H |
if authorization problem |
04H |
if internal error in system software |
05H |
if hardware failure |
06H |
if system software failure not the fault of the active process (such as missing configuration files) |
07H |
if application program error |
08H |
if file or item not found |
09H |
if file or item of invalid type or format |
0AH (10) |
if file or item locked |
0BH (11) |
if wrong disk in drive, bad spot on disk, or storage medium problem |
0CH (12) |
if item already exists |
0DH (13) |
unknown error |
BL = recommend action
01H |
Retry reasonable number of times, then prompt user to select abort or ignore |
02H |
retry reasonable number of times with delay between retries, then prompt user to select abort or ignore |
03H |
get correct information from user (typically caused by incorrect file name or device specification) |
04H |
abort application with cleanup (i.e., terminate the program in as orderly a manner as possible: releasing locks, closing files, etc.) |
05H |
perform immediate exit without cleanup |
06H |
ignore error |
07H |
retry after user intervention to remove cause of error |
CH = error locus
01H unknown
02H block device (disk or disk emulator)
03H network
04H serial device
05H memory
ES: DI = ASCIIZ volume label of disk to
insert, if AX = 0022H (invalid disk change)
Bemerkungen:
Diese Funktion ruft detaillierte Fehlerinformationen nach einem vorherigen erfolglosen INT 21H-Funktionsaufruf ab, einschließlich der empfohlenen Abhilfemaßnahme.
GANZZAHL 21H (0x21)
Funktion 5AH (0x5A oder 90) --> Temporär erstellen
Datei
Call with: AH = 5AH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ path
Returns: If function is successful
Carry flag = clear
AX = handle
DS: DX = segment: offset of complete ASCIIZ
pathname
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion erstellt eine Datei mit einem eindeutigen Namen im aktuellen oder angegebenen Verzeichnis auf dem standardmäßigen oder angegebenen Plattenlaufwerk und gibt eine Kennung zurück, die vom Programm für den nachfolgenden Zugriff auf die Datei verwendet werden kann. Der für die Datei generierte Name wird auch in einem vom Programm angegebenen Puffer zurückgegeben.
Wenn ein Element des Pfadnamens nicht vorhanden ist oder die Datei im Stammverzeichnis erstellt wird und das Stammverzeichnis voll ist, schlägt die Funktion fehl.
GANZZAHL 21H (0x21)
Funktion 5BH (0x5B oder 91) --> Neue Datei erstellen
Call with: AH = 5BH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function is successful
Carry flag = clear
AX = handle
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion erstellt eine Datei in dem bezeichneten oder Standardverzeichnis auf dem bezeichneten oder Standardlaufwerk und gibt eine Kennung zurück, die von dem Programm für den nachfolgenden Zugriff auf die Datei für einen gegebenen ASCIIZ-Pfadnamen verwendet werden kann.
Wenn eine Datei mit demselben Namen und Pfad bereits vorhanden ist oder ein Element des angegebenen Pfads nicht vorhanden ist oder die Datei im Stammverzeichnis erstellt wird und das Stammverzeichnis voll ist oder der Benutzer nicht genügend Zugriffsrechte hat, schlägt die Funktion fehl.
GANZZAHL 21H (0x21)
Funktion 5CH (0x5C oder 92) --> Dateibereich sperren oder entsperren
Call with: AH = 5CH
AL = 00H if locking region
01H if unlocking region
BX = handle
CX = high part of region offset
DX = low part of region offset
SI = high part of region length
DI = low part of region length
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion sperrt oder entsperrt den angegebenen Bereich einer Datei. Diese Funktion ist nur verfügbar, wenn das Dateifreigabemodul (z. B. SHARE.EXE) geladen ist.
GANZZAHL 21H (0x21)
Funktion 5DH (0x5D oder 93) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 5EH (0x5E oder 94), Unterfunktion 00H (0x00)
--> Maschinennamen abrufen
Call with: AH = 5EH
AL = 00H
DS: DX = segment: offset of buffer to receive
string
Returns: If function is successful
Carry flag = clear
CH = 00H if name not defined
<> 00H if name defined
CL = netBIOS name number (if CH <> 0)
DX: DX = segment: offset of identifier (if CH <> 0)
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
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.
GANZZAHL 21H (0x21)
Funktion 5EH (0x5E oder 94), Unterfunktion 02H (0x02)
--> Legen Sie die Zeichenfolge für die Druckereinrichtung fest
Call with: AH = 5EH
AL = 02H
BX = redirection list index
CX = length of setup string
DS: SI = segment: offset of setup string
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion gibt eine Zeichenfolge an, die vor allen an einen bestimmten Netzwerkdrucker gerichteten Dateien gesendet werden soll, sodass Benutzer an verschiedenen Netzwerkknoten individuelle Betriebsmodi auf demselben Drucker festlegen können.
GANZZAHL 21H (0x21)
Funktion 5EH (0x5E oder 94), Unterfunktion 03H (0x03)
--> Rufen Sie die Drucker-Setup-Zeichenfolge ab
Call with: AH = 5EH
AL = 03H
BX = redirection list index
ES: DI = segment: offset of buffer to receive
setup string
Returns: If function successful
Carry flag = clear
CX = length of printer setup string
ES: DI = segment: offset of buffer to receive
setup string
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion wird verwendet, um die Druckereinrichtungszeichenfolge für einen bestimmten Netzwerkdrucker zu erhalten.
GANZZAHL 21H (0x21)
Funktion 5FH (0x5F oder 95), Unterfunktion 02H (0x02)
--> Umleitungslisteneintrag abrufen
Call with: AH = 5FH
AL = 02H
BX = redirection list index
DS: SI = segment: offset of 16-byte buffer to
receive local device name
ES: DI = segment: offset of 128-byte buffer to
receive network name
Returns: If function successful
Carry flag = clear
BH = device status flag
Bit 0 = 0 if device valid
= 1 if not valid
BL = device type
03H, if printer
04H, if drive
CX = stored parameter value
DX = destroyed
BP = destroyed
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Unterfunktion ermöglicht die Überprüfung der Systemumleitungsliste, 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.
GANZZAHL 21H (0x21)
Funktion 5FH (0x5F oder 95), Unterfunktion 03H (0x03) --> Gerät umleiten
Call with: AH = 5FH
AL = 03H
BL = device type
03H, if printer
04H, if drive
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name, followed by ASCIIZ password
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
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.
GANZZAHL 21H (0x21)
Funktion 5FH (0x5F oder 95), Unterfunktion 04H (0x04)
--> Brechen Sie die Geräteumleitung ab
Call with: AH = 5FH
AL = 04H
DS: SI = segment: offset of ASCIIZ local
device name
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
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.
GANZZAHL 21H (0x21)
Funktion 60H (0x60 oder 96) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 61H (0x61 oder 97) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 62H (0x62 oder 98) --> Programmsegment abrufen
Präfix (PSP)-Adresse
Call with: AH = 62H
Returns: BX = segment address of program segment
prefix
Bemerkungen:
Diese Funktion erhält die Segmentadresse (Absatzadresse) des Programmsegmentpräfixes (PSP) für das aktuell ausgeführte Programm.
GANZZAHL 21H (0x21)
Funktion 64H (0x64 oder 100) --> Reserviert
INT 21H
Funktion 65H (0x65 oder 101) --> Lassen Sie sich verlängern
Länderinformationen
Call with: AH = 65H
AL = sub function
00H = Get General
Internationalization Information
02H = Get Pointer to Uppercase
Table
04H = Get Pointer to Filename
Uppercase Table
06H = Get Pointer to Collating Table
07H = Get Pointer to Double-Byte
Character Set (DBCS) Vector
BX = code page of interest (-1 = active
CON device)
CX = length of buffer to receive
information (must be >=5)
DX = country ID (-1 = default)
ES: DI = address of buffer to receive
information
Returns: If function successful
Carry flag = clear
And requested data placed in calling program’s buffer
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Dieser erhält Informationen über das angegebene Land und/oder die Codepage. Informationen zu Informationsbytes finden Sie in der zuvor angegebenen Internationalisierungstabelle.
GANZZAHL 21H (0x21)
Funktion 66H (0x66 oder 102) --> Code abrufen oder festlegen
Seite
Call with: AH = 66H
AL = sub function
01H = Get Code Page
02H = Select Code Page
BX = code page to select, if AL = 02H
Returns: If function is successful
Carry flag = clear
And, if called with AL = 01H
BX = active code page
DX = default code page
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion erhält oder wählt die aktuelle Codepage aus.
GANZZAHL 21H (0x21)
Funktion 67H (0x67 oder 103) --> Handle-Anzahl festlegen
Call with: AH = 67H
BX = number of desired handles
Returns: If function is successful
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion legt die maximale Anzahl von Dateien und Geräten fest, die gleichzeitig mit Handles vom aktuellen Prozess geöffnet werden dürfen.
GANZZAHL 21H (0x21)
Funktion 68H (0x68 oder 104) --> Commit-Datei
Call with: AH = 68H
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion erzwingt, dass alle Daten in internen Puffern von MS DOS, die einem bestimmten Handle zugeordnet sind, physisch auf das Gerät geschrieben werden. Wenn sich das Handle auf eine Datei bezieht und die Datei modifiziert wurde, werden der Zeit- und Datumsstempel und die Dateigröße im Stammverzeichniseintrag der Datei aktualisiert.
GANZZAHL 21H (0x21)
Funktion 69H (0x69 oder 105) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 6AH (0x6A oder 106) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 6BH (0x6B oder 107) --> Reserviert
GANZZAHL 21H (0x21)
Funktion 6CH (0x6C oder 108) --> Erweiterte offene Datei
Call with: AH = 6CH
AL = 00H
BX = open mode
Bit(s) |
Significance |
0-2 |
Access type
000 = read-only
001 = write-only
010 = read/write |
3 |
Reserved (0) |
4-6 |
Sharing mode
000 = compatibility
001 = deny read/write (deny all)
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance
0 = child process inherits handle
1 = child does not inherit handle |
8-12 |
Reserved (0) |
13 |
Critical error handling
0 = execute INT 24H
1 = return error to process |
14 |
Write-through
0 = writes may be buffered and deferred
1 = physical write at request time |
15 |
Reserved (0) |
CX = Dateiattribut (Bits können kombiniert werden;
wenn ignoriert, wenn offenbits Signifikanztabelle verweisen.
DX = offene Flagge
Bit(s) |
Significance |
0-3 |
Action if file exists
0000 = fail
0001 = open file
0010 = replace file |
4-7 |
Action if file does not exists
0000 = fail
0001 = create file |
8-15 |
Reserved (0) |
DS: SI = segment: offset of ASCIIZ pathname
Returns:mIf function successful
Carry flag = clear
AX = handle
CX = action taken
1 = file existed and was
opened
2 = file did not exists and
was created
3 = file existed and was
replaced
If function unsuccessful
Carry flag = set
AX = error code
Bemerkungen:
Diese Funktion öffnet, erstellt oder ersetzt eine Datei im bezeichneten oder voreingestellten Verzeichnis auf dem bezeichneten oder voreingestellten Plattenlaufwerk für einen gegebenen ASCIIZ-Pfadnamen und gibt eine Kennung zurück, die von dem Programm für den nachfolgenden Zugriff auf die Datei verwendet werden kann.
Wenn ein Element des Pfadnamens nicht vorhanden ist oder die Datei im Stammverzeichnis erstellt wird und das Stammverzeichnis voll ist oder die Datei erstellt wird und eine Datei mit demselben Namen und dem schreibgeschützten Attribut bereits im angegebenen Verzeichnis vorhanden ist oder der Benutzer nicht genügend Zugriffsrechte hat, schlägt die Funktion fehl.
Seite Geändert am: 08/03/2022