Vorheriges Kapitel (Einführung) | Nächstes Kapitel (Prozessoraufbau) |
TASM kann in drei verschiedenen Modi arbeiten, dem MASM-Modus, dem Quirks-Modus
und dem Ideal-Modus.
Ohne weitere Angaben wird der MASM-Modus verwendet, in dem
TASM den Quelltext so erwartet, wie es der MASM aus dem Hause Microsoft tut.
Im Quirks-Modus wird dem Programmierer die Möglichkeit gegeben, mit TASM bekannte Fehler von MASM zu simulieren. Sollten Sie also über Quellcode verfügen, der MASM-Fehler ausnutzt, dann ist dieser Modus der richtige für Sie. Die Fehler werden im MASM-Modus als Fehler erkannt, eine Kompilierung würde also fehlschlagen.
Der Ideal-Modus schließlich, um den es in diesem Tutorial gehen wird, bietet bei vielen Konstrukten eine erweiterte Syntax und ermöglicht es dem Programmierer, Anweisungen zu schreiben, die genau das machen, was er von ihnen erwartet. Speziell bei den vielfältigen Adressierungsarten, die in Assembler möglich sind, kommen schnell Befehle zusammen, die nicht das tun, wonach sie aussehen. Hier bügelt der Ideal-Modus also Ungereimtheiten aus. Auch sonst hilft dieser Modus dabei, lesbareren Code zu erzeugen, wo klar die Unterscheidung zwischen Konstanten und Variablen möglich ist und bereits am Zeilenanfang erkennbar ist, um welche Daten- oder Codestruktur es im Augenblick geht.
Um in die verschiedenen Modi zu wechseln, müssen Sie lediglich eine dem Modus entsprechende Direktive in eine Zeile schreiben, also IDEAL für den Ideal-Mode, MASM für den MASM-Mode (bzw. MASM51 für einige Erweiterungen, die MASM 5.1 brachte) oder QUIRKS für den Quirks-Modus.
TASM ist ein sogenannter Ein-Pass-Assembler, d. h. er durchläuft den gesamten
Quelltext nur einmal und versucht, daraus ein Kompilat zu erstellen.
Nun ist es möglich, daß Sie ein Symbol verwenden, das aber erst hinter der
Stelle, an der Sie es verwenden, definiert wird. Dem Assemblierer ist dieses
Symbol zum Verwendungszeitpunkt natürlich noch unbekannt, was dazu führt, daß er
von Standardannahmen ausgeht. Um diese Annahmen jedoch den Tatsachen anzupassen,
ist ein weiterer Durchlauf nötig (Mehr-Pass-Assembler). Dieses Verhalten erhält
TASM über den Kommandozeilenparameter /m2. Dabei spiegelt die Zahl (hier: 2) die
Anzahl der Durchläufe wider, die TASM durchführen soll. Natürlich kann statt der
Zwei auch eine höhere Zahl eingetragen werden, allerdings leidet darunter die
Übersetzungsgeschwindigkeit.
Standardmäßig erzeugt TASM EXE-Dateien. Diese haben eine Mindestgröße von 512
Byte (der sogenannte EXE-Header). Bestimmte Programmiersituationen (z. B.
TSR-Programme) erfordern aber Dateien, die ohne einen solchen Header
funktionieren. Dies sind die sogenannten COM-Dateien (prominentes Beispiel:
COMMAND.COM). Sie sind nicht nur kleiner als EXE-Dateien, sie werden auch ein
Quentchen schneller geladen (was heutzutage nicht mehr ins Gewicht fällt).
Nachteil: Sie können maximal 64 KB groß werden, weil der gesamte Code und die
Daten und der Stack in ein Speichersegment passen muß und ein Speichersegment
hat eine Maximalgröße von 64 Kilobyte (Erklärungen später). Nicht jeder
Quelltext ist automatisch dazu geeignet, als EXE oder COM kompiliert zu werden.
COM-Dateien müssen auch anders geschrieben werden.
Im Verlaufe dieses Tutorials werden hauptsächlich EXE-Dateien
geschrieben.
Um den sinnvollen Gebrauch der Kompilate mit einem Debugger zu ermöglichen, ist
es nötig, in den Objectdateien (*.obj) sogenannte Debuginformationen zu
hinterlegen. Diese können dann vom Linker in die ausführbare Datei übernommen
werden. Debuginformationen haben keinen Einfluß auf das Laufzeitverhalten des
Programms. Lediglich die Größe der ausführbaren Datei ändert sich.
Um Debug-Informationen in der Objectdatei zu hinterlegen, muß TASM mit der
Option '/zi' aufgerufen werden. Diese Informationen werden nur dann in die
ausführbare Datei (.exe, .com) übernommen, wenn TLINK mit der Option '/v'
aufgerufen wird.
Es ist ratsam, alle Quelldateien mit Debuginformationen zu kompilieren, da die
Fehlersuche in Assembler recht mühsam ist und ein Debugger hier wirklich
wertvolle Hilfe leisten kann. Ob sie dann auch Eingang in das fertige Programm
finden, kann dann durch die Option '/v' von TLINK entschieden werden.
Ohne weitere Angaben erzeugt TASM Maschinencode für den 8086, Sie können also die Befehle und erweiterten Möglichkeiten der neueren Prozessoren nicht nutzen. Dabei kann TASM Befehle bis hin zum Pentium generieren. In der folgenden Tabelle sehen Sie die einzelnen Einstellungen, die Sie bezüglich der Ausführungsplattform machen können
Ideal-Mode | MASM-Mode | Bedeutung |
---|---|---|
P8086 | .8086 | Dies ist die Standardeinstellung Es wird nur Code für den 8086 erzeugt. |
P8087 | .8087 | Das ist die Standardeinstellung, wenn Code für den numerischen
Koprozessor erzeugt wird. Es wird nur 8087-Code erzeugt. |
P186 | .186 | Gestattet die Erzeugung von 80186-Code |
P286 / P286P | .286P | Ermöglicht die Assemblierung aller Befehle (inkl. Protected-Mode-Befehle) für den 80286 sowie Befehle für den 80287 |
P286N | .286 / .286C | Ermöglicht die Assemblierung von Real-Mode-Befehlen für den 80286 sowie Befehle für den 80287 |
P287 | .287 | Ermöglicht die Assemblierung von Befehlen für den 80287 |
P386 / P386P | .386P | Ermöglicht die Assemblierung aller Befehle (inkl. Protected-Mode-Befehle) für den 80386 sowie Befehle für den 80387 |
P386N | .386 / .386C | Ermöglicht die Assemblierung von Real-Mode-Befehlen für den 80386 sowie Befehle für den 80387 |
P387 | .387 | Ermöglicht die Assemblierung von Befehlen für den 80387 |
P486 | .486P | Ermöglicht die Assemblierung aller Befehle (inkl. Protected-Mode-Befehle) für den 80486 sowie Befehle für den 80487 |
P486N | .486 / .486C | Ermöglicht die Assemblierung von Real-Mode-Befehlen für den 80486 sowie Befehle für den 80487 |
P487 | .487 | Ermöglicht die Assemblierung von Befehlen für den 80487 |
P586 | .586P | Ermöglicht die Assemblierung aller Befehle (inkl. Protected-Mode) sowie Koprozessor-Instruktionen für den Pentium |
P586N | .586 / .586C | Ermöglicht die Assemblierung von Real-Mode-Befehlen sowie Koprozessor-Instruktionen für den Pentium |
P587 | .587 | Ermöglicht die Assemblierung von Koprozessor-Instruktionen für den Pentium |
Die Direktiven, die hier für den Ideal-Mode angegeben wurden, können auch im MASM-Mode verwendet werden. Da aber im Ideal-Mode die Direktiven nicht mit einem Punkt beginnen dürfen, ist es nicht möglich, die ausdrücklich für den MASM-Mode angegebenen Direktiven im Ideal-Mode zu verwenden
Wenn Sie Befehle für den 80386 verwenden wollen, dann müssen Sie mindestens eine Anweisung wie P386 angeben. Da die neueren Prozessoren Befehle der älteren verarbeiten können, ist es natürlich möglich, nach einer Anweisung wie P586 mit allen Prozessorbefehlen zu arbeiten . Da allerdings ab der Einstellung für den 80386 erweiterter Code produziert wird, laufen Programme mit dieser Einstellung nicht mehr auf älteren Prozessoren.
Die allgemeine Form der Kommandozeile hat folgendes Aussehen:
TASM Dateisatz1 [; Dateisatz2]
Für jeden Dateisatz können Sie einzelne Optionen festlegen. Dabei hat ein
Dateisatz folgendes Aussehen:
[Optionen] Quelldatei [[+]Quelldatei] [,[Objektdatei]] [,[Listing-Datei]]
[,[Crossref-Datei]]]]
Als Quelldatei können Sie einen konkreten Namen angeben oder mit den Wildcards
'?' und '*' arbeiten.
Um mehrere Dateien gleichzeitig zu übersetzen, schreiben Sie die Dateinamen
getrennt durch ein '+' hintereinander (Datei1 + Datei2).
Um alle Dateien im aktuellen Verzeichnis zu kompilieren, schreiben Sie
TASM *.*
.
Um eine Datei zu kompilieren und daraus eine Objekt-Datei, eine Listing-Datei
sowie eine Crossreferenz-Datei zu erzeugen, lautet die Kommandozeile
TASM datei,,,
Dadurch werden die Dateien datei.obj, datei.lst und datei.xrf erzeugt. Um den
einzelnen Dateien noch andere Namen zu geben, können Sie an die entsprechende
Stelle einen Dateinamen schreiben,z. B.
TASM datei,,listing,cross
.
Werden keine Endungen angegeben, dann wird bei der Quelldatei .asm angenommen,
bei den anderen Dateien jeweils .obj, .lst und .xrf.
Wenn Sie nur die Kommata schreiben, dann wird trotzdem eine Datei erzeugt.
Wollen Sie allerdings eine Objekt-Datei, keine Listing-Datei und eine
Crossreferenz-Datei, dann schreiben Sie folgendes:
TASM datei,,NUL,
Wollen Sie nur eine Objekt-Datei sowie ein Listing, dann schreiben Sie
TASM datei,,
(nötigenfalls mit anderen Dateinamen).
Um einfach nur eine Datei zu kompilieren und eine Objekt-Datei zu erhalten,
rufen Sie TASM einfach nur mit dem Namen der Quelldatei auf.
Parameter | Bedeutung | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/a | Gibt an, daß die einzelnen Segmente in alphabetischer Reihenfolge geordnet
werden. Diese Option benötigen Sie in aller Regel nur, wenn Sie Quellcode
kompilieren wollen, der für sehr alte Versionen des IBM- oder
Microsoft-Compilers geschrieben wurden. Sie erreichen den gleichen Effekt, wenn Sie in die Quelldatei die Anweisung .ALPHA einfügen (nur im MASM-Modus).Normalerweise werden die Segmente in der Reihenfolge ihres Auftretens angeordnet. Die Option /s überschreibt die alphabetische Reihenfolge. Sollten Sie mit der Anweisung .SEQ im Quelltext bereits die sequentielle
Reihenfolge eingestellt haben, dann hat die Option /a keine Wirkung. |
||||||||||||||||||||||||||||||||||||||
/b | Diese Option wurde nur eingebaut, um die Kompatibilität zu MASM-Versionen zu wahren. Sie hat keinerlei Auswirkung auf die Assemblierung. | ||||||||||||||||||||||||||||||||||||||
/c | Ermöglichst die Erstellung einer Cross-Referenz in der Listing-Datei. In der Cross-Referenz werden alle Symbole einer Quelldatei aufgeführt mit der Zeile, in der sie definiert wurden sowie allen Zeilen, die dieses Symbol referenzieren. Diese Option hat nur dann eine Auswirkung, wenn Sie mit /l die Listing-Erzeugung erzwingen oder die Listing-Datei explizit auf der Kommandozeile angeben. |
||||||||||||||||||||||||||||||||||||||
/d | Definiert ein Symbol Mit dieser Option können sie auf der Kommandozeile Symbole definieren, auf die in der Quelldatei Bezug genommen werden kann. Sie können mehrere Symbole in der Kommandozeile definieren. Beispiel: TASM /dX=10 /dMWST=16 Datei |
||||||||||||||||||||||||||||||||||||||
/e | Generiert Instruktionen für einen Koprozesoremulator. Die Option /r kehrt die Wirkung wieder um. Die Direktive NOEMUL überlagert die Option /e. Die Option /e hat die gleiche Wirkung wie die Direktive EMUL oder die Option /jEMUL. |
||||||||||||||||||||||||||||||||||||||
/h oder /? | Zeigt einen Hilfebildschirm mit Kurzangaben zur Kommandozeilensyntax sowie den möglichen Optionen. | ||||||||||||||||||||||||||||||||||||||
/i | Setzt einen Include-Dateipfad. Sie können zwar auch in der Quelldatei einen Pfad zur Include-Datei angeben, mit dieser Option sind Sie allerdings unabhängiger vom System, auf dem die Dateien liegen. Sie können je Kommandozeile mehrere Pfade angeben, in denen nach Include-Dateien gesucht wird. Beispiel: TASM /ic:\tasm\include /ic:\bc\include Datei |
||||||||||||||||||||||||||||||||||||||
/j | Definiert eine Direktive, die normalerweise in der Quelldatei stehen würde,
wie z. B. P386N, IDEAL, JUMPS. Sie können mehrere Direktiven in der
Kommandozeile definieren. Ein Beispiel könnte so aussehen: TASM /jP386N /jIDEAL Datei |
||||||||||||||||||||||||||||||||||||||
/kh# | In der Voreinstellung kann TASM 8192 Symbole je Programm verwalten. Sollten Sie ein Programm schreiben, das mehr Symbole enthält, dann müssen Sie mit dieser Option die Anzahl möglicher Symbole erhöhen. Die maximale Zahl ist 32768. Sie sollten diese Option verwenden, wenn Sie bei der Übersetzung die Meldung Out of hash space bekommen | ||||||||||||||||||||||||||||||||||||||
/l | Generiert eine Listing-Datei Diese Datei erhält den gleichen Namen wie die Quelldatei mit der Endung .lst |
||||||||||||||||||||||||||||||||||||||
/la | Anzeigen von High-Level-Code in der Listing-Datei. Normalerweise werden der Code, den Anweisungen wie die MODEL-Direktive erzeugen, in der Listing-Datei nicht angezeigt. Mit dieser Option können Sie allerdings die Übernahme in die Listing-Datei erreichen. |
||||||||||||||||||||||||||||||||||||||
/m# | Diese Option legt die maximale Zahl von Übersetzungläufen fest. Normalerweise arbeitet TASM als Ein-Pass-Assembler. Mit /m2 können Sie allerdings angeben, daß maximal 2 Durchläufe durchgeführt werden. TASM kann selbst entscheiden, ob weniger als die angegebenen Durchläufe möglich sind. Geben Sie hinter /m keine Zahl an, dann wird ein Standard von 5 Durchläufen angenommen. |
||||||||||||||||||||||||||||||||||||||
/ml | Mit dieser Option werden alle Symbole, auch die nichtöffentlichen und nichtexternen als case-sensitiv behandelt, d. h. ABCdef und AbCdEf sind unterscheidliche Symbole. Allerdings können Sie bei Verwendung dieser Option die Schlüsselwörter noch immer so schreiben, wie Sie wollen. | ||||||||||||||||||||||||||||||||||||||
/mu | Mit dieser Option werden alle Symbole in Großbuchstaben umgewandelt. Dies ist die Voreinstellung. |
||||||||||||||||||||||||||||||||||||||
/mv# | Setzt die maximale Länge der Symbole. Wenn Sie beispielsweise mit /mv14 arbeiten, dann werden die Symbole nur unterschieden, wenn innerhalb der ersten 14 Zeichen Unterschiede auftreten. So werden z. B. die Symbole Symbol1234567890 und Symbol1234567890123 nicht mehr unterschieden. Als minimale Symbollänge ist die 12 gestattet. |
||||||||||||||||||||||||||||||||||||||
/mx | Weist TASM an, öffentliche (public) und externe (extrn) Symbole
case-sensitiv zu behandeln, alle anderen Symbole (innerhalb der Quelldatei)
unterliegen nicht dieser Behandlung. Sie sollten diese Option verwenden, wenn Sie mit Modulen arbeiten, die zum Beispiel von C++-Compilern erzeugt wurden |
||||||||||||||||||||||||||||||||||||||
/n | Unterdrückt die Symboltabelle am Ende der Listing-Datei. Diese Option hat nur dann eine Auswirkung, wenn Sie mit /l die Listing-Erzeugung erzwingen oder die Listing-Datei explizit auf der Kommandozeile angeben. |
||||||||||||||||||||||||||||||||||||||
/o | Generiert Overlay-Code für TLINK | ||||||||||||||||||||||||||||||||||||||
/oi | Generiert Overlay-Code für den IBM-Linker. Die resultierenden Objekt-Dateien sind mit TLINk nicht kompatibel. | ||||||||||||||||||||||||||||||||||||||
/op | Generiert Overlay-Code für den Phar-Lap-Linker. Die resultierenden Objekt-Dateien sind mit TLINK nicht kompatibel. | ||||||||||||||||||||||||||||||||||||||
/os | Erzeugt TLINK-kompatible Objekt-Dateien ohne Overlay-Unterstützung. Dies ist die Standardeinstellung. | ||||||||||||||||||||||||||||||||||||||
/p | Weist TASM an, Warnungen auszugeben, wenn er beim Kompilieren auf
Anweisungen trifft, die im Protected Mode Probleme verursachen könnten. So ist
im Protected Mode zum Beispiel das Schreiben in das Code-Segment in aller Regel
nicht gestattet. Trifft TASM auf eine solche Anweisung, dann wird eine Warnung
ausgegeben. Diese Option benötigen Sie folglich nur, wenn Sie ein Programm schreiben, das im Protected Mode laufen soll. |
||||||||||||||||||||||||||||||||||||||
/q | Durch diese Option werden nur Bestandteile in die Objekt-Datei eingefügt, die für das spätere Linken absolut notwendig sind. Durch diese Option werden das Copyright sowie Abhängigkeitsinformationen unterdrückt. Verwenden Sie diese Option nicht, wenn Sie mit einem Werkzeug wie MAKE arbeiten, da dieses die Abhängigkeitsinformationen benötigt. | ||||||||||||||||||||||||||||||||||||||
/r | Generiert echte Fließkomma-Instruktionen Die Option /e kehrt die Wirkung wieder um. Sollten Sie die Direktive EMUL in Ihrer Quelldatei verwenden, dann überschreibt Sie die Option /r. Die Option /r hat den gleichen Effekt wie die Direktive NOEMUL und die Option /jNOEMUL. |
||||||||||||||||||||||||||||||||||||||
/s | Gibt an, daß die Segmente in der Reihenfolge ihres Auftretens geordnet werden sollen. Dies ist die Voreinstellung. Die Segmentreihenfolge kann mit der Option /a oder der Direktive .ALPHA umgestellt werden. Sollte die Direktive .ALPHA in der Quelldatei stehen, dann überlagert sie die Option /s. | ||||||||||||||||||||||||||||||||||||||
/t | Weist TASM an, nur dann Meldungen auszugeben, wenn Warnungen oder Fehler auftauchen. Bei erfolgreicher Übersetzung erscheint keine Meldung. | ||||||||||||||||||||||||||||||||||||||
/u | Mit dieser Anweisung können Sie festlegen, mit welcher Version von TASM
bzw. MASM Sie den Code übersetzen lassen wollen. Es handelt sich um die
Kommandozeilenversion der Direktive VERSION |
||||||||||||||||||||||||||||||||||||||
/utthk | Diese Option weist TASM an, Code zu assemblieren, der vom Micsrodoft Thunk-Compiler generiert wurde. Ein Beispiel finden Sie im Verzeichnis \Examples\Thunk95 unterhalb Ihres TASM-Verzeichnisses. | ||||||||||||||||||||||||||||||||||||||
/v | Diese Option wurde nur eingebaut, um die Kompatibilität zu MASM-Versionen zu wahren. Sie hat keinerlei Auswirkung auf die Assemblierung. | ||||||||||||||||||||||||||||||||||||||
/w | Kontrolliert die Generierung von Warnungen Die Warnungen gehören einer bestimmten Warnklasse an, die in der folgenden Tabelle aufgelistet sind. Der Einfachheit halber sind sie in englisch aufgelistet.
Normalerweise sind alle Warnungen möglich. Lediglich die Warnklassen ICG und PRO sind ausgeschaltet. Mit /w+Warnklasse werden die Warnungen der angegebenen Warnklasse ermöglicht. Wird keine Warnklasse angegeben, dann werden alle Warnungen ermöglicht. Mit /w-Warnklasse werden die Warnungen der Warnklasse ausgeschaltet. Wird keine Warnklasse angegeben, dann werden alle Warnungen ausgeschaltet. |
||||||||||||||||||||||||||||||||||||||
/x | Werden bedingte Anweisungen wie IF, IFDEF, IFNDEF usw.
verwendet und haben diese Anweisungen das Ergebnis false, dann werden die
Codezeilen, die von diesen Anweisungen eingeschlossen werden, entgegen dem
Standard in die Listing-Datei übernommen.Entweder weisen Sie TASM mit der Option /l an, eine Listing-Datei zu generieren oder Sie geben auf der Kommandozeile explizit eine Listing-Datei an. |
||||||||||||||||||||||||||||||||||||||
/z | Weist TASM an, bei Fehlern während der Kompilierung vor der Fehlermeldung die Quellcodezeile anzuzeigen, in der der Fehler entdeckt wurde. Ohne diese Option zeigt TASM lediglich eine Meldung an, die den Fehler beschreibt. | ||||||||||||||||||||||||||||||||||||||
/zd | Ermöglicht das Einfügen von Zeilennummerninformationen in der Objekt-Datei. Durch diese Information kann der Debugger die Zeile im Quellcode anzeigen, die gerade ausgeführt wird. | ||||||||||||||||||||||||||||||||||||||
/zi | Weist TASM an, komplette Debug-Informationen in die Objekt-Datei zu schreiben. Diese Informationen umfassen u. a. Zeilennummern zur Synchronisation zwischen Quellcode und Anzeige im Debugger sowie Datentypinformationen. | ||||||||||||||||||||||||||||||||||||||
/zn | Verhindert die Ausgabe von Debug-Informationen in die Objekt-Datei. Nützlich, um den Parameter /zi in einer Konfigurationsdatei zu überschreiben. |
Vorheriges Kapitel (Einführung) | Nach oben | Nächstes Kapitel (Prozessoraufbau) |
Zum Inhaltsverzeichnis | ||
Zur Startseite |