exec00b.png
Edit v1.001 from 2008-01-28 to 2010-10-22 by HSc

Command- und Execude-Format

Aufbau, Funktion, Gemeinsamkeiten und Unterschiede von Command- und Execute-Programmen. Kenntnisse darüber erleichtern das Verständnis des Startes, der Funktion von solchen Programmen und deren Vor- und Nachteile, sowie deren Schwachpunkte.

Informationen zum Programmstart von

Start eines Programms

Tabelle 1: Gegenüberstellung der Merkmale von Command- und Execude-Programmen
Command Program-Files *.COM Merkmal Execute Program-Files *.EXE
Kleiner, maximal gleich 64kByte. Größe Kann größer als der frei RAM-Speicher sein.
1:1-Abbild des Programms. Datei In einen bestimmten Format.
Zeigen auf den Anfang des Segmentes!
CS:0000 = DS:0000 = ES:0000 = SS:0000: Anfang des PSP
CS:IP = 0100H: 1. Byte nach dem PSP ist der Programmanfang mit 1. Code-Befehl
SS:FFFFH = SS:SP: Stack wächst in Richtung auf Daten und Code zurück.
Code-/Daten-/Stacksegment Jedes zeigt auf den Anfang eines anderen Segmentes. Sie können sogar mehrere Segmente umfassen!
Nur NEAR-Befehle, da keine expliziten Segmentadressen möglich sind! Befehle Da hier mehrere Segmente beinhaltet sind und damit immer mit angegeben werden müssen, sind hier FAR-Befehle unabdingbar.
Beliebige durch 16D teilbare Speicheradresse Startadresse im Speicher Beliebige durch 16D teilbare Speicheradresse
64kByte, aber mittels Funktion Speichergröße ändern auf Programmgröße plus 256 Words für den Stack reduzierbar. Speicherbild  
     
Was passiert eigentlich, wenn ein Programm aufgerufen wird.
  1. Die Exec-Funktion reserviert Speicher für das zu ladende Programm, der das aufrufende Programm aufnehmen soll;
  2. Die Exec-Funktion legt an den Anfang des reservierten Speicherbereiches eine Datenstruktur mit den Namen PSP (Program Segment Prefix) an;
  3. Die Exec-Funktion des Betriebssystems lädt das COMMAND- bzw. Execude-Programm hinter den PSP;
  4. Die Segment-Register und der Stack werden initialisiert;
  5. Start des Programms und
  6. Nach Beendigung des Programms, wird soweit der Speicher nicht durch einen speziellen Funktionsaufruf durch das Programm selbst, der Speicher von PSP und Programm wieder freigegeben.
Die Unterschiede des Verhaltens von Command- und Execude-Programmen sind noch einmal in Tabelle 1 aufgeführt.


Aufbau des Program Segment Prefix

Tabelle 2: Tabelle: Aufbau des Program Segment Prefix
Adr. Größe Inhalt
+00H 2 Byte Aufruf des Interrupts 20H, welcher ein Programm beendet, seinen Speicher wieder frei gibt und die Kontrolle an den Kommandoprozessor zurück gibt.
+02H 1 Word Segmentadresse bei der das Programm endet. Falls zwischen dieser Adresse und dem Ende des reservierten Speicherbereiches noch Speicher frei ist, kann durch das Programm dieser genutzt werden.
+04H 1 Byte Reserviert
+05H 5 Byte FAR-CALL zum Interrupt 21H, nicht der Interrupt selbst.
+0AH 1 PTR Sicherheitskopie des Interrupt-Vektors 22H, zur Programm-Beendigung.
+0EH 1 PTR Sicherheitskopie des Interrupt-Vektors 23H, zur Reaktion auf die Betätigung auf <Strg>+<C> und <Strg>+<Pause>.
+12H 1 PTR Sicherheitskopie des Interrupt-Vektors 24H, zur Reaktion auf bestimmt Fehler.
+16H 22 Byte Reserviert
+2CH 1 Word Segment-Adresse des Enviroment-Blocks, wobei die Offset-Adresse des Enviroment-Blocks relativ zur Segmentadresse immer Null ist.
+2EH 46 Byte Reserviert
+5CH 16 Byte FCB #1
+6CH 16 Byte FCB #2
+80H 1 Byte Anzahl der Zeichen in der Kommando-Zeile ohne das abschließenden <CR>. Die einzelnen Zeichenketten sind durch das Null-Zeichen terminiert.
+81H 127 Byte Kommandozeile bzw. Parameterpuffer, wird von DOS auch als Datenübertragungsbereich (DTA=Disk Transfer Area) genutzt.
Das PSP, siehe Tabelle 2, ist immer 256Byte groß und ist ein Überbleibsel aus CP/M und den ersten DOS-Versionen.


Programm-Typen

Command-Programme

Der Dateityp von diesen Programmen ist *.COM! Beim Start werden keine weiteren Einstellungen vom Command-Programm vorgenommen.

Execute-Programme

Der Datei-Typ der Execute-Programme ist *.EXE!
Tabelle 3: Aufbau des EXE-Speicherabbildes
Adr. Größe Inhalt
+00H 1 Word Kennzeichnung eines EXE-Programms mit 5A4DH!
+02H 1 Word Dateilänge MOD 512D ergibt den niederwertigen Teil.
+04H 1 Word Dateilänge DIV 512D ergibt den höherwertigen Teil.
+06H 1 Word Anzahl der anzupassende Segment-Adressen.
+08H 1 Word Größe des Kopfes in Paragraphen.
+0AH 1 Word Minimale Anzahl zusätzlich benötigter Paragraphen.
+0EH 1 Word Maximale Anzahl zusätzlich benötigter Paragraphen. Warum eigentlich nicht die Adresse +0CH???
+10H 1 Word Inhalt des SP-Registers beim Programm-Start.
+12H 1 Word Prüfsumme über den Kopf der EXE-Datei.
+14H 1 Word Inhalt des IP-Registers beim Programm-Start.
+16H 1 Word Anfang des Code-Segments innerhalb des EXE-Datei.
+18H 1 Word Adresse der Relocation-Table innerhalb der EXE-Datei.
+1AH 1 Word Overlay-Nummer.
+1CH Variabel Pufferspeicher.
+??H Variabel Adressen der anzupassende Segment-Adressen (Relocation-Table).
+??H Variabel Programmcode-, Daten- und Stacksegmente.
*.EXE - Dateien beinhalten am Anfang eine Datenstruktur, die unter anderem die Adressen aller Segment-Bezüge enthält. EXE-Programme werden nicht direkt vom Datenträger in den Speicher geladen, sondern durch eine Routine der Exec-Funktion aufbereitet.
gotop.gif Nach Oben