2.6 Der Assembler GenST


Der Assembler von Devpac ST, GenST, ist fr die Version 2 vllig neu 
geschrieben worden. Nur so ist es mglich gewesen, die gewnschten 
Verbesserungen zu machen. Einige der neuen Merkmale von GenST2 sind 
die Assemblierungsgeschwindigkeit von bis zu 75000 Zeilen pro Minute, 
Symbolsignifikanz von 127 Zeichen und die INCBIN- Direktive, mit der 
eine Binrdatei, wie z.B. eine Bildschirmgrafik, direkt in Ihr Programm 
eingebunden werden kann. GENST generiert Code, der ebenso mit Pascal 
Plus linkbar ist.
GenST gibt es in zwei Ausfhrungen: einmal direkt vom Editor aus 
aufrufbar und einmal als alleinstehendes Programm.


2.7 Den Assembler aufrufen

2.7.1 Vom Editor aus

Sie knnen vom Editor aus durch Whlen der "Assemblieren"-Funktion 
im Programm-Men oder mit Alt-A den Assembler aufrufen. 

Programmtyp
Hier whlen Sie zwischen ausfhrbarem, GST-linkbarem oder DRI-
linkbarem Code. Die Unterschiede zwischen den drei Programmtypen 
werden spter genau erklrt.

Gro/Klein
Hier knnen Sie whlen, ob bei Symbolen Unterschiede wegen der Gro- 
oder Kleinschreibung gemacht werden sollen. Wenn Sie "gleich" whlen, 
dann sind die Symbole "Start" und "start", vom Assembler aus gesehen, 
dasselbe Symbol; wenn "Verschieden" gewhlt wird, sind die beiden 
zwei verschiedene Symbole.

Debug-Information
Wenn Sie Ihr Programm noch debuggen, ist es ntzlich, da die Symbole 
im fertigen Programm enthalten sind. Die Symboloptionen sind 
"Normal" und "Erweitert": das HiSoft- erweiterte Debug-Format 
erlaubt es, bis zu 22 Zeichen lange Symbole anstatt der blichen 
8 Zeichen Lnge zu verwenden.

Listing
Sie knnen hiermit die Ausgabe des Listings whlen: auf dem Drucker, 
auf Diskette, auf der eine Datei mit gleichem Namen und der Extension 
.LST angelegt wird,  oder auf den Bildschirm. Wenn Sie keine Ausgabe 
wollen, knnen Sie auch diese Option whlen.

Assemblieren
Hier knnen Sie die Geschwindigkeit des Assemblers bestimmen. 
Normalerweise sollten Sie den Schnell-Knopf bettigt lassen, wenn 
jedoch der Speicerplatz zu gering wird, sollten Sie Langsam 
whlen. Dadurch wird der Assembler gezwungen, so wenig Platz wie 
mglich zu belegen und den Zugriff auf Diskette zu verlangsamen. 
In der .TTp-Version wird der Langsam-Modus mittels der Option -M 
in der Kommandozeile eingeschaltet.

Output
Wie bereits erwhnt, knnen Sie hier whlen, welches Programm aus 
Ihrem Quelltext erzeugt wird. "Nein" heit, da nur ein Syntaxcheck 
gemacht wird und kein Programm erzeugt wird. "Speicher" heit, da 
das Programm in den Speicher assembliert wird, und so 
bereitsteht, um von MonST debuggt zu werden, oder auch einfach zur 
Ausfhrung gebracht wird. Es wird kein Diskettenzugriff gemacht, 
auer dann, wenn eine Include-Datei gebraucht wird, die meistens 
nur ein Mal gelesen wird; bei der Version 1 wurde eine Include-
Datei immer zweimal gelesen. Diskette bedeutet, da das Program 
wie gewohnt auf Diskette erzeugt wird. Die Regeln der 
Namensgebung fr die Dateien werden in Krze erlutert.
Wenn Sie alle gewnschten Optionen gewhlt haben, klicken Sie auf 
"Assemblieren" oder drcken Sie Return. Der Ablauf wurde oben schon 
erlutert.


2.8 Der Stand-alone-Assembler

Wenn Sie die .TTP-Version des Assemblers aufrufen, werden Sie nach 
einer Kommandozeile gefragt; die Kommandozeile hat das unten beschriebene 
Format. Wenn Sie keine Kommandozeile bergeben wollen, geben Sie 
nur Return ein, Sie kehren dann zum Desktop zurck. Am Ende des 
Assembliervorganges wird auf einen Tastendruck gewartet. Wenn dem  
Assembler beim Aufruf keine Kommandozeile bergeben wurde, wird 
kein Tastendruck abgewartet, da angenommen wird, da der Assembler 
von einem CLI oder einer Batch-Datei aus aufgerufen wurde.

2.8.1 Format der Kommandozeile

Die Kommandozeile hat das Format
Hauptdatei <-Optionen> [-Optionen]
Die Hauptdatei ist der  Name der Datei, die assembliert werden soll; 
wenn keine Extension angegeben wurde, wird .S angenommen. Optionen 
sollte ein "-" Zeichen voranstehen. Erlaubte Optionen sind (zusammen 
mit den quivalenten OPT- Direktiven):

B       keine Binrdatei erzeugen
C       GRO/klein egal (OPT C-)
D       Debug (OPT D+)
L       GST-linkbarer Code (OPT L+)
L2      DRI-linkbarer Code (OPT L2)
O       Name der erzeugten Datei, folgt dem O ohne Leerschritt   
        dazwischen
P       Name der Listing-Datei, folgt dem P ohne Leerschritt dazwischen
Q       In jedem Fall auf einen Tastendruck am Ende warten
T       Der Tab-Abstand; die Zahl folgt dem T ohne Leerschritt;
        In der .TTp-Version wird die Tab-Einstellung durch die
        Option -Txx gendert, z.B. -T10.
