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 – 01Interrupt-20h–Befehl zum Beenden des Programms nach einem Sprung zur Adresse 0000h
02 – 03Segmentadresse des ersten vom Programm nicht mehr belegten Speichers
05 – 09Code um Interrupt 21h bei einem NEAR CALL zur Adresse 0005h auszuführen
0A – 0DKopie des Interrupt-Vektors 22h, Rückkehradresse nach Beenden des Programms
0E – 11Kopie des Interrupt-Vektors 23h, Interrupt für Strg-C
12 – 15Kopie des Interrupt-Vektors 24h, Interrupt für fatale Fehler
16 - 17Segment des Parent-PSPs: das Programm, das dieses Programm ausgeführt hat
18 - 2BStandardmäßige Job File Table (JFT), enthält je eine Dateitabellen-Nummer (System File Table, SFT) für bis zu 20 Datei-Handles
2C – 2DSegment des Umgebungsvariablen-Blocks (Environment) für dieses Programm
2E - 31Adresse des Stapelspeichers (Stack) beim letzten Ausführen des Interrupts 21h
32 - 33Nummer aller Datei-Handles in der JFT, standardmäßig 20
34 - 37Adresse der aktuellen JFT, standardmäßig Offset 0018h in diesem PSP
50 – 52Code um Interrupt 21h bei einem FAR CALL zur Adresse 0050h auszuführen
5C – 6BFile Control Block (FCB) des ersten Parameters der Kommandozeile
6C – 7BFCB des zweiten Parameters
80Längenangabe der Kommandozeile
81 – FFKommandozeile mit allen Parametern, aber ohne den Kommandonamen selbst
80 - ABBei 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
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.