Assembler != Assembler?

Gast #100818
Lesenswert?

Hallo,

ich grübel gerade darüber nach, warum der avr-asm folgenden Code nicht
übersetzen kann, obwohl die Befehle in jeder Assemblerreferenz
aufgelistet sind.
Würde mich freuen, wenn mir jemand mal einen Hint geben könnte, was
hier falsch läuft. Danke!


;***** Specify Device
.device AT90S1200

;***** I/O Register Definitions
.equ  SREG  =$3f
.equ  GIMSK  =$3b
.equ  TIMSK  =$39

Das sagt mir der Assembler dazu:
avr-gcc -mmcu=at90s1200 -I. -g   -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=avr910.s  -std=gnu99
-Wp,-M,-MP,-MT,avr910.o,-MF,.dep/avr910.elf.d  avr910.s  --output
avr910.elf -Wl,-Map=avr910.map,--cref    -lm
1200def.inc: Assembler messages:
1200def.inc:38: Error: unknown pseudo-op: `.device'
1200def.inc:41: Error: expected comma after "SREG"
1200def.inc:41: Warning: rest of line ignored; first ignored character
is `='
1200def.inc:41: Warning: rest of line ignored; first ignored character
is `3'
1200def.inc:42: Error: expected comma after "GIMSK"
1200def.inc:42: Warning: rest of line ignored; first ignored character
is `='
1200def.inc:42: Warning: rest of line ignored; first ignored character
is `3'
1200def.inc:43: Error: expected comma after "TIMSK"
1200def.inc:43: Warning: rest of line ignored; first ignored character
is `='
1200def.inc:43: Warning: rest of line ignored; first ignored character
is `3'
1200def.inc:44: Error: expected comma after "TIFR"
1200def.inc:44: Warning: rest of line ignored; first ignored character
is `='
1200def.inc:44: Warning: rest of line ignored; first ignored character
is `3'
1200def.inc:45: Error: expected comma after "MCUCR"
1200def.inc:45: Warning: rest of line ignored; first ignored character
is `='
1200def.inc:45: Warning: rest of line ignored; first ignored character
is `3'
Gast #100819
Lesenswert?

In jeder Befehlsreferenz eben nicht, sondern nur in der des
Atmel-Assemblers.

Der gas (GNU assembler) hat eine andere Pseudobefehlssyntax (nämlich
eine Unix-typische).  Die hat er übrigens völlig unabhängig vom
Prozessor, also auch unter Unix/i386 sieht ein Assemblerprogramm um
einiges anders aus als z. B. unter DOS/Windows.

Die AVR-Befehle selbst sind dabei allerdings gleich.
Gast #100821
Lesenswert?

Vorsicht, Präprozessor ist was anderes als Pseudo-Ops.

In der Tat läßt man beim GCC in der Regel auch die Assemblerfiles
durch den Präprozessor laufen.  Damit werden dann Dinge wie #include
<avr/io.h>, #define usw. abgehandelt.  Der standardmäßige Suffix für
Assemblerfiles, die durch den Präprozessor gehen sollen, ist .S (ein
großes S).  Assembliert werden sie dann durch Aufruf des Compilers (!
-- nicht des Assemblers).

Die Pseudo-Ops sind bei der GNU Assembler Doku (Info-Files, TkInfo
benutzen) beschrieben.  Leider sind die AVR-spezifischen Operatoren
(insbesondere lo8 und hi8) nirgends dokumentiert worden. :-(

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren