8086 Assembler (MS-DOS):
Funktionsindex für INT 21H

Funktionsindex

Die Einzelbeschreibungen enthalten als Warnhinweis das Zeichen !.

Alle Zahlenangaben in den Einzelbeschreibungen sind hexadezimal. MS-DOS-Versionen vor 3 werden hier nicht beschrieben, obwohl einige Funktionen sich dort anders verhalten.

Zahlenangaben in den Einzelbeschreibungen sind hexadezimal.

Zur Beschreibung der Fehlercodes siehe das Quick-BASIC-Programm bei der Beschreibung von 59 Get Extended Error Information.

Alte Registerinhalte: Generell gilt, dass die Registerinhalte vor dem Aufruf von INT21h-Funktionen nicht gesichert werden müssen, denn sie bleiben erhalten. Das gilt natürlich nicht für die Register, in denen die betreffende INT21h-Funktion Werte zurückgibt. Lediglich bei den Funktionen 63h und 4Bh kann man sich nicht darauf verlassen, dass Registerinhalte erhalten bleiben. Die Funktion 63h wurde nur von MS-DOS 2.5 unterstützt. Bei Verwendung der Funktion 4Bh überstehen nur CS und IP mit Sicherheit den Funktionsaufruf. Das bedeutet, dass man vor diesem Funktionbsaufruf die Register SS und SP in Variablen innerhalb des Codesegmentes des aufrufenden Programmes sichern muss.

Ganz nach oben / Auswahl

FU00H

Terminate Program (CP/M)

Beendet Programm und gibt seinen Speicherbereich wieder an DOS zurück.

! Geänderte Dateilängen werden nicht im Directory vermerkt.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 31H oder 4CH angeraten.

Aufruf: AH=00
        CS=Segment PSP
Return: Int-Vektoren 22H bis 24H werden aus PSP ab Offset 0AH restauriert.
Alle Dateipuffer werden auf Disk geschrieben.
Fehler: keine

Ganz nach oben / Auswahl

FU01H

Read Keyboard and Echo (CP/M)

Liest ein Zeichen von Standard_Input.

Falls bei der Eingabe eine Funktionstaste betätigt wurde (AL=0) muss die Funktion ein zweites Mal aufgerufen werden, um den erweiterten Tastencode zu ermitteln.

Programmabbruch durch ctrl-C oder ctrl-Break möglich. Zeichen werden angezeigt. bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=01
Return: AL=Zeichen
Fehler: keine

Ganz nach oben / Auswahl

FU02H

Display Character (CP/M)

Schreibt ein Zeichen nach Standard_Output.

Programmabbruch durch ctrl-C oder ctrl-Break möglich

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten.

Aufruf: AH=02
        DL=Zeichen
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU03H

Auxiliary Input (CP/M)

Liest ein Zeichen von Standard_Auxiliary.

Programmabbruch durch ctrl-C oder ctrl-Break möglich, bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=03
Return: AL=Zeichen
Fehler: keine

Ganz nach oben / Auswahl

FU04H

Auxiliary Output (CP/M)

Schreibt ein Zeichen nach Standard_Auxiliary.

Programmabbruch durch ctrl-C oder ctrl-Break möglich.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten.

Aufruf: AH=04
        DL=Zeichen
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU05H

Print Character (CP/M)

Schreibt ein Zeichen nach Standard_List_Device

Programmabbruch durch ctrl-C oder ctrl-Break möglich.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten.

Aufruf: AH=05
        DL=Zeichen
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU06H

Direct Console I/O (CP/M)

1. Liest ein Zeichen von Standard-Input (kein Echo, kein Warten auf Eingabe). Falls bei der Eingabe eine Funktionstaste betätigt wurde (AL=0) muss die Funktion ein zweites Mal aufgerufen werden, um den erweiterten Tastencode zu ermitteln.

2. Schreibt ein Zeichen nach Standard_Output.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktionen 3FH und 40H angeraten.

Aufruf: AH=06
        DL=0FF als Flag für Input, 00..0FE= auszugebendes Zeichen
Return: bei Zeroflag=0: AL=Zeichen
        bei Zeroflag=1: kein Zeichen
Fehler: keine

Ganz nach oben / Auswahl

FU07H

Direct Console Input

Liest ein Zeichen von Standard-Input (kein Echo) Falls bei der Eingabe eine Funktionstaste betätigt wurde (AL=0) muss die Funktion erneut aufgerufen werden, um den erweiterten Tastencode zu ermitteln.

Bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=07
Return: AL=Zeichen
Fehler: keine

Ganz nach oben / Auswahl

FU08H

Read Keyboard

Liest ein Zeichen von Standard-Input (kein Echo). Falls bei der Eingabe eine Funktionstaste betätigt wurde (AL=0) muss die Funktion ein zweites Mal aufgerufen werden, um den erweiterten Tastencode zu ermitteln.

Programmabbruch durch ctrl-C oder ctrl-Break möglich. Bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=08
Return: AL=Zeichen
Fehler: keine

Ganz nach oben / Auswahl

FU09H

Display String (CP/M)

Schreibt eine Zeichenkette, die mit $ beendet sein muss, nach Standard_Ausgabe. Beispiel siehe FU0AH.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten.

Aufruf: AH=09
  DS:DX=Beginn Zeichenkette
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU0AH

Buffered Keyboard Input (CP/M)

Liest eine Zeichenkette von Standard_Input in einen Puffer. Bei Eingabe von Tastatur ist Edieren möglich. Programmabbruch durch ctrl-C oder ctrl-Break möglich. Zeichen werden angezeigt. Bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=0A
   DS:DX=Anfangsadresse Puffer
   MAX=Pufferlänge: inkl. des CRs von der Eingabe!

Struktur des Puffers:
MAX db BufLen
IST db ?
BUF db BuFLen dup (?)

Return: IST=Anzahl gelesener Zeichen
        BUF=gelesene Zeichen ohne das CR der Eingabe.
        Das CR ist jedoch im Puffer mit enthalten.
        Wird nur CR betätigt, ist BUF=0, im
        folgenden Byte des Puffers steht CR.
Fehler: keine

Beispiel zu FU09H und FU10H:
CODE    SEGMENT
        ASSUME CS:CODE,DS:CODE
        ORG 100h
START:  JMP MARKE
TEXT1   DB  'WIE HEISST DU ?',13,10,'$'
TEXT2   DB  'GUTEN TAG, ','$'
EINGABE DB  10            ;Pufferlänge inkl.CR
        DB  0             ;Anzahl eingegebener Zeichen
        DB  10 DUP (24h)  ;maximal sind 9 Zeichen + CR eingebbar
        DB  '$'           ;für Ausgabe mit INT21 Funktion 9
MARKE:
        MOV DX,OFFSET TEXT1  ;Lade Adresse von TEXT1
        MOV AH,09            ;Lade Funktionsnummer
        INT 21h              ;Ausgabe von TEXT1
        MOV DX,OFFSET EINGABE  ;Lade Adresse d. Eingabepuffers
        MOV AH,0Ah             ;Lade Funktionsnummer
        INT 21h                ;Eingabe eines Textes
        MOV DX,OFFSET TEXT2    ;Lade Adresse von TEXT2
        MOV AH,09              ;Lade Funktionsnummer
        INT 21h                ;Ausgabe von TEXT2
        MOV DX,OFFSET EINGABE+2 ;Lade Adresse d. Eingabepuffers
        MOV AH,09               ;Lade Funktionsnummer
        INT 21h                 ;Ausgabe des Namens
        MOV AH,02               ;Ausgabe eines Linefeeds
        MOV DL,0Ah              ;ASCII-Code 0A hex
        INT 21h
        MOV AH,4Ch              ;Beende das Programm
        INT 21h
