Program Segment Prefix
Als Programmsegmentpräfix (englisch Program Segment Prefix, PSP) bezeichnet man die ersten 256 Byte eines von MS-DOS geladenen Programmes. Das PSP ist nicht in den ausführbaren Exe- oder COM-Dateien enthalten, sondern wird beim Laden des Programmes vom Betriebssystem erstellt. Die erste Hälfte des PSPs beinhaltet verschiedene Informationen für das Betriebssystem, insbesondere zur Handhabung mehrerer (nacheinander) ausgeführter Programme. In der zweiten Hälfte befindet sich die Kommandozeile (command tail, ohne den eigentlichen Name des Programmes).
Struktur
Offset (hexadezimal) | |
---|---|
00 – 01 | Interrupt-20h–Befehl zum Beenden des Programms nach einem Sprung zur Adresse 0000h |
02 – 03 | Segmentadresse des ersten vom Programm nicht mehr belegten Speichers |
05 – 09 | Code um Interrupt 21h bei einem NEAR CALL zur Adresse 0005h auszuführen |
0A – 0D | Kopie des Interrupt-Vektors 22h, Rückkehradresse nach Beenden des Programms |
0E – 11 | Kopie des Interrupt-Vektors 23h, Interrupt für Strg-C |
12 – 15 | Kopie des Interrupt-Vektors 24h, Interrupt für fatale Fehler |
16 - 17 | Segment des Parent-PSPs: das Programm, das dieses Programm ausgeführt hat |
18 - 2B | Standardmäßige Job File Table (JFT), enthält je eine Dateitabellen-Nummer (System File Table, SFT) für bis zu 20 Datei-Handles |
2C – 2D | Segment des Umgebungsvariablen-Blocks (Environment) für dieses Programm |
2E - 31 | Adresse des Stapelspeichers (Stack) beim letzten Ausführen des Interrupts 21h |
32 - 33 | Nummer aller Datei-Handles in der JFT, standardmäßig 20 |
34 - 37 | Adresse der aktuellen JFT, standardmäßig Offset 0018h in diesem PSP |
50 – 52 | Code um Interrupt 21h bei einem FAR CALL zur Adresse 0050h auszuführen |
5C – 6B | File Control Block (FCB) des ersten Parameters der Kommandozeile |
6C – 7B | FCB des zweiten Parameters |
80 | Längenangabe der Kommandozeile |
81 – FF | Kommandozeile mit allen Parametern, aber ohne den Kommandonamen selbst |
80 - AB | Bei Dateisuchoperationen von der standardmäßigen Disk Transfer Area (DTA) überschrieben |
Weitere Bereiche des PSPs werden von Betriebssystem-Erweiterungen oder manchen TSR-Programmen genutzt.
Beispiel-Programm
Dieses Programm zeigt die Kommandozeile aus seinem PSP an: (COM-Datei, geschrieben in Assemblersprache)
org 100h ; Interrupt 21h, Funktion 09h benötigt ein Dollarzeichen als Endmarkierung mov bl, byte [0080h] xor bh, bh mov byte [0081h+bx], '$' ; Ausgabe der Kommandozeile (bis zum ersten Dollarzeichen) mit Funktion 09h mov ah, 09h mov dx, 0081h int 21h ; Beenden des Programmes mit Funktion 4Ch, Rückgabewert 00h mov ax, 4C00h int 21h