Unterschied zwischen Atmel-Assembler und AVR-GCC-Assembler

Gast #649282
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?
Gast #649333
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.)
Moderator Persönliche Seite #649353
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

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.

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.