Forum: Compiler & IDEs Assembler != Assembler?


von Marcus M. (Gast)


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'

von Jörg Wunsch (Gast)


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.

von Marcus M. (Gast)


Lesenswert?

Hallo Jörg,

Danke ich begebe mich dann mal auf die Suche nach den
Präprozessordirektiven.
Ich hab bisher Assembler nur im Zusammenhang mit Atmel und 8085er
gesehen.

Danke

Marcus

von Jörg Wunsch (Gast)


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. :-(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.