Vorheriges Kapitel (Eigene Datentypen) | Nächstes Kapitel (Assemblerbefehle) |
Es wurde bereits davon gesprochen, daß ein Programm in Segmente unterteilt ist.
TASM bietet eine einfache Möglichkeit festzulegen, welche Segmente angelegt
werden sollen. Zu diesem Zwecke dient die Anweisung MODEL
.
Die genaue Syntax dieser Anweisung lautet:
MODEL [model_modifier] memory_model [codesegment_name] [, [language_modifier] language] [, model_modifier] |
memory_model
der einzige wirklich benötigte
Parameter. Die folgende Tabelle listet die möglichen Speichermodelle auf.Modell | Code | Daten | Beschreibung |
---|---|---|---|
TINY | near | near | Code und Daten liegen in einem Segment, das DGROUP genannt wird. Dieses Modell wird für .COM-Programme verwendet. |
SMALL | near | near | Der Code liegt in einem Segment, die Daten werden in einer Gruppe
DGROUP zusammengefasst. Die Segmentadresse dieser Gruppe entspricht dem
Datensegment. Dieses Modell wird am häufigsten für Stand-alone-Assemblerprogramme verwendet. |
MEDIUM | far | near | Es werden mehrere Codesegmente verwendet, die Daten liegen alle in der Gruppe DGROUP. |
COMPACT | near | far | Der Code befindet sich in einem Segment, alle near-Daten befinden sich in der Gruppe DGROUP. Die Daten werden über Far-Zeiger referenziert. |
LARGE | far | far | Der Code befindet sich in mehreren Segmenten, die near-Daten in der Gruppe DGROUP. Die Daten werden über FAR-Zeiger referenziert. |
HUGE | far | far | Soweit es TASM betrifft gilt hier das gleiche wie beim LARGE-Modell. |
TCHUGE | far | far | Das gleiche wie im LARGE-Modell, allerdings wird von anderen Annahmen über die Zuordnung von Segmenten zu ihren Registern ausgegangen. |
TPASCAL | near | far | Mit diesem Modell werden frühe Versionen von Borland Pascal unterstützt. Für neuere Versionen wird es nicht mehr benötigt. |
FLAT | near | near | Wie im SMALL-Modell werden für Code und Daten je ein Segment verwendet, dieses Modell ist allerdings für die Verwendung in 32-Bit-Systemen wie Win95 oder OS/2 vorgesehen. |
Am ehesten bedürfen jetzt wohl die Begriffe near
und
far
einer Erklärung, aber die ist schnell gegeben:
Bei der sogenannten NEAR
-Adressierung werden die Daten (unter Daten
seien hier echte Daten sowie der Code verstanden) über einen Offset adressiert.
Abgesehen vom Modell FLAT hat der Offset immer eine Größe von 16 Bit, kann also
maximal 65536 Bytes adressieren. Im FLAT-Modell hat der Offset eine Größe von 32
Bit, kann also 4 GB adressieren.
Bei der FAR
-Adressierung werden die Daten über eine
Segment:Offset-Kombination adressiert. Dies bedeutet, daß auch Daten
angesprochen werden können, die nicht mehr im aktuellen Segment liegen.
Es soll erwähnt werden, daß die Adressierungsarten in den einzelnen Modellen den
Standard darstellen. Natürlich können auch im Modell SMALL Daten über
FAR
-Zeigen referenziert werden.
Model Modifier | Funktion |
---|---|
NEARSTACK | Zeigt an, daß das Stacksegment in DGROUP (falls vohanden) eingefügt werden soll und SS auf DGROUP zeigt. |
FARSTACK | Zeigt an, daß das Stacksegment auf keinen Fall in DGROUP eingefügt werden soll und das SS auf nichts zeigt. |
USE16 | Falls eine Prozessor höher als 80286 als Zielplattform angegeben wurde, dann zeigt diese Direktive, daß alle Segmente als 16-Bit-Segmente behandelt werden sollen. |
USE32 | Falls eine Prozessor höher als 80286 als Zielplattform angegeben wurde, dann zeigt diese Direktive, daß alle Segmente als 32-Bit-Segmente behandelt werden sollen. |
DOS, OS_DOS | Gibt an, daß die Ausführungsplattform DOS ist. (Standard) |
NT, OS_NT | Gibt an, daß die Ausführungsplattform Win32 ist (Win95, Win NT) |
OS2, OS_OS2 | Gibt an, daß die Ausführungsplattform OS/2 ist |
Language
und language_modifier
spezifizieren die
Vorgabeaufrufkonventionen von Unterprogrammen. Ebenso steuern diese Angaben die
Erzeugung bestimmter Codeabschnitte in den Unterprogrammen.
Für language
sind folgende Angaben möglich: BASIC, C, CPP (C++),
FORTRAN, NOLANGUAGE, PASCAL, PROLOG, STDCALL und SYSCALL. Wird
language
nicht angegeben, nimmt TASM NOLANGUAGE an.
Language_modifier
können Sie verwenden, wenn Sie zusätzlichen Code
für Unterprogramme für Windows oder den Borland Overlay Loader erstellt haben
möchten. Möglichkeiten sind: NORMAL, ODDFAR, ODDNEAR und WINDOWS. Wird kein
language_modifier
angegeben, geht TASM von NORMAL aus.
Wie Sie in unserem ersten Programm sehen können, haben wir als Speichermodell SMALL und als Sprachmodell PASCAL gewählt. Die Wahl des Sprachmodells hatte in diesem kleinen Programm noch keine Auswirkungen. Wenn es aber später an die Erstellung von Unterprogrammen geht, dann kann ein in der MODEL-Direktive gewähltes Sprachmodell die Programmierung erheblich vereinfachen. Sie haben natürlich bei der Definition eines Unterprogramms die Möglichkeit, ein eigenes Sprachmodell festzulegen oder ein bestehenden zu überschreiben.
Allein aufgrund des festgelegten Speichermodells mittels MODEL-Direktive wird
uns die Möglichkeit gegeben, durch die einfache Angabe von DATASEG
oder CODESEG
ein Segment anzulegen oder fortzusetzen. Der
Assemblierer kümmert sich selbständig darum, die Segmente so anzuordnen, daß sie
dem gewählten Speichermodell entsprechen.
Für die fortgeschritteneren Assembler-Programmierer oder spezielle Situationen
gibt es noch die herkömmliche Art der Segmentdefinition, die auf der einen Seite
deutlich unkomfortabler ist, auf der anderen Seite Anpassungen ermöglicht, die
die Speichermodelle unterbinden würden.
Vorheriges Kapitel (Eigene Datentypen) | Nach oben | Nächstes Kapitel (Assemblerbefehle) |
Zum Inhaltsverzeichnis | ||
Zur Startseite |