X       Erweiterter Debug (OPT X+)

Wenn keine Optionen auf der Kommandozeile angegeben werden, wird 
eine ausfhrbare Programm-Datei erzeugt, deren Name auf dem der 
Source-Datei basiert, allerdings ohne Listing und mit Unterscheidung 
zwischen Gro- und Kleinschrift. 

Beispiele:
test -b
assembliert die Datei test.s ohne eine Datei zu erzeugen; dies wre 
ein Syntaxcheck, mehr nicht.
test -om:test.prg -p
assembliert test.s in die Datei m:test.prg und erzeugt eine Listing-Datei 
namens test.lst.
test -l2dpprn: -t10
assembliert test.s in DRI-linkbares Format mit vollstndiger Debug-
Information und schickt das Listing an die parallele Schnittstelle. 
Wenn Sie ein Listing an die serielle Schnittstelle senden wollen, 
mssen Sie AUX: angeben. Der Tab-Abstand des Listings betrgt 10 
Zeichen.

2.8.2 Dateinamen

In GenST ist geregelt, wie der Name einer Ausgabedatei kreiert wird. 
Der Name ist auerdem abhngig von den angegebenen Optionen, wie 
z.B. -O, und der OUTPUT- Direktive.

Wenn ein Dateiname explizit angegeben wird, dann ist
        Name=angegebenerName

Wenn die Output-Direktive nicht benutzt wurde, dann ist
        Name=Source-Name + .PRG .BIN oder .O
        
Wenn die Output-Direktive eine Extension angibt, dann ist
        Name=Source-Name + Extension vom Output
        
Sonst ist
        Name=Name vom Output


2.9 Der Assembliervorgang

GenST ist ein Zwei-Pass-Assembler; whrend des ersten Passes wird 
der Quelltext im Speicher, ggf. auch von Diskette, verarbeitet und 
eine Symboltabelle gebildet. Wenn Syntaxfehler whrend des ersten 
Passes gefunden wurden, werden diese angegeben, der zweite Pass wird 
nicht gestartet. Whrend des zweiten Passes werden die mnemonischen 
Befehle in binre Instruktionen umgewandelt, ein Listing kann 
ausgegeben - wenn erforderlich mit einer Symboltabelle - und eine 
Binrdatei erzeugt werden. Whrend des zweiten Passes gefundene 
Fehler und Warnungen werden angegeben.
Whrend des Assemblierens kann jede Bildschirmausgabe mit Ctrl-S 
angehalten werden und mit Ctrl-Q weiterlaufen. Mit Ctrl-C 
kann der Assembler abgebrochen werden; die bis dahin erzeugte Datei 
ist aber unvollstndig und sollte nicht ausgefhrt werden.

2.9.1 In den Speicher assemblieren

Um die turn-around-Zeiten so gering wie mglich zu halten, kann GenST 
in den Speicher assemblieren, damit Ihr Programm sofort ausgefhrt 
oder mit Hilfe von MonST sofort debuggt wird. Um dieses zu erreichen, 
wird der sog. Programmspeicher benutzt, dessen Gre in der 
Assemblierungs-Dialogbox einzustellen ist. Wenn Sie ohne Debug-
Information arbeiten, kann der gesamte Programmspeicher fr Ihr 
Programm benutzt werden; wenn Sie aber mit Debug arbeiten, wird der 
Programmspeicher sowohl mit Ihrem Programm als auch mit der Debug-
Information gefllt.
Ein Programm, das im Speicher ausgefhrt wird, ist ein normales 
GEMDOS-Programm. Es sollte daher mit einem pterm- oder pterm0-Aufruf 
beendet werden, wie z.B.

        clr.w   -(sp)
        trap    #1

Programme knnen sich selbst modifizieren, sind aber bei einer erneuten 
Ausfhrung wieder im Urzustand.
Die Programmspeichergre und die in der Dialogbox eingestellten 
Optionen des Assemblers werden beim Abspeichern der Voreinstellungen 
mit abgespeichert.

2.9.2 Arten der Binrdateien

Es gibt sechs verschiedene Typen von Binrdateien, die GenST produzieren 
kann. Sie unterscheiden sich uerlich an den Extensions.

.PRG            Ein GEM-Programm, welches Fenster benutzt
.TOS            Ein TOS-Programm, welches keine Fenster benutzt
.TTP            Ein TOS-Programm, welches eine Kommandozeile braucht
.ACC            ein Desk-Accessory
.BIN            nicht ausfhrbare, linkbare Datei im GST-Format
.O              nicht ausfhrbare, linkbare Datei im DRI-Format

Die ersten drei Arten knnen vom Desktop aus mit einem Doppelklick 
ausgefhrt werden; sie unterscheiden sich in der Vorbereitung, die 
das Betriebssystem macht, bevor das Programm ausgefhrt wird. Bei 
einer .PRG Datei wird der Bildschirm gelscht und mit dem Muster 
des Desktops versehen; auerdem wird an der Bildschirmoberseite Platz 
 fr eine Menleiste gemacht. Bei TOS- und TTP-Programmen wird der 
Bildschirm bis auf die Hintergrundfarbe gelscht, ein blinkender Cursor 
an den oberen linken Bildschirmrand gesetzt und die Maus ausgeschaltet. 
Wenn Sie auf ein TTP-Programm doppelklicken, dann erscheint vor 
Programmaufruf eine Dialogbox, in der Sie eine Kommandozeile dem 
Programm bergeben knnen.
.ACC-Dateien sind zwar ausfhrbar, jedoch nicht vom Benutzer. Sie 
werden vom AES whrend des Bootvorganges oder whrend eines Wechsels 
der Bildschirmauflsung geladen und initialisiert.
.BIN- und .O-Dateien knnen nicht ausgefhrt werden; sie mssen erst 
von einem Linker verarbeitet werden - meist zusammen mit anderen 
linkbaren Dateien - um zu einem vollstndigen Programm zu werden. 
Es gibt auf dem ST zwei Standard-Formate, nmlich das GST-Format 
und das DRI-Format. Die Unterschiede zwischen diesen Formaten werden 
spter erlutert.
Die einzige Ausnahme von diesen Regeln sind Programme, die im AUTO-
Ordner ausgefhrt werden. Sie mssen die Extension .PRG haben, obwohl 
sie TOS-Programme sein mssen.

