Zum Inhalt springen

Interrupts 80x86/ INT 21/ Arbeit mit Dateien (Handle)

Aus Wikibooks

Interrupts 80x86/ INT 21/ Disk Parameter Block

Allen Funktionen gemeinsam ist folgendes:

Die Adresse eines Pfadnamens wird in DS:DX übergeben. Der Pfadname muss im ASCIIZ-Format gespeichert sein, d.h. mit abschließendem Null-Byte. Der Pfadname kann Laufwerk und Verzeichnis enthalten (z. B. A:\TEXT\DATEI.TXT) oder auch nur einen Dateinamen enthalten (z. B. DATEI.TXT), der sich dann auf das aktuelle Laufwerk und Verzeichnis bezieht.

Die Funktionen 3Ch und 3Dh liefern im AX Register einen sogenannten Handle zurück, eine Dateinummer. Diese Nummer müssen Sie speichern - bei allen weiteren Zugriffen auf die Datei müssen Sie diese Nummer angeben. Der Eintrag Files=xx in der config.sys bzw. config.nt legt fest, wieviele Dateinummern insgesamt vergeben werden können. Wenn Sie eine Datei nicht mehr benötigen, können Sie diese mit der Funktion 3Eh schließen, dadurch wird die Nummer wieder frei. Beim Beenden eines Programms werden alle geöffneten Dateien vom Betriebssystem geschlossen.

Die Dateinummern 0, 1 und 2 sind vom Betriebssystem permanent reserviert für Standardeingabe, Standardausgabe und Ausgabe von Fehlermeldungen.

Int 21h Funktion 3Ch: Neue Datei erstellen

[Bearbeiten]
AH = 3Ch
DS:DX = Segment:Offset  Adresse des Pfadnamens (Dateinamens)

Ausgabe:

CY zeigt Fehler an, sonst
AX = Handle

Int 21h Funktion 3Dh: Vorhandene Datei öffnen

[Bearbeiten]
AH = 3Dh
AL = Zugriffscode (0 = nur Lesen, 1 = nur Schreiben, 2 = Lesen und Schreiben)
DS:DX = Segment:Offset  Adresse des Pfadnamens

Ausgabe:

CY zeigt Fehler an, sonst
AX = Handle


Int 21h Funktion 3Eh: Datei schließen

[Bearbeiten]
AH = 3Eh
BX = Handle-Nummer

Ausgabe:

CY zeigt Fehler an, sonst
AX = Fehler-Code oder Handle-Nummer


Int 21h Funktion 3Fh: Datei lesen

[Bearbeiten]
AH = 3Fh
BX = Handle-Nummer
CX = Anzahl zu lesender Bytes
DS:DX = Zeiger auf Zielspeicher

Ausgabe:

CY zeigt Fehler an, sonst
AX = Fehler-Code oder Handle-Nummer

Int 21h Funktion 40h: Datei schreiben

[Bearbeiten]
AH = 40h
BX = Handle-Nummer
CX = Anzahl zu schreibender Bytes
DS:DX = Zeiger auf Quellspeicher

Ausgabe:

CY zeigt Fehler an, sonst
AX = Fehler-Code oder Handle-Nummer

Int 21h Funktion 41h: Datei löschen

[Bearbeiten]
AH = 41h
DS:DX = Segment:Offset  Adresse des Dateinamens

Ausgabe:

CY zeigt Fehler an, sonst
AX = Fehler-Code oder Handle-Nummer

Fehlercodes

[Bearbeiten]
  • 01h File-Sharing nicht installiert
  • 02h Datei nicht gefunden
  • 03h Pfad oder Teile des Pfades nicht gefunden
  • 04h Zu viele geöffnete Dateien (Eintrag FILES in der CONFIG.SYS ist zu klein)
  • 05h Zugriff verweigert (z. B. Diskette voll)
  • 06H ungültiger Handle