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?
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).
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.)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.