CODE    ENDS
        END START

Ganz nach oben / Auswahl

FU0BH

Check Keyboard Status (CP/M)

Testet, ob ein Zeichen zum Einlesen von Standard_Input ansteht. Programmabbruch durch CTRL_C oder CTRL_Break möglich,

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 4406H angeraten.

Aufruf: AH=0B
Return: AL=00: kein Zeichen da
  AL=FF: Zeichen vorhanden
Fehler: keine

Ganz nach oben / Auswahl

FU0CH

Flush Keyboard, read Keyboard

Löscht den Puffer von Standard_Input und ruft dann die Eingabefunktion von AL auf. AL=0 löscht nur den Tastaturpuffer.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=0C
  AL=0, 1, 6, 7, 8 oder 0A. Es handelt sich um zugelassene
     Tastaturfunktionen, die das Gleiche leisten wie
     INT 21h-Funktionen mit der gleichen Nummer.

bei AL=0A DS:DX=Puffer, vergl. FU0AH
! andere Werte führen sofort zum Ende der Funktion.

Return: Ergebnis der entsprechenden Funktion.
Fehler: keine

Ganz nach oben / Auswahl

FU0DH

Reset Disk (CP/M)

Schreibt alle Puffer auf Disk

Diese Funktion ist seit DOS 2.x undokumentiert und sollte somit nicht mehr verwendet werden. Angeblich kann ihre Verwendung unter späteren DOS-Versionen Schaden anrichten.

Aufruf: AH=0D
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU0EH

Select Disk (CP/M)

Setzt angegebenes Laufwerk als aktuelles (=default) Laufwerk

Aufruf: AH=0E
  DL=Laufwerk (A=0, 1=B, max 19H=Z)
Return: AL=Anzahl logischer Laufwerke, Wert von LASTDRIVE
Fehler: keine

Ganz nach oben / Auswahl

FU0FH

Open File (CP/M)

Öffnet eine Datei zur Bearbeitung mit FCB.

! überholte Funktion, neue Funktion:FU3DH.

!CURREC und RECLEN werden nicht initialisiert. RECLEN wird auf 128 gesetzt.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3DH angeraten.

Aufruf: AH=0F
        DS:DX=ungeöffneter FCB
Return: AL=0
  CURBLK=0,RECLEN=80H,FSIZE,FDATE,FTIME aus Directory
Fehler: AL=FF

Ganz nach oben / Auswahl

FU10H

Close File (CP/M)

Schließt eine Datei nach Bearbeitung mit FCB.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3EH angeraten.

Aufruf: AH=10
  DS:DX=geöffneter FCB
Return: AL=0
  Datei geschlossen,FCB aktualisiert
Fehler: AL=FF=Eintrag nicht gefunden

Ganz nach oben / Auswahl

FU11H

Search For First Entry (CP/M)

Sucht Directory-Eintrag auf angegebenem Laufwerk. Bei Verwendung des erweiterten FCBs kann man nach Dateien mit bestimmten Attribut suchen.

! DTA vorher auf Zielpuffer setzen (Funktion 1A); die Funktion legt das Suchergebnis dort als ungeöffneten FCB gleichen Typs ab.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 4EH oder 714EH angeraten.

Aufruf: AH=11
        DS:DX=ungeöffneter FCB
        ? in Dateinamen und Erweiterung erlaubt
Return: AL=0
        Rückgabe an momentaner DTA:
        wenn normaler FCB:
             DTA+0: Laufwerk (1=A)
             DTA+1:Dir-Eintrag 32 Bytes

             wenn erweiterter FCB:
             DTA+0: FF
             DTA+1: 5 Bytes 0
             DTA+7: Suchattribut
             DTA+8: Laufwerk (1=A)
             DTA+9: Dir-Eintrag 32 Bytes
Fehler: AL=FF=Eintrag nicht gefunden

Ganz nach oben / Auswahl

FU12H

Search For Next Entry (CP/M)

Sucht Directory-Eintrag nach Funktion 11 und legt ihn in der gleichen Art im momentanen DTA ab.

! Der Such-FCB darf zwischen beiden Funktionsaufrufen nicht verändert werden. Vergl FU11H für Details.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 4FH oder 714FH angeraten.

Ganz nach oben / Auswahl

FU13H

Delete File (CP/M)

! überholte Funktion, neu FU41H.

Löscht alle gesuchten Dateien, die auf die Namensvorgabe passen.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 41H oder 7141H angeraten.

Aufruf: AH=13
        DS:DX=ungeöffneter FCB
        ? in Dateinamen und Erweiterung erlaubt
Return: AL=0: eine oder mehrere Dateien gelöscht
Fehler: AL=FF: keine übereinstimmende Datei gefunden

Ganz nach oben / Auswahl

FU14H

Sequential Read (CP/M)

Liest den aktuellen Satz gemäß CURBLK und CURREC aus der angegebene Datei und legt ihn an der DTA ab. Positioniert danach CURBLK und CURREC auf den nächsten Satz. Ein unvollständiger Satz (EOF) wird mit 00h auf die volle Länge aufgefüllt.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=14
        DS:DX=geöffneter FCB
        evtl zusätzlich im FCB:
        -CURBLK nach OPEN auf 0
        -RECLEN nach OPEN auf 80h
        -CURREC nach OPEN undefiniert
Return: AL=0: Satz nach DTA gelesen
Fehler: AL= 1 Ende der Datei
  AL= 2 DTA zu klein
  AL= 3 Teil des Datensatzes gelesen

Ganz nach oben / Auswahl

FU15H

Sequential Write (CP/M)

Schreibt den aktuellen Satz gemäß CURBLK und CURREC von der DTA in die angegebene Datei (gepuffert). Positioniert danach CURBLK und CURREC auf den nächsten Satz.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten.

Aufruf: AH=15
  DS:DX=geöffneter FCB
  evtl zusätzlich im FCB:
  -CURBLK nach OPEN auf 0
  -RECLEN nach OPEN auf 80h
  -CURREC nach OPEN undefiniert
Return: AL=0: Satz von DTA geschrieben
Fehler: AL= 1 Diskette voll
  AL= 2 DTA zu klein

Ganz nach oben / Auswahl

FU16H

Create File (CP/M)

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktionen 3CH, 5AH, 5BH, oder 7116H angeraten.

Erzeugt eine leere Datei. Attributvergabe mit erweitertem FCB möglich.

Aufruf: AH=16
  DS:DX=ungeöffneter FCB
Return: AL=0: Datei mit Länge 0 erzeugt
Fehler: AL=FF: keine leeren Einträge verfügbar

Ganz nach oben / Auswahl

FU17H

Rename File (CP/M)

! überholte Funktion, neu FU56H.

Gibt Datei den neuen Namen, falls dieser noch frei ist. Hidden-,System-, SubDir- und Volume-Einträge können nur mit erweitertem FCB umbenannt werden.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 56H oder 7156H angeraten.

Aufruf: AH=17
  DS:DX=spezieller FCB, siehe unter Stichwort=FCB
Return: AL=0: Datei hat einen neuen Namen
Fehler: AL=FF: keine übereinstimmende Datei gefunden

Ganz nach oben / Auswahl

FU19H

Get Current Disk (CP/M)

