Assembler != Assembler?

Gast #100818
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
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
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.