2.1O Verschiedene Vernderungen gegenber der Version 1

Es gibt drei reservierte Symbole: __LK, __RS und __G2. Ihre Bedeutungen 
werden spter erlutert.
Es gibt drei neue Operatoren, die alle mit der Prioritt unterhalb 
der Addition und der Subtraktion liegen: Gleichheit (=), kleiner 
als (<) und grer als (>). 
Oktale Konstanten knnen jetzt mit "@" bezeichnet werden.
Wenn Sie die Adressierungsart >>Adreregister indirekt<< mit Index 
benutzen, knnen Sie den Offset weglassen.

        move.l  (a3,d2.l),d0
wird als
        move.l  0(a3,d2.l),d0
assembliert.
Die Daten- und Adreregister knnen auch als R0 bis R15 bezeichnet 
werden, um Kompatibilitt mit anderen Assemblern zu gewhrleisten. 
R0-R7 entsprechen D0-D7, R8-R15 entsprechen A0-A7.

2.1O.1 Lokale Labels
GenST2 untersttzt lokale Labels. Dies sind Labels, die einem 
bestimmten Teil des Sources angehren. Sie beginnen mit einem 
Punkt (".") und sind vom vorhergehenden nicht-lokalen Label abhngig.

        lnge1  move.l  4(sp),a0
        .loop   tst.b   (a0)+
                        bne.s   .loop
                        rts
        lnge2  move.l  4(sp),a0
        .loop   tst.b   -(a0)
                        bne.s   .loop
                        rts

Es gibt zwei Labels namens .loop, von denen das erste zu lnge1, 
das zweite zu lnge2 gehrt.
Um Verwechslung mit Adressierungsarten zu vermeiden, sind .W und 
.L nicht als lokale Labels zulssig.
Eine besondere Form eines lokalen Labels ist die Form 1234$, das 
aus Dezimalzahlen besteht und mit >>$<< endet.k Dadurch ist 
Kompatibilitt mit anderen Assemblern gegeben.

2.1O.2 Erweiterungen des Befehlssatzes

Der vollstndige 68000er-Befehlssatz wird von GenST2 untersttzt. 
Es gibt aber stilistische Abkrzungen, die GenST2 auch akzeptiert:

Condition Codes
Die alternativen Condition Codes HS und LQ, quivalent mit CC und 
CS, werden bei Bcc, DBcc und Scc untersttzt.

Branch-Befehle
Um einen kurzen Branch explizit anzugeben, benutzen Sie Bcc.B oder 
Bcc.S. Einen Branch mit Wort-Lnge geben Sie mit Bcc.W an; Sie knnen 
aber auch den Optimierer die Branch-Lnge whlen lassen. Bcc.L wird 
aus Kompatibilittsgrnden zu GenST1 beibehalten, obwohl es genaugenommen 
ein 68020-Befehl ist; beim Vorkommnis eines Bcc.L wird eine Warnung 
generiert. Ein BRA.S zum darauffolgenden Befehl ist nicht erlaubt 
und wird, mit einer Warnung, in einen NOP verwandelt. Ein BSR.S zum 
darauffolgenden Befehl ist nicht erlaubt und erzeugt einen Fehler.

BTST
BTST ist einzigartig unter den bit-test-Befehlen, weil es PC-relative 
Adressiermodi untersttzt.

CLR
CLR an ist nicht erlaubt, benutzen Sie statt dessen SUB.L An,An; die 
Flags werden von diesem Befehl aber nicht beeinflut.

CMP
Wenn der Source-Operand immediate ist, wird CMPI erzeugt, wenn der 
Ziel-Operand ein Adreregister ist, wird CMPA benutzt. Wenn die 
Adressierungsarten beider Operanden post-inkrement benutzen, wird 
ein CMPM generiert.

DBcc
DBRA wird fr DBF akzeptiert.

ILLEGAL
Das Wort $4AFC wird generiert.

LINK
Wenn der Wert positiv oder ungerade ist, wird eine Warnung ausgegeben.

MOVE from CCR
Dies ist ein Befehl der Prozessoren 68010 und hher. Es wird in ein 
>>MOVE from SR<< konvertiert.

MOVEQ
Wenn der Wert im Bereich 128 bis 255 inklusive ist, wird eine Warnung 
ausgegeben. Wenn Sie ausdrcklich ein .L angeben, wird keine Warnung 
erzeugt.

2.1O.3 Assembler-Direktiven


INCBIN  Dateiname
Mit dieser Direktive wird eine Datei vollstndig in Ihr Programm 
miteinbezogen. Dies ist z.B. ntzlich fr Grafiken, die mit anderen 
Programmen erstellt wurden und von Ihrem Programm in binrer Form 
benutzt werden; es entfllt eine Konvertierung in DC-Direktiven.
INCBIN startet an einer geraden Grenze und wird mit einem 
Nullbyte gebaddet, wenn die Datei eine ungerade Lnge besitzt.

OPT
Es gibt verschiedene neue Optionen, aber auch solche, die sich gegenber 
der Version 1 verndert haben.

Option A - Auto-PC
Um Ausfhrzeit zu sparen und die Programmgre zu reduzieren, 
kann die Option A+ verwendet werden. Sie erlaubt Automatik-PC-
Modus, wo immer er mglich ist. Die Zeile 

MOVE.L int_in,do

wrde zu

MOVE.L int_in(pc),do