Liefert die Nummer des aktuellen Laufwerks.

Aufruf: AH=19
Return: AL=Laufwerk (A=0, 1=B, max 19H=Z)
Fehler: keine

Ganz nach oben / Auswahl

FU1AH

Set DTA-Address (CP/M)

Gibt DOS die Adresse bekannt, ab der der Puffer für den Datenaustausch von/zur Disk liegt. Default: PSP:80H

Aufruf: AH=1A
        DS:DX=DTA-Adresse
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU1BH

Get Default Drive Data

Liefert einige Daten über das aktuelle Laufwerk

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 36H angeraten.

Aufruf: AH=1B
Return: AL=Sektoren pro Cluster
        CX=Bytes pro Sektor
        DX=Anzahl Cluster
        DS:BX=Adresse des FAT-ID-Bytes
Fehler: keine

Ganz nach oben / Auswahl

FU1CH

Get Drive Data

Liefert einige Daten über das angegebene Laufwerk.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 36H angeraten.

Aufruf: AH=1C
        DL=Laufwerk (0=aktuell, 1=A, usw.)
Return: falls AL<>FF:
        AL=Sektoren pro Cluster
        CX=Bytes pro Sektor
        DX=Anzahl Cluster
        DS:BX=Adresse des FAT-ID-Bytes
