Nächste Seite: Ausdrücke
Aufwärts: Der M2Amiga-Assembler
Vorherige Seite: Der M2Amiga-Assembler
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:
- 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)
...
Nächste Seite: Ausdrücke
Aufwärts: Der M2Amiga-Assembler
Vorherige Seite: Der M2Amiga-Assembler
Claudio Nieder
2000-11-12