assembliert werden. Dadurch wird jeoch kein positionsunabhngiger 
Code erzeugt. A+ kann z.B. im Programm GEMTEST effektiv 
eingestellt werden. Unter Umstnden wird die Option nicht 
beachtet, z.B. beim Lesen des absoluten Speichers, oder wenn der 
Ausdruck .L gebraucht wird.
 
C       Gro/klein-Unterscheidung und Signifikanz
Standardmig unterscheidet GenST2 zwischen Gro- und Kleinschreibung 
von Labels. Labels haben standardmig eine Signifikanz von 127 Zeichen, 
d.h. da die ersten 127 Zeichen eines Labels zur Unterscheidung 
von anderen Labels bewertet werden. Sie knnen, wie bei GenST1, C- 
angeben, wenn keine GRO/klein-Unterscheidung gemacht werden soll. 
Sie knnen auch die Signifikanz verndern, indem Sie eine Dezimalzahl 
zwischen dem C und dem + oder - angeben, z.B. C16+ um eine Signifikanz 
von 16 Zeichen mit einer Gro/klein-Unterscheidung einzustellen.

L       Linker-Modus
Standardmig produziert GenST ausfhrbaren Code. Mit L+ wird 
GST-linkbarer Code erzeugt, mit L2 wird DRI-linkbarer Code erzeugt. 
Mit L- kann ausdrcklich ausfhrbarer Code erzeugt werden. Eine OPT-L-
Direktive mu in der allerersten Zeile der Quelldatei stehen.

O       Optimierung
GenST2 besitzt die Fhigkeit, manche Befehle in krzere oder schnellere 
zu verwandeln. Standardmig wird zwar keine Optimierung vorgenommen, 
jedoch kann jede Art von Optimierung wahlweise hinzugeschaltet werden.

        O1+     Optimiert Rckwrts-Branches wenn mglich, kann mit 
O1- wieder abgeschaltet werden

        O2+     Optimiert Adre-Register indirekt mit Offset in 
Adreregister. Wenn der Offset Null ist, kann mit O2- abgeschaltet 
werden.

                move.l  Wert(a0),d3     wird zu
                move.l  (a0),d3         wenn Wert gleich Null
        O+      schaltet alle Optimierungen an.
        O-      schaltet alle Optimierungen ab.
        OW-     schaltet die mit den Optimierungen verbundenen Warnungen 
aus. Kann mit OW+ wieder eingeschaltet werden.

P       Positionsunabhngigkeit
Wenn diese Option mit P+ zugeschaltet wird, wird der erzeugte Code 
auf Positionsunabhngigkeit hin geprft.  Wenn ein Befehl nicht 
positionsunabhngig ist, wird ein Fehler erzeugt. Mit P- kann die 
Option wieder ausgeschaltet werden; die Option ist dann im 
Standardzustand.

T       Typen-berprfung
GenST2 kann Programmierfehler entdecken, indem es Ausdrcke dahingehend 
prft, ob sie absolut oder relativ sind. Da fr manche Anwendungen 
und Programmierstile eine solche Meldung hinderlich sein kann, ist 
sie mit T- aus-, und mit T+ wieder einschaltbar. 

main            bsr             init
                lea             main(a6),a0
                move.l  (main).w,a0

Diese Zeilen wrden normalerweise einen Fehler erzeugen, da 
>>main<< ein relativer Ausdruck ist und GenST in beiden Fllen einen 
absoluten Ausdruck erwartet. Falls aber der Code auf einer anderen 
68000er-Maschine laufen soll, kann dies zulssig sein: also mte 
T- angegeben werden.

U       Lokale Labels mit "_"
Mir U+ knnen Sie angeben, da lokale Labels mit "_" anstatt mit 
einem Punkt beginnen. Diese Option exisiert, um Kompatibilitt mit 
Compilern der Firma Prospero zu gewhrleisten.

X       Erweiterter Debug
Dies ist eine erweiterte Version der Option D. Hiermit werden Symbole 
mit bis zu 22 Zeichen Lnge anstatt maximal 8 Zeichen  wie bei D 
ausgegeben.

Zusammenfassung der Optionen:

Alle Optionen GenST2s werden hier zusammengefat. Die Standardeinstellungen 
werden in Klammern angegeben.

        C       Gro/Klein-Unterscheidung und Signifikanz (C127+)
        D       Debug-Information (D-)
        L-      ausfhrbarer Code (Standard)
        L+      GST-linkbarer Code
        L2      DRI-linkbarer Code
        M       Makro-Expansion (M-)
        O       Optimierungen (O-)
        P       auf Positionsunabhngigkeit prfen (P-)
        S       Symboltabelle ins Listing (S-)
        T       Typen-berprfung (T+)
        W       Warnungen (W+)
        U       Lokale Labels mit "_" (U-)
        X       Erweiterter Debug (X-)


<Label>DCB.B            Anzahl,Wert                                          
<Label> DCB.W           Anzahl,Wert
<Label> DCB.L           Anzahl,Wert
Diese Direktive erlaubt es, Datenblcke bestimmter Gre mit konstantem 
Wert zu erzeugen. "Zahl" gibt die Gre des Blocks an, "Wert" den sich 
wiederholenden Wert.

OUTPUT          Dateiname
Mit dieser Direktive lt sich der Name der Ausgabe-Datei bestimmen. 
Wenn der angegebene Dateiname mit einem Punkt anfngt, wird nur die 
Extension der erzeugten Datei beeinflut. Der Name wird sonst nach 
den oben beschriebenen Regeln gebildet.

__G2            (reserviertes Symbol)
Dieses Symbol kann mit der IFD-Bedingung verwendet werden, um 
festzustellen, ob mit GenST2 assembliert wird. Der Wert dieses Symbols 
ist die Version des Assemblers und immer absolut.

<Label> REPT            Ausdruck
                ENDR
