next up previous
Nächste Seite: Ausdrücke Aufwärts: Der M2Amiga-Assembler Vorherige Seite: Der M2Amiga-Assembler

Die Syntax

Im Assembler wird Gross-/Kleinschreibung unterschieden, d.h. alle Mnemonics und Registerbezeichnungen müssen gross geschrieben werden! Dies mag zu Beginn etwas störend wirken, aber man gewöhnt sich schnell daran. Immerhin ist dies kein normaler Assembler, sondern ein Teil eines -Compilers!

Im Pseudomodul SYSTEM (siehe 5.3) existiert der Standardbezeichner ASSEMBLE, welcher an die Stelle des früher existierenden INLINE tritt. Der Aufruf des Assemblers geschieht als Standardprozedur auf folgende Weise:

"ASSEMBLE" "(" {befehl} "END" ")".

Durch diese Anweisung betritt man einen von völlig verschiedenen Syntax-Raum. Die Liste der reservierten Worte ist weit grösser und gänzlich verschieden von derjenigen in (siehe Tabellen 2.6 und 2.7). Diese Bezeichner überlagern die Namen aus dem -Raum, als wäre ASSEMBLE eine lokale Prozedur. Ist z.B. im aktuellen Sichtbarkeitsbereich eine Konstante ,,MOVE`` deklariert, so hat man im Assembler darauf keinen Zugriff!

Einige ,,Laxheiten`` und Besonderheiten bestehen in der Abweichung von der Motorola-Syntax: statt MOVEA darf MOVE geschrieben werden. Analog darf CMPA und CMPI durch CMP, SUBA und SUBI durch SUB, sowie ADDA und ADDI durch ADD ersetzt werden. Zusätzlich erkennt er bei den Condition Codes des 68000 HS als CC und LO als CS an. So sind die Instruktionen BHS Label und BCC Label also gleichwertig. Schliesslich sind A4 und SB2.18, A5 und MP2.19, A7 und SP2.20 synonym.


Tabelle 2.6: Reservierte Worte des Assemblers (A-J)
5pt
A0 BLE DBCS FATANH FDBEQ FGETMAN FSGT FTRAPF
A1 BLO DBEQ FBEQ FDBF FINT FSIN FTRAPGE
A2 BLS DBF FBF FDBGE FINTRZ FSINCOS FTRAPGL
A3 BLT DBGE FBGE FDBGL FLOG10 FSINH FTRAPGLE
A4 BMI DBGT FBGL FDBGLE FLOG2 FSLE FTRAPGT
A5 BNE DBHI FBGLE FDBGT FLOGN FSLT FTRAPLE
A6 BPL DBHS FBGT FDBLE FLOGNP1 FSNE FTRAPLT
A7 BRA DBLE FBLE FDBLT FMOD FSNGE FTRAPNE
ABCD BSET DBLO FBLT FDBNE FMOVE FSNGL FTRAPNGE
ADD BSR DBLS FBNE FDBNGE FMOVECR FSNGLE FTRAPNGL
ADDA BTST DBLT FBNGE FDBNGL FMOVEM FSNGT FTRAPNGLE
ADDI BVC DBMI FBNGL FDBNGLE FMUL FSNLE FTRAPNGT
ADDQ BVS DBNE FBNGLE FDBNGT FNEG FSNLT FTRAPNLE
ADDX CAAR DBPL FBNGT FDBNLE FNOP FSOGE FTRAPNLT
AND CACR DBRA FBNLE FDBNLT FP0 FSOGL FTRAPOGE
ANDI CAS DBT FBNLT FDBOGE FP1 FSOGT FTRAPOGL
ASL CAS2 DBVC FBOGE FDBOGL FP2 FSOLE FTRAPOGT
ASR CCR DBVS FBOGL FDBOGT FP3 FSOLT FTRAPOLE
BCC CHK DC FBOGT FDBOLE FP4 FSOR FTRAPOLT
BCHG CHK2 DFC FBOLE FDBOLT FP5 FSQRT FTRAPOR
BCLR CLR DIVS FBOLT FDBOR FP6 FSSEQ FTRAPSEQ
BCS CMP DIVSL FBOR FDBSEQ FP7 FSSF FTRAPSF
BEQ CMP2 DIVU FBSEQ FDBSF FPCR FSSNE FTRAPSNE
BFCHG CMPA DIVUL FBSF FDBSNE FPIAR FSST FTRAPST
BFCLR CMPI END FBSNE FDBST FPSR FST FTRAPT
BFEXTS CMPM EOR FBST FDBT FREM FSUB FTRAPUEQ
BFEXTU CRP EORI FBT FDBUEQ FRESTORE FSUEQ FTRAPUGE
BFFFO D0 EVEN FBUEQ FDBUGE FSAVE FSUGE FTRAPUGT
BFINS D1 EXG FBUGE FDBUGT FSCALE FSUGT FTRAPULE
BFSET D2 EXT FBUGT FDBULE FSEQ FSULE FTRAPULT
BFTST D3 EXTB FBULE FDBULT FSF FSULT FTRAPUN
BGE D4 FABS FBULT FDBUN FSGE FSUN FTST
BGT D5 FACOS FBUN FDIV FSGL FTAN FTWOTOX
BHI D6 FADD FCMP FETOX FSGLDIV FTANH ILLEGAL
BHS D7 FASIN FCOS FETOXM1 FSGLE FTENTOX ISP
BKPT DBCC FATAN FCOSH FGETEXP FSGLMUL FTRAPEQ JMP



