18.12.2012 Aufrufe

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!