Oft ist es  ntzlich, einen oder mehrere Befehle zu wiederholen. 
Mit REPT ist dies durchfhrbar. Die zu wiederholenden Befehle werden 
zwischen REPT und ENDR eingegeben. Die Anzahl der Wiederholungen 
wird vom angegebenen Ausdruck bestimmt. Wenn der Ausdruck Null oder 
negativ ist, wird kein Code generiert. REPTs knnen nicht verschachtelt 
werden.

        REPT            512/4           einen Sektor kopieren
        move.l  (a0)+,(a1)+
        ENDR

Dies ist ein Beispiel, um die Wirksamkeit des REPT zu zeigen: so mu 
im Quelltext nicht 128mal die move.l Zeile stehen.
Vorsicht: Man sollte keine Labels innerhalb eines REPTs definieren, 
da es sonst zu mehrfach definierten Labels und den dazugehrigen 
Fehlermeldungen kommt.

LIST
Zustzlich zur LIST-Direktive gibt es jetzt LIST+ und LIST-. Ein 
Zhler wird bei jedem LIST+ um eins hher gesetzt und bei jedem 
LIST- um eins erniedrigt. Wenn der Zhler Null oder positiv ist, 
wird ein Listing ausgegeben; wenn der Zhler negativ ist, wird kein 
Listing erzeugt. Der normale Zhlerwert ist -1 (kein Listing), auer 
dann, wenn beim Assemblerstart ein Listing angefordert wird, wodurch 
der Zhler auf Null gesetzt wird. So haben  Sie eine flexiblere Kontrolle 
ber Listings, besonders bei Include-Dateien. LIST alleine setzt 
den Zhler auf 0, NOLIST auf -1.

SUBTTL-String
Ein "Unter"-Titel wird hiermit angegeben, er kann in Hochkommas 
("'") eingegrenzt sein. Die erste Direktive setzt den Unter-Titel 
der ersten Seite usw.

FORMAT          Parameter<,Parameter,...>
Hiermit knnen Sie das Format einer Zeile im Listing bestimmen. Jeder 
Parameter entspricht einem Feld im Listing und besteht aus einer 
Zahl von 0 bis 2, gefolgt von einem "+" (um das Feld darzustellen) 
oder "-":

        0       Zeilennummer, dezimal
        1       SECTION-Name bzw. -Zahl und PC
        2       Hex-Daten in Worten, bis zu 10 Wrter (auer, wenn 
                der Drucker breiter als 80 Zeichen ist)

Label           =               Ausdruck
Das Gleichheitszeichen kann anstatt EQU benutzt werden.

Label           REG             Registerliste
Mit der REG-Direktive knnen Sie einem Symbol eine Registerliste 
zur Verwendung mit MOVEM zuordnen. Somit wird die Gefahr verringert, 
am Anfang und am Ende einer Routine unterschiedliche Registerlisten 
zu haben. Mit REG definierte Symbole knnen ausschlielich mit MOVEM 
benutzt werden.

RSSET           Ausdruck
Mit RSSET knnen Sie dem RS-Zhler einen bestimmten Wert zuordnen.

__RS            (reserviertes Symbol)
Dieses reservierte Symbol enthlt den gegenwrtigen Wert des RS-Zhlers.

Bedingte Blcke
Bedingte Blcke knnen mit GenST2 bis zu 65535 Stufen tief verschachtelt 
werden.

IIF             Ausdruck        Instruktion
Dies ist eine Kurzform von IFNE und betrifft nur eine Zeile; ein 
ENDC sollte nicht mit IIF benutzt werden.


2.11 Makros

