Home |
8086 Assembler:
|
Zurück zur Assemblerauswahlseite |
Funktionsindex
Programmbeendigung: Funktionen, mit denen ein Programm beendet oder resident installiert werden kann. 00 Terminate Program (CP/M) Zeicheneingabe: Zum Einlesen einzelner Zeichen oder Zeichenketten. 01 Read Keyboard and Echo (CP/M) Zeichenausgabe Zur Ausgabe einzelner Zeichen oder Zeichenketten. 02 Display Character (CP/M) Disk-Transfer-Adresse, nur für CP/M kompatible Diskfunktionen 1A Set DTA-Address (CP/M) Disk-Kontrolle, haben mit Laufwerken, aber nicht mit Dateiverwaltung zu tun. 0D Reset Disk (CP/M) Datei-Operationen 0F Open File (CP/M) Satz-Operationen, beziehen sich auf die Verarbeitung in einer Datei 14 Sequential Read (CP/M) Directory-Operationen 39 Create Directory Systemdatum und -zeit 2A Get Date Dynamische Speicherverwaltung, anfordern und Freigeben von Hauptspeicher 48 Allocate Memory - Speicherplatz reservieren Sonstige Systemfunktionen 25 Set Interrupt Vector Reservierte Funktionen (hier nicht weiter erwähnt) Reserviert sind die Funktionen 18, 1D, 1E, 20, 5D, 60, und 61 Undokumentiert sind die Funktionen
Auswahlliste
FU00HTerminate Program (CP/M)Beendet Programm und gibt seinen Speicherbereich wieder an DOS zurück. ! Geänderte Dateilängen werden nicht im Directory vermerkt.
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
Auswahlliste
FU01HRead 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. Aufruf: AH=01 Return: AL=Zeichen Fehler: keine Auswahlliste
FU02HDisplay Character (CP/M)Schreibt ein Zeichen nach Standard_Output. Programmabbruch durch ctrl-C oder ctrl-Break möglich
Aufruf: AH=02
DL=Zeichen
Return: nichts
Fehler: keine
Auswahlliste
FU03HAuxiliary 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. Aufruf: AH=03 Return: AL=Zeichen Fehler: keine Auswahlliste
FU04HAuxiliary Output (CP/M)Schreibt ein Zeichen nach Standard_Auxiliary. Programmabbruch durch ctrl-C oder ctrl-Break möglich.
Aufruf: AH=04
DL=Zeichen
Return: nichts
Fehler: keine
Auswahlliste
FU05HPrint Character (CP/M)Schreibt ein Zeichen nach Standard_List_Device Programmabbruch durch ctrl-C oder ctrl-Break möglich.
Aufruf: AH=05
DL=Zeichen
Return: nichts
Fehler: keine
Auswahlliste
FU06HDirect 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.
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
Auswahlliste
FU07HDirect Console InputLiest 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. Aufruf: AH=07 Return: AL=Zeichen Fehler: keine Auswahlliste
FU08HRead KeyboardLiest 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. Aufruf: AH=08 Return: AL=Zeichen Fehler: keine Auswahlliste
FU09HDisplay String (CP/M)Schreibt eine Zeichenkette, die mit $ beendet sein muss, nach Standard_Ausgabe. Beispiel siehe FU0AH. Aufruf: AH=09 DS:DX=Beginn Zeichenkette Return: nichts Fehler: keine Auswahlliste
FU0AHBuffered 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.
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
Auswahlliste
FU0BHCheck Keyboard Status (CP/M)Testet, ob ein Zeichen zum Einlesen von Standard_Input ansteht. Programmabbruch durch CTRL_C oder CTRL_Break möglich, Aufruf: AH=0B Return: AL=00: kein Zeichen da AL=FF: Zeichen vorhanden Fehler: keine Auswahlliste
FU0CHFlush Keyboard, read KeyboardLöscht den Puffer von Standard_Input und ruft dann die Eingabefunktion von AL auf. AL=0 löscht nur den Tastaturpuffer.
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
Auswahlliste
FU0DHReset Disk (CP/M)Schreibt alle Puffer auf Disk Aufruf: AH=0D Return: nichts Fehler: keine Auswahlliste
FU0EHSelect 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 Auswahlliste
FU0FHOpen 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.
Aufruf: AH=0F
DS:DX=ungeöffneter FCB
Return: AL=0
CURBLK=0,RECLEN=80H,FSIZE,FDATE,FTIME aus Directory
Fehler: AL=FF
Auswahlliste
FU10HClose File (CP/M)Schließt eine Datei nach Bearbeitung mit FCB. !überholte Funktion, neue Funktion FU3EH. Aufruf: AH=10 DS:DX=geöffneter FCB Return: AL=0 Datei geschlossen,FCB aktualisiert Fehler: AL=FF=Eintrag nicht gefunden Auswahlliste
FU11HSearch For First Entry (CP/M)! überholte Funktion, neu FU4EH. 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.
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
Auswahlliste
FU12HSearch For Next Entry (CP/M)! überholte Funktion, neu FU4FH. 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. FU13HDelete File (CP/M)! überholte Funktion, neu FU41H. Löscht alle gesuchten Dateien, die auf die Namensvorgabe passen.
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
Auswahlliste
FU14HSequential 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. !überholte Funktion, neu: FU3FH.
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
Auswahlliste
FU15HSequential 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. ! überholte Funktion, neu FU40H. 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 Auswahlliste
FU16HCreate File (CP/M)! überholte Funktion, neue Funktionen FU3CH, FU5AH und FU5BH. 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 Auswahlliste
FU17HRename 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. 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 Auswahlliste
FU19HGet 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 Auswahlliste
FU1AHSet 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
Auswahlliste
FU1BHGet Default Drive DataLiefert einige Daten über das aktuelle Laufwerk ! überholt, statt dessen: FU36H.
Aufruf: AH=1B
Return: AL=Sektoren pro Cluster
CX=Bytes pro sektor
DX=Anzahl Cluster
DS:DX Zeiger auf FAT-ID-Byte
Fehler: keine
Auswahlliste
FU1CHGet Drive DataLiefert einige Daten über das angegebene Laufwerk. ! überholt, statt dessen: FU36H.
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:DX Zeiger auf FAT-ID-Byte
Fehler: AL=FF
</xmp>
Auswahlliste
FU1FHundokumentiertFU21HRandom 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. ! überholte Funktion, neu: FU3FH. <pre> 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 Auswahlliste
FU22HRandom 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. ! überholte Funktion, neu: FU40H.
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
Auswahlliste
FU23HGet 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.
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
Auswahlliste
FU24HSet 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. ! überholte Funktion, neu: FU42H.
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)
Auswahlliste
FU25HSet Interrupt VectorSetzt Interrupt Vektor auf einen neuen Wert.
Aufruf: AH=25
AL=Interruptnummer
DS:DX=neue Ausführungsadresse
Return: nichts
Fehler: keine
Auswahlliste
FU26HCreate New PSPKopiert den aktuellen PSP in den angegebenen Speicherbereich und bereitet ihn für den weiteren Gebrauch durch ein Programm vor. ! veraltet! Besser FU48H.
Aufruf: AH=26
DX=Segment für neuen PSP
Return: nichts
Fehler: keine
Auswahlliste
FU27HRandom Block Read (CP/M)Liest wahlfrei mehrere Sätze aus der angegebenen Datei ab RELREC an die DTA. ! überholte Funktion, neu: FU3FH. Unvollständiger Satz (EOF) wird mit NUL aufgefüllt. Nach dem Lesen wird auf das erste Byte hinter dem zuletzt gelesenen Satz positioniert.
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
Auswahlliste
FU28HRandom Block Write (CP/M)Schreibt wahlfrei mehrere Sätze in die angegebenen Datei ab RELREC aus der DTA. ! überholte Funktion, neu: FU40H. 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.
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
Auswahlliste
FU29HParse File NameDurchsucht 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)
Auswahlliste
FU2AHGet DateLiefert 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
Auswahlliste
FU2BHSet DateSetzt 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
Auswahlliste
FU2CHGet TimeLiefert 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
Auswahlliste
FU2DHSet TimeSetzt 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
Auswahlliste
FU2EHSet / Reset Verify FlagSchaltet Verify ON / OFF
Aufruf: AH=2E
AL=00 - Verify OFF, 01 - Verify ON
Return: nichts
Fehler: keine
Auswahlliste
FU2FHGet DTA-Address (CP/M)Liefert die momentane Disk Transfer Adresse Aufruf: AH=2F Return: ES:BX=DTA-Adresse Fehler: keine Auswahlliste
FU30HGet MS-DOS Version NumberErmittelt die MS-DOS-Versionsnummer Aufruf: AH=30 Return: AH=Revisonsnummer (Unterversion) AL=Versionsnummer Fehler: keine In Programmen, die die Versionsnummer abfragen, steht häufig dieser HEX-Code: b4 30 cd 21 Auswahlliste
FU31HKeep ProcessBeendet 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.
Auswahlliste
FU32Hundokumentiert Auswahlliste
FU33HControl C-CheckDient 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
Auswahlliste
FU34Hundokumentiert Auswahlliste
FU35HGet Interrupt VectorLiest einen Interrupt- Vektor
Aufruf: AH=35
AL=Interrupt-Nummer
Return: ES:BX=Interrupt-Vektor
Fehler: keine
Auswahlliste
FU36HGet Disk Free SpaceLiefert 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
Auswahlliste
FU37Hundokumentiert Auswahlliste
FU38HGet/ Set Country DataAbfrage / 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
Auswahlliste
FU39HCreate DirectoryRichtet ein neues Unterverzeichnis ein.
Aufruf: AH=39
DS:DX=Beginn Pfad
Return: falls CF=0: fehlerfrei
Fehler: AX=3, 5
Auswahlliste
FU3AHRemove DirectoryEntfernt ein leeres Unterverzeichnis.
Aufruf: AH=3A
DS:DX=Beginn Pfad
Return: falls CF=0: fehlerfrei
Fehler: AX=3, 5, 16
Auswahlliste
FU3BHChange Current DirectoryWechselt in das angegebene Directory.
Aufruf: AH=3B
DS:DX=Beginn Pfad
Return: falls CF=0: fehlerfrei
Fehler: AX=3
Auswahlliste
FU3CHCreate HandleErzeugt 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
Auswahlliste
FU3DHOpen HandleEröffnet eine Datei und positioniert auf Dateianfang.
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
Auswahlliste
FU3EHClose HandleSchließ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
Auswahlliste
FU3FHRead HandleLiest 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
Auswahlliste
FU40HWrite HandleSchreibt 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
Auswahlliste
FU41HDelete Directory EntryLö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
Auswahlliste
FU42HMove File Pointer/ Get File SizePositioniert in der Datei für nächste Schreib- oder Leseoperation. Zur Bestimmung der Dateigröße: Aufruf mit CX:DX=0:0, AL=2 Eine Positionierung mit CX:DX=0:0, AL=0 ist offenbar nicht möglich, das Kleinste ist CX:DX=0:1, AL=0
Aufruf: AH=42
AL=Position bezogen auf:
0=DX:CX
1=aktuelle Dateiposition plus DX:CX
2=Dateiende plus CX:DX
BX=Handle
CX=High Word Position
DX=Low Word Position
Return: falls CF=0: fehlerfrei
DX=High Word Position
AX=Low Word Position
Fehler: AX=1, 6
Auswahlliste
FU43HGet/ Set File AttributesLiest 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
Auswahlliste
FU45HDuplicate File Handle generiert ein zweites Handle für eine bereits geöffnete Datei.
Aufruf: AH=45
BX=Handle
Return: falls CF=0: AX=neuen Handle
Fehler: AX=4, 6
Auswahlliste
FU46HForce Duplicate File HandleOrdnet zwei verschiedenen Handles eine gemeinsame Datei zu
Aufruf: AH=46
BX=1.Handle, CX=2.Handle
Return: falls CF=0:
Datei gemäß CX geschlossen, Handle CX entspricht
nun 1:1 dem Handle BX
Fehler: AX=4, 6
Auswahlliste
FU47HGet Current DirectoryLiefert 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
Auswahlliste
FU48HAllocate Memory - Speicherplatz reservierenFordert 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
falls CF=1 und AX=8: BX=größter freier Block in Paragraphen
Fehler: AX=7, 8
Auswahlliste
FU49HFree Allocated MemoryGibt einen mit FU48H angeforderten Speicherblock wieder frei.
Aufruf: AH=49
ES=Segment 1.Block, der freigegeben werden soll.
Return: falls CF=0: fehlerfrei
Fehler: AX=7, 9
Auswahlliste
FU4AHSet 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
Auswahlliste
FU4BHLoad and Execute Program / Load OverlayDient zum Laden und Starten eines Programmes oder zum Nachladen eines Overlays. Laden und Starten: ! Vor dem Aufruf unbedingt mit FU4AH Speicher zur Verfügung stellen, alle Register außer CS und IP werden zerstört.
Aufruf: AX=4B00
DS:DX=Pfad vom Programm
ES:DX=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
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
Auswahlliste
FU4CHEnd Process (UNIX) =empfohlene MethodeBeendet 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
Auswahlliste
FU4DHGet Return Code Child ProcessErmittelt 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
Auswahlliste
FU4EHFind First FileSucht 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
Auswahlliste
FU4FHFind Next FileSucht 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
Auswahlliste
FU50HundokumentiertFU51HundokumentiertFU52HundokumentiertFU53Hundokumentiert Auswahlliste
FU54HGet Verify StateLiefert den momentanen Wert des Verify-Flags Aufruf: AH=54 Return: AL=00 -> OFF, 01 -> ON Fehler: keine Auswahlliste
FU55Hundokumentiert Auswahlliste
FU56HDatei umbenennenEntspricht 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
Auswahlliste
FU57HGet/ Set Date/ Time of FileLiest 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
Auswahlliste
FU58HGet/ Set allocation StrategyLiefert 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. MSDOS 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
Auswahlliste
FU59HGet Extended Error InformationLiefert 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
</xmp>
Auswahlliste
FU5AH&Create Temporary FileErzeugt 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
Auswahlliste
FU5BHErzeugt eine leere Datei gem. Pfad und öffnet sie zum Lesen und Schreiben. Falls die Datei bereits existiert, wird Fehler 80 zurückgemeldet. 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, 80
Auswahlliste
FU5CHLock / UnlockSperrt / 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
AuswahllisteFU62HGet PSPLiefert die Segmentadresse des PSP vom gerade aktiven Programm Aufruf: AH=62 Return: BX=Segmentadresse PSP Fehler: keine Auswahlliste |