Tabelle 2.7: Reservierte Worte des Assemblers (J-Z)
JSR MULS PLOADR RTE SLE SUBI TRAPGT TST
LEA MULU PLOADW RTR SLO SUBQ TRAPHI TT0
LINK NBCD PMOVE RTS SLS SUBX TRAPHS TT1
LSL NEG PMOVEFD SB SLT SVC TRAPLE UNLK
LSR NEGX PSR SBCD SMI SVS TRAPLO UNPK
MOVE NOP PTESTR SCC SNE SWAP TRAPLS USP
MOVEA NOT PTESTW SCS SP TAS TRAPLT VBR
MOVEC OR RELOCATION SEQ SPL TC TRAPMI XREF
MOVEM ORI RESET SF SR TRAP TRAPNE ZPC
MOVEP PACK ROL SFC SRP TRAPCC TRAPPL
MOVEQ PC ROR SGE ST TRAPCS TRAPT
MOVES PEA ROXL SGT STOP TRAPEQ TRAPV
MP PFLUSH ROXR SHI SUB TRAPF TRAPVC
MSP PFLUSHA RTD SHS SUBA TRAPGE TRAPVS


Als ,,befehl`` sind alle 68030- oder 68881/68882-Befehle, einer der unten beschriebenen Pseudo-Befehle oder ein Label erlaubt.

Ein Label
ist ein unbekannter Bezeichner, direkt gefolgt von einem Doppelpunkt. Unbekannt bedeutet, dass es sich nicht um ein reserviertes Wort oder einen Bezeichner aus dem -Raum handeln darf. Die reservierten Worte von sind hier unbekannt, bis auf END, welches im Assembler ebenfalls definiert ist. Ein Label hat nur Gültigkeit innerhalb des aktuellen Assembler-Teils, lässt sich also weder von noch von einem anderen Assembler-Abschnitt ansprechen.2.21

Definierte Label dürfen in Ausdrücken vorkommen, undefinierte Label hingegen nicht. Jeder unbekannte Bezeichner -- beispielsweise auch jeder Schreibfehler -- wird zunächst als Label angenommen, das innerhalb des Textes noch definiert werden muss. Dies führt leider unter bestimmten Umständen zu verwirrenden Fehlermeldungen. Ein Beispiel: In der Instruktion

,,MOVE.L #2000,d0``
wird ,,d0`` als undefiniertes Label erkannt, da es fälschlicherweise klein geschrieben wurde. Da die Adressierungsart aber absolut, und nicht -- wie es einem Label gebührt -- PC-relativ ist, erscheint die Fehlermeldung ,,Relokation nicht eingeschaltet``. Am Ende des Textes kommt zusätzlich der Fehler ,,Label nicht definiert: d0``.

Ein Pseudo-Befehl
ist eines der folgenden Mnemonics:
\begin{ttscript}{RELOCATION}
\item[{END}] beendet den Assembler-Text, danach mu...
...ilt. Es wird allerdings
kein Null-Byte am Ende angef\uml {u}gt!
\end{ttscript}
Opcodes
werden ganz normal der Prozessor-Syntax entsprechend geschrieben, im Gegensatz zu vielen anderen Assemblern aber ausschliesslich in Grossbuchstaben.

Das Zeilenende
hat für den Assembler wie auch in keine besondere Bedeutung. Eine Trennung der Befehle durch den Beginn einer neuen Zeile ist nicht nötig, auch ein Semikolon hat hier nichts zu suchen! Ein ganzer Assembler-Text kann also durchaus in eine einzige Zeile geschrieben werden.

Bei der Fehleranzeige im Editor oder mit dem Fehlerlister steht der Cursor meist am Beginn des nächsten Befehls, wobei sich die tatsächliche Fehlerposition im vorigen Befehl befindet. Andererseits kann sich eine einzige Assembler-Anweisung über beliebig viele Zeilen erstrecken; dies fördert gewiss nicht die Lesbarkeit, ist aber unter anderem bei Daten (DC.x) sehr nützlich.

Kommentare
werden wie in angegeben, also durch ,,(*`` und ,,*)``, wobei hier wie sonst auch Compiler-Optionen angegeben werden können. Kommentare werden also keinesfalls durch ein Semikolon eingeleitet, wie sonst bei Assemblern üblich.

Modula-2-Bezeichner
werden je nach Art des Importes qualifiziert oder unqualifiziert angegeben, genau wie in :
  IMPORT Terminal;
  FROM Terminal IMPORT waitCloseGadget;
  ...
    JSR    Terminal.Write(PC)
    TST.B  waitCloseGadget(A4)
  ...


next up previous
Nächste Seite: Ausdrücke Aufwärts: Der M2Amiga-Assembler Vorherige Seite: Der M2Amiga-Assembler
Claudio Nieder 2000-11-12