6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Rechnergrundlagen Teil 2 - 13 - Prof. Dipl.-Ing. Komar<br />
7.1.4 Das Speichermodell COM<br />
DOS kennt zwei verschiedene Typen von ausführbaren Maschinenprogrammen: EXE und COM.<br />
Ein COM -Modul ist dadurch gekennzeichnet, daß alle 4 Segmente deckungsgleich "übereinander " liegen,<br />
d.h. beim Laden <strong>eines</strong> COM -Programmes durch DOS werden alle Segmentregister mit dem gleichen Adress-<br />
wert initialisiert.<br />
Damit existiert nur ein einziges gemeinsames Segment von 64 Kbyte für Programmcode, Daten und Stapel, was<br />
einer 16-Bit -Adressmaschine entspricht.<br />
Beim Aufruf wird jedes COM-Programm von DOS mit einem Kopf, dem Program Segment Prefix (PSP )<br />
versehen. In diesen Vorspannblock speichert DOS bestimmte Informationen, die man bei der systemnahen<br />
Programmierung manchmal benötigt.<br />
Der PSP ist 256 Byte groß, beginnt immer bei der Offset-Adresse 0000 und reicht bis 00FF h. Aus diesem<br />
Grund beginnt ein COM-Programm immer bei Adresse 100 h.<br />
Die Register werden bei einem COM-File wie folgt initialisiert:<br />
CS = DS = ES = SS wird durch DOS anhand des freien Speicherplatzes festgelegt.<br />
IP = 100 h Programmstart bei CS : 100 h<br />
SP = FFFE h Stapelzeiger SP wird mit FFFF h auf das Ende des Segmentes gesetzt und der Stapel<br />
mit der 16-Bit Rücksprungadresse 0000 belegt.<br />
Der Stapel wächst zu kleineren Adressen hin.<br />
In Adresse 0 und 1 enthält der PSP den Befehl INT 20 h . Ein Sprung an die Adresse 0 führt zur Beendigung<br />
des Programms aber auch ein RET am Ende des Programms führt über die Rücksprungadresse 0000 auf den<br />
INT 20 h Befehl und damit zur Beendigung des Programmes und zur Rückkehr nach DOS.<br />
Ab Adresse 80 h beginnt der Parameterbereich, der alle Parameter enthält, die in der Kommandozeile nach dem<br />
Programmaufruf eingegeben wurden. Befehle für die E/A-Umleitung ( ) sind nicht enthalten.<br />
In Adresse 80h ist die Anzahl der Zeichen in der Kommandozeile ( exklusiv des abschließenden CR ) enthalten<br />
und ab 81h folgen die Character der Kommandozeile ( nach dem Programmaufruf ).<br />
Aufbau des Program-Segment-Prefix PSP :<br />
Offset<br />
00 – 01 INT 20h –Befehl<br />
02 – 03 der vom Programm belegte Speicher in Paragraphen ( 16-Byte-Blöcke )<br />
05 – 09 FAR-Call zum Interrupt 21 h<br />
0A – 0D Kopie von Interrupt-Vektor 22h , Beendigungsadresse<br />
0E – 11 Kopie von Interrupt-Vektor 23h , Ausstiegsadresse für Ctrl-Break<br />
12 – 15 Kopie von Interrupt-Vektor 24h , Ausstiegsadresse für fatale Fehler<br />
2C – 2D Programmumgebungsadresse ( Segment )<br />
50 – 52 enthält INT 21 h, RET durch FAR CALL können Funktionsaufrufe erfolgen<br />
5C – 6B File Control Block FCB des ersten Parameters der Kommandozeile<br />
6C – 7B FCB des zweiten Parameters<br />
80 – FF Parameterbereich, enthält alle Zeichen (Characters), die nach dem Kommandonamen<br />
eingegeben wurden. In 80h Anzahl der Zeichen<br />
SS : SP<br />
CS: IP CS : 0100 h<br />
SS=ES=DS=CS : 0000<br />
Stapel vergrößert sich von der höchsten Segmentadresse nach<br />
unten<br />
Programmcode und Daten<br />
Programmsegmentpräfix PSP<br />
Speicherabbild <strong>eines</strong> COM-Programmes nach dem Laden