mikrocontroller.net

Forum: Compiler & IDEs Unterschied zwischen Atmel-Assembler und AVR-GCC-Assembler


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ist es möglich, dass es Unterschiede in der Syntax des Assemblers von 
AVR-GCC im Vergleich zum Assembler von Atmel gibt?

Konkret handelt es sich bei meinem Problem um den Befehl ADIW (Add 
Immediate to Word)

Das "AVR Instruction Set" von Atmel gibt dazu folgendes Beispiel an:

Example:
adiw r25:24,1 ; Add 1 to r25:r24
adiw ZH:ZL,63 ; Add 63 to the Z-pointer(r31:r30)

Genau das funktioniert aber im Inline-Assembler von AVR-GCC nicht!
Der möchte NUR EIN Register angegeben bekommen, sodass es heissen muss:

adiw r24,1

Ist das korrekt so? Handelt es sich tatsächlich um einen Unterschied in 
der Syntax?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, diese Doppelregistersyntax kennt der gas nicht.  Es ist ja aus
dem Befehlscode klar, dass er nur auf ein Doppelregister anwendbar
ist (und dann auch wieder nur auf ein paar ganz bestimmte).

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für diese klare Antwort.

Es stimmt, diese Syntax ist eigentlich logischer als diejenige des 
Atmel-Assemblers.

Ich nehme an, dass sich das bei den anderen Befehl für Register-Paare 
gleich verhält (MOVW,SBIW)?

Gibt es noch weitere Unterschiede zwischen dem GCC-Assembler und dem 
Atmel-Assembler?

Ist die Syntax des GCC-Assemblers irgendwo genau dokumentiert? (Bisher 
habe ich für den einfach das AVR Instruction Set von Atmel verwendet, 
aber das scheint ja offenbar nicht die beste Idee zu sein.)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias wrote:

> Gibt es noch weitere Unterschiede zwischen dem GCC-Assembler und dem
> Atmel-Assembler?

Ja, vor allem die Pseudo-Ops sind komplett andere, da diese im gas
unabhängig von der Architektur implementiert sind.  Der gas ist hier
eher in der Linie der typischen Unix-Assembler, die er ja ersetzen
können will.

> Ist die Syntax des GCC-Assemblers irgendwo genau dokumentiert?

Der gas ist in sogenannten info-Dokumenten ganz gut dokumentiert,
aber das betrifft nur den reinen Assembler.  Die CPU-Befehle selbst
werden normalerweise 1:1 so implementiert, wie sie der CPU-Hersteller
benutzt und sind nicht in der gas-Doku enthalten.  Ich glaube aber,
dass die Sache mit den nicht implementierten Doppelregistern hier
der einzige Unterschied ist.  Die unterschiedlichen Pseudo-Ops
machen einem dagegen beim Portieren von Code, der für den Atmel-
Assembler geschrieben ist, mehr Kopfschmerzen bzw. Fleißarbeit.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.