Makros knnen jetzt bis zu 36 Parameter haben. Die Parameter beginnen 
wie bei GenST1 mit einem Backslash ("\"). Die zulssigen Parameter-
Bezeichner sind die Zahlen 1-9 fr die ersten neun Parameter, und a-z 
oder A-Z fr die restlichen 26 Parameter. \0 behlt die gleiche 
Bedeutung wie bei GenST1.
Es gibt eine besondere Form einer Makro-Expansion. Sie knnen ein 
Symbol in eine dezimale oder hexadezimale Zahlensequenz verwandeln. 
Die Syntax ist \<Symbol> oder \$<Symbol>; das Symbol mu definiert 
und absolut sein.
Ein Makro-Aufruf kann ber mehrere Zeilen gemacht werden; dies ist 
ntzlich bei Makros mit vielen Parametern. Um als Makro erkannt zu 
werden, mu eine Zeile mit einem Komma beendet werden, das erste 
Zeichen der nchsten Zeile mu ein "&" sein, gefolgt von Leerschritt(en) 
oder Tab(s) und den weiteren Parametern.
Die Verschachtelung von Macro-Aufrufen ist nur durch den Arbeitsspeicher 
begrenzt; Rekursion ist also mglich.
Die Namen der Makros werden in einer separaten Symboltabelle gespeichert 
und knnen daher nicht mit anderen Symbolen gleichen Namens kollidieren; 
auerdem kann der Name des Makros mit einem Punkt beginnen.

Ein Beispiel mit numerischer Substitution:

vname           MACRO
                        dc.b            \1,\<version>,0
                        ENDM
                        .
                        .
version         equ             42
                        vname   <'Buchstabensuchprogramm v'>

wird expandiert zu:
                        dc.b       'Buchstabensuchprogramm' v','42',0   

Beispiel eines komplexen Makro-Aufrufs:

Nehmen wir an, da ein Programm eine komplizierte Tabellenstruktur 
hat, die eine variable Anzahl von Feldern beinhaltet. Ein Makro kann 
z.B. auch dafr geschrieben werden, da angegebene Parameter verwendet 
werden:

Tabellen_Eintrag                MACRO
                        dc.b            .end\@-*                Lngenbyte
                        dc.b            \1                      immer
                        IFNC            '\2',''
                        dc.w            \2,\3                   2. 
und 3.                                  ENDC
                        dc.l            \4,\5,\6,\7
                        IFNC            '\8',''
                        dc.b            '\8'                    text
                        ENDC
                        dc.b            \9
.end\@          dc.b            0
                        ENDM

*       Beispiel eines Aufrufs
           Tabellen_Eintrag                $42,,,t1,t2,t3,t4,
&                                          <Namen eingeben:>,%0110

Dies ist ein gutes Beispiel um zu zeigen, da Makros das Programmieren 
enorm erleichtern knnen. In diesem Fall wird mit einer Datenstruktur 
gearbeitet, die aus einem Lngenbyte (im Makro mit Hilfe von \@ 
errechnet), zwei optionalen Wrtern, vier Langwrtern, einem optionalen 
String, einem Byte, und einem Nullbyte besteht. Der Code, der aus 
diesen Beispiel resultiert, sieht so aus:

                        dc.b            .end_001
                        dc.b            $42
                        dc.l            t1,t2,t3,t4
                        dc.b            'Namen eingeben:'
                        dc.b            %0110
.end_001                dc.b            0


2.12 Ausgabedatei-Formate

GenST2 ist sehr flexibel, was Dateiformate angeht. Die verschiedenen 
Formate, die er erzeugen kann, werden hier erklrt und bewertet. 
Manche Direktiven haben auch je nach Ausgabeformat andere Wirkungen.

2.12.1 Ausfhrbare Dateien

Diese Dateien sind sofort vom Desktop aus ausfhrbar. Eine solche 
Datei kann Symbole und Relozier-Information enthalten. Die 
normalen Extensionen fr diese Art von Datei sind .PRG, .TOS, .TTP und 
.ACC.
Vorteile: Echte BSS-SECTION, Entwicklungszeit wird reduziert (da 
nicht gelinkt werden mu).
Nachteile: Wenn mehr als ein Programmierer am Projekt arbeitet, ist 
es unpraktisch.

2.12.2 GST-linkbare Dateien

Wenn Sie an einem greren Projekt arbeiten oder mehrere Programmierer 
am Projekt beteiligt sind, oder wenn Sie Maschinenspracheroutinen fr 
eine Hochsprache schreiben, werden Sie wahrscheinlich linkbare Dateien 
erzeugen wollen. Das GST-Format wird von den meisten in England 
oder auch anderswo produzierten Hochsprachensystemen untersttzt. 
Zu diesen Sprachen gehren HiSoft Basic, Lattice C, Prospero Pascal 
und Prospero Fortran. Dateien im GST-Format haben meist die Extension 
.BIN.

Vorteile: Sehr flexible Mglichkeiten: importierte Labels knnen 
fast berall verwendet werden, wie z.B. auch in Ausdrcken. Libraries 
knnen vom Assembler aus erstellt, und durch die verwendete 
Import-Methode knnen Typenkonflikte erkannt werden.

Nachteile: Aufgrund des Library-Formats kann das Linken lnger dauern, 
richtige GEMDOS-SECTIONen werden standardmig nicht untersttzt 
(obwohl LinkST eine BSS-SECTION erzeugen kann).

2.12.3 DRI-linkbare Dateien

Dies ist das Original-Linkerformat des ST und wurde ursprnglich 
von Digital Research fr CP/M-68K entwickelt. Es wird, meist durch 
Konvertierungsprogramme, vom Groteil der in den USA entwickelten 
Hochsprachensystemen untersttzt. DRI-linkbare Dateien haben meist 
die Extension .O.

Vorteile: Selektives Hinzulinken mit Libraries geht
schnell, GEMDOS-SECTIONen werden voll untersttzt.

Nachteile: Sehr groe Einschrnkungen bei importierten Labels, linkbare 
Dateien sind doppelt so gro wie ausfhrbare Dateien, und Symbole 
knnen maximal nur 8 Zeichen lang sein.

2.12.4 Das richtige Format

Wenn Sie mit einer Hochsprache zusammenarbeiten, haben Sie meistens 
keine Wahl: Sie mssen das vom Compiler untersttzte Format verwenden.
Wenn Sie ausschlielich in Assembler schreiben, werden Sie wohl das 
ausfhrbare Format benutzen: die Assemblierzeit ist gering, Linken 
fllt weg, und Sie knnen direkt in den Speicher assemblieren, um 
die Turn-around-Zeiten so klein wie mglich zu halten.
Wenn Sie ein greres Programm schreiben, womglich im Team, ist 
linkbarer Code meist am sinnvollsten. Das GST- Format ist dem DRI-Format 
weitaus berlegen und deshalb auch empfehlenswert.

2.13 Ausgabedatei-Direktiven

Hier werden die Direktiven erklrt, deren Wirkungen vom Ausgabeformat 
abhngig sind. Die Formate knnen auf verschiedene Weise gewhlt werden: 
ber die Kommandozeile bei GENST2.TTP, in der Assemblieren-Dialogbox 
bei GENST2.PRG, oder mit der OPT-L-Direktive am Anfang Ihres Programms.

2.13.1 MODULE und SECTION

MODULE  Modul-Name
Mit diesem Befehl wird der Anfang eines neuen Moduls festgelegt. 
Der Name mu in Anfhrungszeichen stehen, wenn er Leerschritte enthlt. 
Diese Direktive ist nicht unumgnglich, ein Modul namens ANON_MODULE 
wird automatisch erzeugt.

Ausfhrbar              
Diese Direktive wird ignoriert.

DRI                     
Diese Direktive wird ignoriert.

GST                     
Mit dieser Direktive knnen Sie Maschinensprache-Libraries erstellen. 
Jedes MODULE ist ein eigenstndiges Segment mit eigenen Imports und 
Exports. Relative Labels gehren jeweils zum eigenen Modul, Sie knnen 
also zwei Labels mit demselben Namen in zwei Modulen benutzen, ohne 
da sie kollidieren. Absolute Labels sind fr alle MODULE global, was  
fr Konstanten sehr ntzlich ist.

SECTION    Section-Name
Diese Direktive verursacht einen Wechsel zu der genannten Section. 
Ein Programm kann aus mehrereren Sectionen bestehen, die im endgltigen 
Programm mit gleichnamigen Sectionen zusammengefgt werden. Wenn 
nicht anders angegeben, wird Ihr Programm im TEXT SECTION assembliert. 
Sie knnen mit diesem Befehl jederzeit in eine andere Section wechseln.

Ausfhrbar      
Erlaubte Namen fr Sectionen sind TEXT (fr den Bereich, 
der das Programm enthlt), DATA (fr initialisierte Daten) und BSS, 
ein besonderer Speicherbereich, der vom GEMDOS fr Ihr Programm 
reserviert wird. Das BSS enthlt Nullen beim Programmstart und belegt 
keinen Platz auf der Diskette. Innerhalb des BSS darf nur die DS-
Direktive verwendet werden. Wenn Sie den BSS-Bereich fr globale 
Variablen benutzen, knnen Sie Platz auf der Diskette sparen.

DRI                     
Die obengenannten Regeln fr ausfhrbare Programme gelten hier auch.

GST                     
Es gibt keine Regeln fr Namen der Sectionen. Sectionen mit gleichem 
Namen in verschiedenen Modulen werden beim Linken zusammengefgt. 
Die Anordnung der Sectionen im endgltigen Programm hngt von der 
Reihenfolge ab, in der sie von Linker begegnet werden (LinkST hat 
die SECTION-Direktive, mit der die Reihenfolge zur Linkzeit festgelegt 
werden kann).

Imports und Exports
Bei beiden linkbaren Formaten ist es wichtig, Symbole importieren 
und exportieren zu knnen, was sowohl fr relative Symbole wie 
Programmlabels als auch fr absolute Symbole wie Konstanten gilt. 
Das GST-Format trifft zwischen den beiden Arten eine Unterscheidung, 
das DRI-Format dagegen nicht. Das GST-Format erlaubt dem Assembler, 
die Typen zu berprfen, um Programmierfehler zu finden, die sonst 
vielleicht bersehen worden wren.

XDEF            Export<,Export>...
Hiermit werden Labels angegeben, die fr andere Module zugnglich 
gemacht werden sollen. Wenn ein exportierter Label nicht existiert, 
erscheint eine Fehlermeldung. Es ist nicht mglich, lokale Labels 
zu exportieren.

Ausfhrbar      
Diese Direktive wird ignoriert.

DRI                     
Alle Symbole werden beim Exportieren auf 8 Zeichen Lnge gekrzt; 
es ist ratsam, OPT C8 zu verwenden.

        XREF            Import<,Import>...
        XREF.L          Import<,Import>...
Hiermit werden Labels definiert, die aus anderen Modulen importiert 
werden knnen; sie mssen dort natrlich exportiert worden sein, 
da sonst eine Fehlermeldung erscheint. Das normale XREF sollte dazu 
verwendet werden,  relative Labels zu importieren, XREF.L wird benutzt, 
um absolute Labels zu importieren. Sie knnen ein und dasselbe Label 
mehrmals importieren.

Ausfhrbar      
Diese Direktive wird ignoriert.

DRI                     
Das DRI-Format unterscheidet zwar nicht zwischen absoluten und 
relativen Imports, man sollte sie aber trotzdem angeben, 
damit der Assembler die Typenberprfung vornehmen kann. Wenn Ihre 
Imports keine Typen haben, sollten Sie OPT T- angeben. DRI-Labels 
haben eine Signifikanz von nur 8 Zeichen.

GST                     
Importieren Sie nur Labels mit dem richtigen Typ; es kann sonst sein, 
da die Relozier-Information des endgltigen Programms nicht stimmt.

Imports in Ausdrcken verwenden
Ausfhrbar      
Es gibt keine Imports.

DRI                     
Imports knnen innerhalb von Ausdrcken benutzt 
werden, allerdings nur ein Import pro Ausdruck. Das Ergebnis eines 
solchen Ausdrucks mu immer Zahl + bzw. - Import sein. Imports knnen 
auch mit beliebig komplexen Ausdrcken kombiniert werden, 
vorausgesetzt, da der komplexe Ausdruck vor dem Import angefhrt 
wird:
                move.l  3+(1<<Zhler+5)+Import

GST                     
Imports knnen innerhalb von Ausdrcken benutzt werden, maximal zehn 
pro Ausdruck. Sie drfen miteinander nur addiert oder subtrahiert 
werden, knnen aber mit beliebig komplexen Ausdrcken kombiniert 
werden, vorausgesetzt, da der komplexe Ausdruck vor dem Import 
angefhrt wird:
                move.l  3+(1<<Zhler+5)+Import1-Import2

Wo ein Ausdruck mit einem Import benutzt werden darf, hngt vom 
Dateiformat ab. Die folgende Tabelle zeigt die erlaubten Kombinationen:

Ausdruck                GST             DRI     Beispiel
PC-Byte         J               N               move.w import(pc,d3.w)
                                                bsr.s import
PC-Wort         J               J*              move.w import(pc),a0
                                                bsr import
Byte                    J               N       move.b #import,d0
Wort                    J               J       move.w import(a3),d0
Langwort                J               J       move.l import,d0

So lange das Symbol nicht in einer anderen Section des Programmes 
steht, ist dies unzulssig.

DRI & GST       
Die Benutzung eines Symbols aus einer anderen Section 
mu als Import gehandhabt werden und unterliegt den obengenannten 
Regeln.
        
COMMENT   Bemerkung
Ausfhrbar      
Diese Direktive wird ignoriert.

DRI                     
Diese Direktive wird ignoriert.

GST                     
Diese Direktive bernimmt die angegebene Bemerkung in die .BIN-Datei; 
zur Linkzeit wird die Bemerkung angezeigt.

ORG             Ausdruck
Diese Direktive lt den Assembler positionsabhngigen Code erzeugen; 
der PC wird auf den angegebenen Ausdruck gesetzt. Normalerweise brauchen 
GEMDOS-Programme kein ORG, auch wenn sie nicht positionsunabhngig 
sind; der GEMDOS-Programmlader erledigt die Relozierung des Programms. 
Die ORG-Direktive erlaubt die Erzeugung von ROM-Code oder Code, der 
fr andere 68000er Rechner gedacht ist. Es darf mehr als ein ORG 
im Programm stehen, es wird aber kein "Padding" vorgenommen.

Ausfhrbar      
Diese Direktive sollte mit hchster Vorsicht gehandhabt 
werden, da das erzeugte Programm wahrscheinlich nicht auf dem ST 
mit einem Doppelklick problemlos ausfhrbar ist. Die erzeugte Datei 
hat am Anfang den GEMDOS-Header, aber am Ende keine Relozier-Information.

DRI                     
Diese Direktive ist nicht erlaubt, die Generierung absoluten Codes 
ist Aufgabe des Linkers.

GST                     
Ein ORG wird dem Linker bergeben, der die Datei mit Nullen 
"paddet".
Vorsicht: Es ist hchst unwahrscheinlich, da diese Direktive sinnvoll 
ist, wenn in den Speicher assembliert wird.

OFFSET  <Ausdruck>
Hiermit wird die Code-Generierung in eine besondere, Assembler-interne 
Section umgeschaltet. Der Ausdruck, der nicht angegeben werden mu, 
setzt den PC dieser Section. Es werden keine Daten auf Diskette 
geschrieben, innerhalb dieser Section ist nur die DS-Direktive 
erlaubt. Labels, die innerhalb dieser Section definiert werden, 
sind absolut. Um einige Systemvariablen des ST zu definieren, 
she der Quelltext so aus:

                OFFSET  $400
etv_timer               ds.l            1               wird $400 
sein
etv_critic              ds.l            1               404
etv_term                        ds.l            1               408
ext_extra               ds.l            5               40C
memvalid                        ds.l            1               420

__LK   (reserviertes Symbol)
Dies ist ein reserviertes Symbol; es kann dazu benutzt werden zu 
erkennen, welche Code-Art erzeugt wird. Der Wert dieses Symbols ist 
immer absolut und kann einen der folgenden Werte haben:

                0       ausfhrbar
                1       GST linkbar
                2       DRI linkbar

DRI Debug
Normalerweise werden nur explizit geXDEFte Labels der Symboltabelle 
der linkbaren Datei beigefgt. Das Format erlaubt aber sog. lokale 
Labels, nicht zu verwechseln mit den lokalen Labels von GenST2, welche 
keine wahren Exports sind und deshalb nicht von anderen Modulen aus 
benutzt werden knnen. Diese Symbole werden aber der Symboltabelle 
des fertigen Programmes hinzugefgt. OPT D+ gibt alle nicht 
exportierten Labels als DRI-lokale an.

GST-Libraries schreiben
Wenn Sie eine GST-Library mit Hilfe mehrerer Module in eine Datei 
schreiben,  mssen Sie mit Rckwrts-Verweisen an Imports vorsichtig 
sein. Innerhalb einer GST-Library sollten  >>high-level<<-Routinen 
zuerst kommen, >>low-level<<-Routinen zuletzt. Das folgende Beispiel 
wrde nicht fehlerfrei linken:

                MODULE  low_level
                XDEF            low_output
low_output
                ...
                MODULE  high_level
                XDEF            high_output
                XREF            low_output
high_output
                ...
Der Grund dafr liegt darin, da das zweite Modul eine Routine aus 
dem ersten benutzt; dies ist nicht zulssig. Die fehlerfreie Version 
sieht so aus:
                MODULE  high_level
                XDEF            high_output
                XREF            low_output
high_output
                ...
                MODULE  low_level
                XDEF            low_output
low_output
                ...

Beispiele fr verschiedene Formate:

Hier folgen Beispiele, die die Unterschiede zwischen den einzelnen 
Formaten verdeutlichen.

Ausfhrbar
                SECTION TEXT
start   lea             string(pc),a0
                move.l  a0,save_str
                bsr             printstring
                bra             quit
                SECTION DATA
string  dc.b            'Ihren Namen bitte: ',0
                SECTION TEXT
printstring
                move.l  a0,-(sp)
                move.w  #9,-(sp)
                trap            #1
                addq.l  #6,sp
                rts
                SECTION BSS
save_str        ds.l            1
                END

DRI linkbar
                XREF.L  quit
                SECTION TEXT
start   move.l  #string,a0
                move.l  a0,save_str
                bsr             printstring
                bra             quit
                SECTION DATA
string  dc.b            'Ihren Namen bitte: ',0
                SECTION TEXT
printstring
                move.l  a0,-(sp)
                move.w  #9,-(sp)
                trap            #1
                addq.l  #6,sp
                rts
                SECTION BSS
save_str        ds.l            1
                END

Beachten Sie, da der erste Befehl nicht PC-relativ ist, da keine 
PC-relativen Verweise zwischen Sectionen erlaubt sind.

GST linkbar
                MODULE  TESTPROG
                COMMENT nicht vollstndig
                XREF.L  quit
                SECTION TEXT
start   lea             string(pc),a0
                move.l  a0,save_str
                bsr             printstring
                bra             quit
                SECTION DATA
string  dc.b            'Ihren Namen bitte: ',0
                SECTION TEXT
printstring
                move.l  a0,-(sp)
                move.w  #9,-(sp)
                trap            #1
                addq.l  #6,sp
                rts
                SECTION BSS
save_str        ds.l            1
                END
 