Fehler: AL=FF (weist daruf hin, dass die Laufwerksangabe ungültig ist.

Ganz nach oben / Auswahl

FU1FH

undokumentiert

Ganz nach oben / Auswahl

FU21H

Random Read (CP/M)
Liest wahlfrei einen Satz gemäß RELREC an die DTA. Positioniert nicht auf den nächsten Satz. Ein unvollständiger Satz (EOF) wird mit 00h auf die volle Länge aufgefüllt. Die Datensatznr. wird normalerweise mit FU24H gesetzt.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=21
        DS:DX=geöffneter FCB
        zusätzlich im FCB:
           RELREC: Nr. des Satzes mit RECLEN Bytes (0=erster Satz)
Return: AL=0: RECLEN Bytes nach DTA gelesen CURBLK und CURREC auf
        Wert gemäß RELREC gesetzt.
Fehler: AL= 1 Ende der Datei
        AL= 2 DTA zu klein
        AL= 3 Teil des Datensatzes gelesen

Ganz nach oben / Auswahl

FU22H

Random Write (CP/M)

Schreibt wahlfrei einen Satz gemäß RELREC von der DTA. Positioniert nicht auf den nächsten Satz. Ein unvollständiger Satz (EOF) wird mit 00h auf die volle Länge aufgefüllt. Die Datensatznr. wird normalerweise mit FU24H gesetzt.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten.

Aufruf: AH=22
        DS:DX=geöffneter FCB
        zusätzlich im FCB:
        RELREC: Nr. des Satzes mit RECLEN Bytes (0=erster Satz)
Return: AL=0: RECLEN Bytes von DTA geschrieben
        CURBLK und CUUREC auf Wert gemäß RELREC gesetzt.
Fehler: AL= 1 Diskette voll
        AL= 2 DTA zu klein

Ganz nach oben / Auswahl

FU23H

Get File Size (CP/M)

! überholt, statt dessen: FU42H.

Liefert die Anzahl der Sätze mit der Länge RECLEN in der angegebenen Datei.

! rundet auf den nächsten Integer-Wert auf, wenn ein unvollständiger Datensatz gefunden wird.

Trick: Um die Dateigröße in Bytes zu bestimmen, beim ungeöffneten FCB das Feld RECLEN auf 1 setzen.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 42H angeraten.

Aufruf: AH=23
        DS:DX=ungeöffneter FCB, zusätzlich RECLEN einfüllen
Return: falls AL=0:  Ergebnis in RELREC (4 bytes)
Fehler: AL=FF: Datei nicht gefunden

Ganz nach oben / Auswahl

FU24H

Set relative Record (CP/M)

Legt Datensatznummer der Datei gem. FCB fest. Die Felder CURBLK, CURREC und RECLEN im FCB müssen vor Aufruf der Funktion entsprechend gefüllt werden.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 42H angeraten.

Aufruf: AH=24
        DS:DX=geöffneter FCB
        zusätzlich im FCB:
        CURBLK, CURREC und RECLEN
Return: AL=0,
RELREC auf Position gem. CURBLK und CURREC gesetzt.
Fehler: keine (hier gibt es Widerspüche in den unterschiedlichen
        Beschreibungen)

Ganz nach oben / Auswahl

FU25H

Set Interrupt Vector

Setzt Interrupt Vektor auf einen neuen Wert.

Aufruf: AH=25
        AL=Interruptnummer
        DS:DX=neue Ausführungsadresse
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU26H

Create New PSP

Kopiert den aktuellen PSP in den angegebenen Speicherbereich und bereitet ihn für den weiteren Gebrauch durch ein Programm vor.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 4BH angeraten.

Aufruf: AH=26
        DX=Segment für neuen PSP
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU27H

Random Block Read (CP/M)

Liest wahlfrei mehrere Sätze aus der angegebenen Datei ab RELREC an die DTA.

Unvollständiger Satz (EOF) wird mit NUL aufgefüllt. Nach dem Lesen wird auf das erste Byte hinter dem zuletzt gelesenen Satz positioniert.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten.

Aufruf: AH=27
        DS:DX=geöffneter FCB
        cx=Anzahl zu lesende Sätze
        zusätzlich im FCB:
        RELREC: Nr. des 1.zu lesenden Satzes
           mit RECLEN Bytes (0=erster Satz)
Return: AL=0: RECLEN * CX Bytes nach DTA gelesen
        CURBLK, CURREC und RELREC auf nächsten zu lesenden Satz gesetzt.
Fehler: AL= 1 Ende der Datei
  AL= 2 DTA zu klein
  AL= 3 Teil des Datensatzes gelesen

Ganz nach oben / Auswahl

FU28H

Random Block Write (CP/M)

Schreibt wahlfrei mehrere Sätze in die angegebenen Datei ab RELREC aus der DTA.

Bei=CX=0 wird nichts geschrieben, sondern es wird die Dateigröße auf den Wert RELREC*RECLEN gekürzt. Nach dem Schreiben wird auf das erste Byte hinter dem zuletzt geschriebenen Satz positioniert.

Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten.

Aufruf: AH=28
        DS:DX=geöffneter FCB
        CX=Anzahl zu schreibender Sätze
        zusätzlich im FCB:
        RELREC: Nr. des 1.zu schreibenden Satzes mit RECLEN
Return: AL=0: RECLEN * CX Bytes von DTA in Datei geschrieben
        CURBLK, CURREC und RELREC auf nächsten
           zu schreibenden Satz gesetzt.
Fehler: AL= 1 Diskette voll
  AL= 2 DTA zu klein

Ganz nach oben / Auswahl

FU29H

Parse File Name

Durchsucht einen String nach einer gültigen Dateispezifikation bestehen aus Laufwerk:Name.Erweiterung und übernimmt diese in den ungeöffneten FCB an der DTA.

Aufruf: AH=29
        AL=Parsing Flags
        DS:SI=String
        ES:DI=ungeöffneter FCB
Return:
        AL= 0 - FCB erzeugt, kein ? im String gefunden
            1 - FCB erzeugt, ? im String gefunden
           FF - falsches Laufwerk im String
   ES:DI+1= Beginn Dateiname (Space, wenn fehlerhaft)
Fehler: keine (es sei denn, man interpretiert AL=FFh als Fehler)

Ganz nach oben / Auswahl

FU2AH

Get Date

Liefert Systemdatum

Aufruf: AH=2A
Return: CX=Jahr (1980 bis 2099)
        DH=Monat (1 bis 12)
        DL=Tag (1 bis 31)
        AL=Wochentag (0=Sonntag)
Fehler: keine

Ganz nach oben / Auswahl

FU2BH

Set Date

Setzt Systemdatum

Aufruf: AH=2B
        CX=Jahr (1980 bis 2099)
        DH=Monat (1 bis 12)
        DL=Tag (1 bis 31)
Return: AL=0 -Datum gültig und gesetzt
Fehler: AL=FF

Ganz nach oben / Auswahl

FU2CH

Get Time

Liefert die aktuelle Uhrzeit

Aufruf: AH=2C
Return: CH=Stunden (0 bis 23)
        CL=Minuten (0 bis 59)
        DH=Sekunden (0 bis 59)
        DL=hundertstel Sekunden (0 bis 99)
Fehler: keine

Ganz nach oben / Auswahl

FU2DH

Set Time

Setzt die aktuelle Systemzeit

Aufruf: AH=2D
        CH=Stunden (0 bis 23)
        CL=Minuten (0 bis 59)
        DH=Sekunden (0 bis 59)
        DL=hundertstel Sekunden (0 bis 99)
Return: AL=0 Zeit gültig und gesetzt
Fehler: AL=FF

Ganz nach oben / Auswahl

FU2EH

Set / Reset Verify Flag

Schaltet Verify ON / OFF. Wird jedoch bei Schreibzugriffen auf Netzwerke nicht unterstützt.

Aufruf: AH=2E
        AL=00 - Verify OFF, 01 - Verify ON
Return: nichts
Fehler: keine

Ganz nach oben / Auswahl

FU2FH

Get DTA-Address (CP/M)

Liefert die momentane Disk Transfer Adresse

Aufruf: AH=2F
Return: ES:BX=DTA-Adresse
Fehler: keine

Ganz nach oben / Auswahl

FU30H

Get MS-DOS Version Number / Ermittelt die MS-DOS-Versionsnummer
Aufruf: AH=30
        AL=00 für Rückgabe der OEM-Seriennummer in BH
        AL=01 für Rückgabe des „Versionsflags” in BH
Return: AH=Revisionsnummer (Unterversion)
        AL=Versionsnummer
        BH=OEM-Seriennummer oder „Versionsflag”
        BL:CX=24 Bit lange User-Seriennummer bei DOS-Versionen kleiner als 5
            oder wenn Aufruf mit AL=00
        Fehler: keine
In Programmen, die die Versionsnummer abfragen, steht häufig dieser HEX-Code:
b4 30 cd 21
Hinweise:
  • Dies ist nicht immer die Versionsbezeichnung, die man mit dem MS-DOS-Kommando VER erhält.
  • MS-DOS 3.31 liefert 3.31 als MS-DOS-Versionsnummer.
  • DOS 4.01 und 4.02 liefern 4.00 als MS-DOS-Versionsnummer.
  • MS-DOS 6.20 und MS-DOS 6.21 liefern 6.20 zurück; Version 6.22 liefert als MS-DOS-Versionsnummer 6.22 zurück.
  • Windows95 liefert Version 7.00 als MS-DOS-Versionsnummer.
  • XP und VISTA liefern 5.00 als MS-DOS-Versionsnummer.
Diese Funktion wurde von Microsoft mehrfach abgeändert.

Bei DOS 2.x und DOS 3.x liefert die Funktion in BH für MS-DOS 0FFh und für PC-DOS 00h zurück. Die 24 Bits der Register BL, CH und CL werden normalerweise lediglich mit 00h gefüllt.

Ab DOS 4.x änderte Microsoft die Versionsabfrage. DOS 4.x enthält eine interne Tabelle mit Namen von Microsoft-Programmen, an die 3.40 als Version zurückgemeldet wird.

Ab DOS 5.0 lässt sich mittels des Kommandos SETVER für Programme individuell festlegen, welche Versionsnummer einem Programm zurückgemeldet werden soll. Die Originalversionsnummer lässt sich ab DOS 5.0 über eine Erweiterung der Funktion 33h ermitteln.

Beim Aufruf kann in AL ein Steuercode mitgegeben werden. Bei AL ungleich 1 wird die OEM-Seriennummer in BH zurückgegeben. Bei AL=1 erfolgt eine Abfrage des „Versionsflags”. Diese wird in BH signalsiert. Nur wenn hier Bit 3 gesetzt ist, liegt DOS im ROM (Read only Memory).

Ab DOS 5.00 lässt sich die „wirkliche” Versionsnummer mit einer Untervariante der Funktion 33h abfragen:

Aufruf: AH=33
        AL=06 Untervariante „Get Version”
Return: AL=FF Fehler, diese Funktion wird nicht unterstützt
        AL=06 diese Funktion wird unterstützt. Dann gilt:
            BL= DOS-Version
            BH= Revision
            DX=Bitflag
                 Bits 0,1,2 Revisionsnummer im Bereich 0 bis 7
                 Bit 11  1=ROM-Version von DOS
                 Bit 12  1=DOS ist im HMA-Bereich geladens:
Nachfolgend ist ein Testlauf der Versionsabfragen unter VISTA dargestellt: Bei beiden Varianten der Versionsabfrage werden unterschiedliche Releasenummern zurückgemeldet.
Abfrage mit Funktion 30h und 00 in AL
di=  si=  bp=  sp=  dx=  cx=  bx=  ax=  cs=  ds=  es=  ss=
FFFE 0100 091E FFDE 3125 0000 FF00 0005 12E4 12E4 12E4 12E4
DOS Version 5.00

Abfrage mit Funktion 30h und 01 in AL
di=  si=  bp=  sp=  dx=  cx=  bx=  ax=  cs=  ds=  es=  ss=
FFFE 0100 091E FFDE 3125 0000 0000 0005 12E4 12E4 12E4 12E4

Abfrage mit Funktion 33h und 06 in AL
di=  si=  bp=  sp=  dx=  cx=  bx=  ax=  cs=  ds=  es=  ss=
FFFE 0100 091E FFDE 1000 0000 3205 3306 12E4 12E4 12E4 12E4
DOS Version 5.50

Ganz nach oben / Auswahl

FU31H

Keep Process

Beendet ein Programm und hält DX Paragraphen seines Speicherbereiches resident. ! Offene Dateien bleiben geöffnet. Setzt den Return-Code fest, der beim Aufruf in AL angegeben wird. Nach Konvention bedeutet 00=kein Fehler.

Aufruf: AH=31
  AL=Return-Code
        DX=residenter Speicher ab Blockbeginn in Paragraphen
        CS=Segment PSP
Return: Die Funktion gibt keine Argumente zurück.

Ganz nach oben / Auswahl

FU32H

undokumentiert

Ganz nach oben / Auswahl

FU33H

Control C-Check

Dient dem Setzen bzw.Lesen des Control-C Status (=Break on/off)

Aufruf: AH=33
        AL=0 - Get
        AL=1 - Set, dann DL=0 - off, DL=1 -on
Return: wenn AL nicht auf FF: DL=Status
Fehler: AL=FF

Die Funktion 33h wurde um die Aufrufmöglichkeiten mit 02, 05 und 06 in AL erweitert. Auf dieser Seite wird nur auf den Aufruf mit AL=6 eingegangen.

Ganz nach oben / Auswahl

FU34H

undokumentiert

Ganz nach oben / Auswahl

FU35H

Get Interrupt Vector

Liest einen Interrupt- Vektor

Aufruf: AH=35
        AL=Interrupt-Nummer
Return: ES:BX=Interrupt-Vektor
Fehler: keine

Ganz nach oben / Auswahl

FU36H

Get Disk Free Space

Liefert die freie und gesamte Kapazität des angegebenen Laufwerkes.

Freie Kapazität: AX*BX*CX Bytes
Gesamtkapazität: AX*DX*CX Bytes
Aufruf: AH=36
        DL=Laufwerk (0=aktuell, 1=A, usw.)
Return: falls AX ungleich FFFF:
        AX=Sektoren pro Cluster
        BX=freie Cluster
        CX=Bytes pro Sektor
        DX=Cluster pro Laufwerk
Fehler: AX=FFFF

Ganz nach oben / Auswahl

FU37H

undokumentiert

Ganz nach oben / Auswahl

FU38H

Get/ Set Country Data

Abfrage / Setzen der landesspezifischen Darstellung von Datum, Zeit, Zahlenkolonnen, usw.

Aufruf: AH=38
        AL=Country-Code
   oder wenn AL=FF:
        BX=Country-Code
        DX=FFFF - Set, sonst Get
        DS:DX=Zielpuffer (34 Bytes)
Return: wenn CF=0 und bei Get: Puffer gefüllt
Fehler: AX=2

Ganz nach oben / Auswahl

FU39H

Create Directory

Richtet ein neues Unterverzeichnis ein.

Aufruf: AH=39
        DS:DX=Beginn Pfad
Return: falls CF=0: fehlerfrei
Fehler: AX=3, 5

Ganz nach oben / Auswahl

FU3AH

Remove Directory

Entfernt ein leeres Unterverzeichnis.

Aufruf: AH=3A
        DS:DX=Beginn Pfad
Return: falls CF=0: fehlerfrei
Fehler: AX=3

Ganz nach oben / Auswahl

FU3BH

Change Current Directory

Wechselt in das angegebene Directory. Dieses muss sich auf dem aktuellen Laufwerk befinden. Der in ASCIIZ definierte Pfadname darf maximal 64 Bytes lang sein. Es sind relative und absolute Pfadangaben wie „..” und „\” zulässig.

Aufruf: AH=3B
        DS:DX=Beginn Pfad
Return: falls CF=0: fehlerfrei
Fehler: AX=3, 5, 16

Ganz nach oben / Auswahl

FU3CH

Create Handle

Erzeugt eine leere Datei gemäß Pfad und öffnet sie zum Lesen und Schreiben. ! Eine bereits vorhanden Datei gleichen Namens wird gelöscht. Vergleiche FU5BH

Aufruf: AH=3C
        CX=Attribut [08 (Volume) und 10h(SubDir) nicht möglich]
        DS:DX=Beginn Pfad
Return: falls CF=0: AX=Handle
Fehler: AX=3, 4, 5

Ganz nach oben / Auswahl

FU3DH

Open Handle

Eröffnet eine Datei und positioniert auf Dateianfang.

Zum Positionieren innerhalb der Datei vergl. FU42H.

Aufruf: AH=3D
        AL=Zugriffscode 0=lesen, 1=schreiben, 2=lesen u.schreiben
        DS:DX=Beginn Pfad
Return: falls CF=0: AX=Handle
Fehler: AX=1, 2, 3, 4, 5, C

Ganz nach oben / Auswahl

FU3EH

Close Handle

Schließt eine offene Datei inkl. Schreiben des Puffers und Anpassen der Directory.

Aufruf: AH=3E
        BX=Handle
Return: falls CF=0: O.K.
Fehler: AX=6

Ganz nach oben / Auswahl

FU3FH

Read Handle

Liest von Datei oder Gerät in einen Puffer.

Aufruf: AH=3F
        BX=Handle
        DS:DX=Zielpuffer
        CX=Anzahl zu lesende Bytes
Return: falls CF=0: AX=Anzahl gelesener Bytes (0=EOF)
Fehler: AX= 5, 6

Ganz nach oben / Auswahl

FU40H

Write Handle

Schreibt Puffer in Datei oder auf Gerät.

Aufruf: AH=40
        BX=Handle
        DS:DX=Quellpuffer
        CX=Anzahl zu schreibender Bytes
Return: falls CF=0: AX=Anzahl geschriebener Bytes (0=Disk full)
Fehler: AX= 5, 6

Ganz nach oben / Auswahl

FU41H

Delete Directory Entry

Löscht die angegebene Datei. ! Read-only-Dateien vorher mit FU43H anpassen.

Aufruf: AH=41
        DS:DX=Beginn Pfad (keine Wildcards erlaubt!)
Return: falls CF=0: O.K.
Fehler: AX=2, 6

Ganz nach oben / Auswahl

FU42H

Move File Pointer/ Get File Size

Positioniert in der Datei für nächste Schreib- oder Leseoperation.

Zur Bestimmung der Dateigröße: Aufruf mit CX:DX=0:0, AL=2

Aufruf: AH=42
        AL gibt an, wie die Position zu errechnen ist:
        AL=0 :Dateianfang plus DX:CX
        AL=1  aktuelle Dateiposition plus DX:CX
        AL=2 Dateiende plus plus CX:DX
        BX=Handle
        CX=High Word Position
        DX=Low Word Position
Return: falls CF=0: fehlerfrei
        DX=High Word der neuen Position
        AX=Low Word der neuen Position
Fehler: AX=1, 6

Ganz nach oben / Auswahl

FU43H

Get/ Set File Attributes

Liest oder setzt das Attribut der angegeben Datei. Das Attributbyte ist bei INT 21h (DOS-Interrupt) beschrieben. ! Volume- oder SubDir-Attribut nicht erlaubt.

Aufruf: AH=43
        AL=0 lesen, AL=1 schreiben (dann CX=neues Attribut)
        DS:DX=Beginn Pfad
Return: falls CF=0: CX=Attribut (bei Lesen)
Fehler: AX=1, 2, 3, 5

Ganz nach oben / Auswahl

FU45H

Duplicate File Handle generiert ein zweites Handle für eine bereits geöffnete Datei. Die Funktionen 45H und 46H werden normalerweise verwendet, um die Standardein- oder ausgabe umzuleiten.
Aufruf: AH=45
        BX=Handle
Return: falls CF=0: AX=neuen Handle
Fehler: AX=4, 6
Das Bewegen des Dateizeigers in einem Handle durch Lesen, Schreiben oder Suchen bewirkt eine gemeinsame Änderung in beiden Handles. Das Schließen eines der beiden Handles führt nicht zum Schließen des anderen Handles.

Durch Duplizieren eines Handles und anschließendem Schließen eines der beiden Handles werden die Verzeichniseinträge aktualisiert. Dies Verfahren ist schneller als das Schließen und erneute Eröffenen einer Datei.

Quelle für diesen Hinweis: http://www.ousob.com/ng/masm/ng814db.php gesichtet im Februar 2011

Ganz nach oben / Auswahl

FU46H

Force Duplicate File Handle

Ordnet zwei verschiedenen Handles eine gemeinsame Datei zu. Das in CX angegebene Handle wird zum Duplikat des in BX angegebene Handles. Falls eine mit dem Handle in CX spezifizierte Datei bei Funktionsaufruf eröffnet war, wird sie geschlossen.

Die Funktionen 45H und 46H werden normalerweise verwendet, um die Standardein- oder ausgabe umzuleiten.

Aufruf: AH=46
        BX=1.Handle, CX=2.Handle. Dass 2.Handle soll verändert werden.
Return: falls CF=0:
        Datei gemäß CX geschlossen, Handle CX entspricht
        nun 1:1 dem Handle BX
Fehler: AX=4, 6
Das Bewegen des Dateizeigers in einem Handle durch Lesen, Schreiben oder Suchen bewirkt eine gemeinsame Änderung in beiden Handles. Das Schließen eines der beiden Handles führt nicht zum Schließen des anderen Handles.

Die Funktion 46h kann für Umleitungen genutzt werden. Um beispielsweise die Standardausgabe (diese ist vordfefiniert als Handle 1) auf eine Datei umzuleiten, kann die Funktion mit CX=1 und BX=Handle der gewünschten Ausgabedatei aufgerufen werden.

Quelle für diesen Hinweis: http://www.ousob.com/ng/masm/ng81942.php gesichtet im Februar 2011

Ganz nach oben / Auswahl

FU47H

Get Current Directory

Liefert den aktuellen Pfad des angegebenen Laufwerkes.

Aufruf: AH=47
        DL=Laufwerk (0=aktuell, 1=A,...)
        DS:SI=Zielpuffer (64 Bytes)
Return: falls CF=0: Zielpuffer mit aktuellem Pfad gefüllt.
        (ohne Laufwerk und ohne führendem \).
Fehler: AX=15

Ganz nach oben / Auswahl

FU48H

Allocate Memory - Speicherplatz reservieren

Fordert einen Speicherblock von DOS an. Dieser Speicherblock wird von DOS nicht mehr an ein anderes Programm vergeben, bis er wieder freigegeben wird (FU49H).

Aufruf: AH=48
        BX=Größe des Blocks in Paragraphen (1 Paragraph=16 Bytes)
Return: falls CF=0: AX=Segment 1.Block, BX=größter freier Block in Paragraphen
        falls CF=1 und AX=8: BX=größter freier Block in Paragraphen
Fehler: AX=7, 8
                 AX=7: Die Memory Control Blocks (MCB) sind zerstört
                 AX=8: Der zur Verfügung stehende Speicherplatz ist nicht ausreichend

Ganz nach oben / Auswahl

FU49H

Free Allocated Memory

Gibt einen beispielsweise mit FU48H angeforderten Speicherblock wieder frei. Beim Aufruf genügt ist, die Segmentadresse zu übergeben. Die Funktion findet die Länge des Speicherblockes in der Speicherverwaltung (Memory Control Block (MCB)).

Aufruf: AH=49
        ES=Segment 1.Block, der freigegeben werden soll.
Return: falls CF=0: fehlerfrei
Fehler: AX=7, 9
                 AX=7: Die Memory Control Blocks (MCB) sind zerstört
                 AX=9: Die in ES angegebene Adresse wurde im MCB nicht gefunden. Sie
                 ist demnach verkehrt

Ganz nach oben / Auswahl

FU4AH

Set Block

Ändert Größe eines Speicherblocks.

Aufruf: AH=4A
        BX=neue Größe des Blocks in Paragraphen (1 Paragraph=16 Bytes)
        ES=Segment 1.Block, der verändert werden soll
Return: falls CF=0: neue Blockgröße gesetzt
        falls CF=1 und AX=8: BX=größter freier Block in Paragraphen
Fehler: AX=7, 8, 9
                 AX=7: Die Memory Control Blocks (MCB) sind zerstört
                 AX=8: Der zur Verfügung stehende Speicherplatz ist nicht ausreichend
                 AX=9: Die in ES angegebene Adresse wurde im MCB nicht gefunden. Sie
                       ist demnach verkehrt

Ganz nach oben / Auswahl

FU4BH

Load and Execute Program / Load Overlay

Dient zum Laden und Starten eines Programmes oder zum Nachladen eines Overlays. Das Programm wird als Kindprozess des aufrufenden Programmes (Vaterprozess) ausgeführt. Der Vaterprozess wird solange suspendiert.

Laden und Starten:

! Vor dem Aufruf unbedingt mit FU4AH Speicher zur Verfügung stellen. Alle Register außer CS und IP werden zerstört.

Im Beispielprogramm wird die Funktion 4BH genutzt. Sie dient zum Aufruf des im Umgebungsblock unter COMPSPEC eingetragenen primären Befehlsprozessors und an andere Stelle im Beispielprogramm zum Aufruf des Windows-Explorers.

Aufruf: AX=4B00
       DS:DX=Pfad- und Dateiname des aufzurufenden Programmes (ASCIIZ)
       ES:BX=Parameterblock, Struktur:
          OFS LEN Inhalt
          00  2        Segment Environment
          02  4        Ptr. Kommandozeile
          06  4        Ptr. FCB1 (für 5CH)
          0A  4        Ptr. FCB2 (für 6CH)
Return: bei CF=0: Programm wurde ausgeführt und ist zurückgekehrt.
Fehler: AX=1, 2, 8, 10, 11 (widersprüchliche Angaben an verschiedenen Stellen)

Nachladen Overlay:
AX=4B03
sonst alle Register wie bei Funktion 4B00H, jedoch
anderer Parameterblock:
         OFS LEN Inhalt
         00  2        Segment des Zielspeichers für Overlay
         02  2        Relokationsfaktor (meist gleicher Inhalt wie OFS 0)
Return: bei FC=0:   Overlay geladen
Fehler: AX=1, 2, 8, 10  (widersprüchliche Angaben an verschiedenen Stellen)

Ganz nach oben / Auswahl

FU4CH

End Process (UNIX) =empfohlene Methode

Beendet ein Programm und gibt seinen Speicherbereiches wieder an DOS zurück. Gibt Return-Code zurück.

Aufruf: AH=4C
        AL=Return-Code
Return: Int-Vektoren 22H bis 24H werden aus PSP ab Offset 0AH restauriert.
Alle Dateipuffer werden auf Disk geschrieben. Schließt alle geöffneten
Dateien und frischt das Directory auf.
Fehler: keine

Ganz nach oben / Auswahl

FU4DH

Get Return Code Child Process

Ermittelt den von Funktion 31 oder 4C übergebenen Returncode und den Grund der Programmbeendigung. Der Returncode kann nur 1-mal ermittelt werden

Aufruf: AH=4D
Return: AL=Returncode
        AH=Grund der Programmbeendigung
           0=normales Ende
           1=Abbruch mit ^C
           2=schwerer Fehler
           3=durch Funktion 31
Fehler: keine

Ganz nach oben / Auswahl

FU4EH

Find First File

Sucht erste passende Datei gem. dem angegebenen Pfad. Die Attribute System und Hidden finden immer auch Archiv und Read-Only. Das Attribut Volume findet nur Volume.

Aufruf: AH=4E
        CX=Attribut
        DS:DX=Beginn Suchpfad
Return: Wenn CF=0: Ab DTA gefundenen Eintrag:
                   Offset Länge        Inhalt
                   0      21d          DOS reserviert
                   15h     1           Attribut
                   16h     2           Zeit
                   18h     2           Datum
                   1Ah     4           Länge
                   1Eh    13d          Name
Fehler: AX= 2, 18

Ganz nach oben / Auswahl

FU4FH

Find Next File

Sucht nach Funktion 4E die nächste passende Datei.

Aufruf: AH=4F
        DTA von Funktion 4E vorbelegt.
Return: Wenn CF=0: siehe bei Funktion 4E
Fehler: AX= 18

Ganz nach oben / Auswahl

FU50H

undokumentiert

FU51H

undokumentiert

FU52H

undokumentiert

FU53H

undokumentiert

Ganz nach oben / Auswahl

FU54H

Get Verify State

Liefert den momentanen Wert des Verify-Flags

Aufruf: AH=54
Return: AL=00 -> OFF, 01 -> ON
Fehler: keine

Ganz nach oben / Auswahl

FU55H

undokumentiert

Ganz nach oben / Auswahl

FU56H

Datei umbenennen

Entspricht einem Rename mit Einbeziehung des Pfades. ! Wildcards im Pfadnamen verboten. Beide Pfade müssen auf dem gleichen Laufwerk liegen.

Wenn die Pfadnamen sich unterscheiden, aber die Dateinamen und -typen gleich sind, werden die Dateien ins neue Verzeichnis kopiert und im alten gelöscht.

Aufruf: AH=56
        DS:DX=Beginn alter Pfad
        ES:DI=Beginn neuer Pfad
Return: CF=0  wenn fehlerfrei
Fehler: AX= 2, 5, 17

Ganz nach oben / Auswahl

FU57H

Get/ Set Date/ Time of File

Liest bzw. setzt das Datum und die Zeit einer Datei. Beide Parameter werden gepackt übergeben. ! bei Set erfolgt keine Gültigkeitsprüfung.

Aufruf: AH=57
        AL=0 ->get     AL=1 ->set
        BX=Handle
        wenn set:
             CX=Zeit   hhhh hmmm mmms ssss
             DX=Datum  jjjj jjjm mmmt tttt
Return: bei CF=0:
            get: CX=Zeit, DX=Datum
            set: Datum und Zeit gesetzt
Fehler: AX= 2, 5, 17

Ganz nach oben / Auswahl

FU58H

Get/ Set allocation Strategy

Liefert oder setzt die Strategie, mit der MS-DOS Speicher für Programme vergeben soll.

Strategie 0 (=first fit): MS-DOS beginnt die Suche bei dem am weitesten unten liegenden Speicherblock, also bei möglichst kleinen Adressen. Der erste gefundene Block, der mindestens genauso groß ist wie der angeforderte Speicherblock, wird belegt.

Strategie 1 (=best fit): MS-DOS durchsucht alle Speicherblöcke nach dem Block, der die Anforderungen am wenigsten übersteigt. Somit wird der "wirtschaftlichste Block" belegt.

Strategie 2 (=last fit): MS-DOS beginnt die Suche bei dem am weitesten oben liegenden Speicheblock, also bei möglichst großen. Der erste gefundene Block, der mindestens genauso groß ist wie der angeforderte Speicherblock, wird belegt.

MS-DOS verwendet standardmäßig die Methode "first fit", da sie die schnellstmögliche Vergabe gewährleistet.

Beispielprogramm:
        page        65,120
        .sall
comment #
Setzt die Speicherbelegungsstrategie auf 1 (best fit)
Matthaei, 9-FEB-91
#
        .xlist
        include firm.asm
        .list
        mov       b attr,16*n_blue+n_yell
        cld
        mov       ax,5800h        ;lese Speicherbelegungsstrategie
        int       dos
        add       al,48           ;justiere nach ASCII
        mov       strat,al
        call      prmsg
        db        'Zur Zeit wird die Speicherbelegungsstrategie '
strat   db        0
        db        ' benutzt.'
        db        cr,0
        mov       ax,5801h        ;setze Speicherbelegungsstrategie 1
        mov       bx,1
        int       dos
        PRSTR     'Sie wurde auf 1 (best fit) geändert.'
        jmp       ret0

code    ends
        end        start

Ganz nach oben / Auswahl

FU59H

Get Extended Error Information

Liefert eine erweiterte Fehlerbeschreibung nach dem Auftreten eines Fehlers bei einer Funktion INT21. Die Funktion wird an einem Quick-BASIC-Testprogramm gezeigt.

Aufruf: AH=59
        BX=0
Return: AX=erweiterter Fehler
        BH=Fehlerklasse
        BL=empfohlene Aktion
        CH=Fehlerquelle
Fehler: keine

Quick-BASIC Textprogramm:
'Programmverwendung.:
'Testprogramm zum INT21, Funktion 59, erweiterten Fehlercode holen
'QB aufrufen mit OPTION /L wegen QuickLIB-Unterstützung
'Beim Linken mit LINK: QB (per Default wird daraus QB.LIB) als
'Bibliothek angeben

TYPE regtyp
  ax AS INTEGER
  bx AS INTEGER
  cx AS INTEGER
  dx AS INTEGER
  bp AS INTEGER
  si AS INTEGER
  di AS INTEGER
  flags AS INTEGER
  ds AS INTEGER
  es AS INTEGER
END TYPE

DIM inreg AS regtyp, outreg AS regtyp

ON ERROR GOTO FU59
OPEN "ABCDEFGH.IJK" FOR INPUT AS #1  '<- erzeugt einen fehler,
                                     ' da es die datei nicht gibt
stop

fu59:
'parameterbeschreibung für int 21h, erweiterte fehlercodes holen
'aufruf:
'ah=59h
'bx = 0
'rückgabe:
'ax=fehlerbeschreibung
'bh=fehlerursache
'bl=empfohlene aktion
'ch=fehlerquelle

inreg.ax = &h5900: inreg.bx = 0       'hole erweiterten fehlercode

call interrupt(&h31, inreg, outreg)

print "Fehlerbeschreibung: ";
select case outreg.ax
case 0: print "kein Fehler"
case 1: print "Unbekannte Funktionsnummer "
case 2: print "Datei nicht gefunden"
case 3: print "Pfad nicht gefunden"
case 4: print "Zuviele Dateien gleichzeitig eröffnet"
case 5: print "Zugriff verweigert"
case 6: print "Ungültiger Handle"
case 7: print "Speicher-Kontrollblock zerstört"
case 8: print "Zu wenig freier Speicher"
case 9: print "Ungültige Speicher-Kontrollblockadresse"
case 10: print "Ungültiges Environment"
case 11: print "Ungültiges Format"
case 12: print "Ungültiger Zugriffscode"
case 13: print "Ungültige Daten"
case 14
print
print "Kann nicht sein- diese Fehlerbeschreibung wird nicht verwendet"
case 15: print "Ungültige Laufwerksangabe"
case 16
print
print "Versuch, das aktuelle Verzeichnis (Directory) zu löschen"
case 17: print "Zugriff auf ein anderes Gerät"
case 18: print "Keine weiteren Dateien"
case 19: print "Diskette ist schreibgeschützt"
case 20: print "Ungültige Gerätebezeichnung"
case 21: print "Laufwerk nicht bereit"
case 22: print "Unbekannter Befehl"
case 23: print "Datenfehler (CRC)"
case 24: print "Ungültige Datenlänge"
case 25: print "Fehler beim Suchen"
case 26: print "Unbekannter Gerätetyp"
case 27: print "Sektor nicht gefunden"
case 28: print "Drucker ohne Papier"
case 29: print "Schreibfehler"
case 30: print "Lesefehler"
case 31: print "Allgemeiner Fehler"
case 32: print "Fehler beim gemeinsamen Zugriff"
case 33: print "Fehler bei Dateisperre"
case 34: print "Unerlaubter Diskettenwechsel"
case 35: print "FCB nicht verfügbar"
case 80: print "Datei existiert bereits"
case 82: print "Verzeichnis kann nicht erstellt werden"
case 83: print "Abbruch nach Aufruf des Interrupts 24h (Set relative Record)"
case else: print "Undefiniert, ="; outreg.ax
end select
print "Ursache___________: ";
select case int(outreg.bx / 256)
case 1
print "Resource erschöpft"
print "(z.B.kein Speicherplatz mehr, keine offenen Kanäle mehr"
case 2: print "Im Augenblick: Zugriff verboten"
case 3: print "Sie haben keine Zugriffsberechtigung"
case 4: print "Interner Fehler in der Systemsoftware"
case 5: print "Hardwarefehler"
case 6: print "Fehler in der Systemsoftware, z.B. fehlende Konfigurationsdatei"
case 7: print "Fehler im Anwendungsprogramm "
case 8: print "Objekt (z.B. Datei) nicht gefunden"
case 9: print "Ungültiges Format oder Typ, z.B. falsches Dateiformat"
case 10: print "Objekt (z.B. Datei) ist gesperrt"
case 11: print "Problem mit Datenträger, z.B. Fehler auf Diskette"
case 12: print "Existiert bereits, z.B. die Netztwerkbezeichnung"
case else: print "Unbekannt"
end select

print "Fehlerquelle:_____: ";
select case (outreg.cx / 256)

case 1: print "unbekannt"
case 2: print "Blocktreiber (z.B. Laufwerk)"
case 3: print "Netzwerk "
case 4: print "Serielles Gerät"
case 5: print "RAM-Speicher"
case else: print "unbekannt"
end select

print "Aktion:"
select case (outreg.bx and 255)

case 1: print "Vorgang wiederholen, dann Anwender zu Rate ziehen"
case 2: print "Vorgang nach einer Pause wiederholen, dann Anwender zu Rate ziehen"
case 3: print "Bitte stellen Sie die erforderlichen Informationen / Daten bereit"
case 4
print "Programm vorzeitig beendet - Dateien geschlossen"
close
system
case 5
print "Programm abgebrochen, Dateien nicht geschlossen"
system
case 6: print "Fehlermeldung ist nur eine Information"
case 7: print "Bitte beheben Sie den Fehler"
case else: print "Keine empfohlene Aktion gefunden"
end select

resume next

Ganz nach oben / Auswahl

FU5AH

Create Temporary File
Erzeugt eine leere Datei ohne Angabe eines Namens (DOS liefert einen Namen) und öffnet sie zum Lesen und Schreiben
! Eine bereits vorhanden Datei gleichen Namens wird gelöscht.
Aufruf: AH=5A
        CX=Attribut [08 (Volume) und 10h(SubDir) nicht möglich]
        DS:DX=Beginn Pfad,
        Aufbau: Pfadname, gefolgt von einem \, gefolgt von
                14 NUL-Bytes.
Return: falls CF=0: AX=Handle
Fehler: AX=3, 5

Ganz nach oben / Auswahl

FU5BH

Erzeugt eine leere Datei gem. Pfad und öffnet sie zum Lesen und Schreiben. Falls die Datei bereits existiert, wird Fehler 80 zurückgemeldet. In diesem Fall wird die existierende Datei nicht geöffnet! Vergl. Funktion 3C

Aufruf: AH=5B
        CX=Attribut [08 (Volume) und 10h(SubDir) nicht möglich]
        DS:DX=Beginn Pfad
Return: falls CF=0: AX=Handle
Fehler: AX=3, 4, 5, 50h

Ganz nach oben / Auswahl

FU5CH

Lock / Unlock

Sperrt / entsperrt Teile einer Datei gegen jeden Zugriff durch andere Programme. SHARE.EXE muss geladen sein, sonst wird immer Fehler 1 generiert. Sperren sollte nur verwendet werden, wenn die Datei in einem Modus eröffnet wurde, der entweder Lesezugriffe oder gar nichts verbietet. Beim Entsperren muss der Datenbereich mit dem gesperrten Datenbereich übereinstimmen.

Aufruf: AH=5C
        AL=0 -> Lock =1 ->Unlock
        BX=Handle
        CX=High Word Position
        DX=Low Word Position
        SI=High Word Länge
        DI=Low Word Länge
Return: falls CF=0: fehlerfrei
Fehler: AX=1, 6, 33

Ganz nach oben / Auswahl

FU62H

Get PSP

Liefert die Segmentadresse des PSP vom gerade aktiven Programm

Aufruf: AH=62
Return: BX=Segmentadresse PSP
Fehler: keine

Ganz nach oben / Auswahl

FU6CH

Extended Open/Create

Ab DOS 4.0 steht diese Funktion zur Verfügung. Sie fasst die Funktionen

  • 3CH Create File with Handle
  • 3DH Open File with Handle
  • 5BH Create New File
  • 68H Commit File
zusammen.

Diese Funktion ist seit Einführung langer Dateinamen veraltet. Nachfolger ist die Funktion 7116H.

Aufruf: AH=6C
        AL=00
        CX=Attribut. Belegung:
           Bit 6-15 reserviert
           5=archive
           4=reserviert
           3=volume label (unklar, ob die Bit gesetzt werden kann)
           2=system
           1=hidden
           0=readonly
        BX=Open-Modus (siehe weiter unten)
        DL=Aktion, falls Datei existiert bzw. nicht existiert. Belegung:
           Bits 7 bis 4, falls Datei nicht exisiert:
               0000=mit Fehlermeldung abbrechen
               0001=Datei kreeiren
           Bits 3 bis 0, falls Datei bereits existiert:
               0000=mit Fehlermeldung abbrechen
               0001=Datei eröffnen
               0010=Datei ersetzen und eröffnen.
        DH=00
        DS:SI=Beginn Pfad (ASCIIZ)
Return: falls CF=0: AX=Handle
                    CX=Statuscode
                         1=Datei wurde erzeugt und geöffnet
                         2=Datei wurde ersetzt und geöffnet.

        falls CF=1: Fehlercode steht in AX, z.B. 3, 4, 5, 50h
Bei Aufruf muss ein 16 Bit langer Open-Modus in BX übergeben werden. Sein Aufbau ist:
Bit1514131211109876543210
Inhalt0CFE0000ISSS0AAA
  • C Commit. 0=kein Commit, 1=Commit (Commit = Update der Verzeichniseinträge sofort nach jedem Schreibzugriff).
  • F Fehlerbehandlung soll erfolgen wenn 0 durch Int 24, wenn 1 nicht durch Int24, sondern der Fehlercode wird in AX zurückgebenen.
  • E FAT32 extended File Size. 0=2 GB, 1=4 GB
  • I Inheritance (Vererbung. Sagt aus, ob ihr Handle an einen Kindprozeß weitergegeben werden darf) 0=Handle weitergeben, 1=Handle nicht weitergeben.
  • SSS Sharing Mode.
    • 0=Compability (? Bedeutung unklar, bei PC-LAN vermutlich anzugeben)
    • 1=verweigere Lesen und Schreiben
    • 2=verweigere Schreiben
    • 3=verweigere lesen
    • 4=keine Zugriffsverweigerung.
  • AAA Access Mode
    • 0=lesen
    • 1=schreiben
    • 2=lesen und schreiben
    • 4=lesen, aber das Zugriffsdatum nicht verändern (ab DOS 7).

Ganz nach oben / Auswahl

Letztes Upload: 14.07.2023 um 06:19:40 • Impressum und Datenschutzerklärung