Hi, ich versuche gerade mich mit den AVRs zu befassen, spezell mit der Assemblerprogrammierung. Da bin ich in diser Doku http://www.avr-asm-tutorial.net/avr_de/beginner/index.html auf folgende Aussage gestossen: " Schlaumeier würden das obige Programm vielleicht eher so schreiben: .DEF NochEinRegister = R15 LDI NochEinRegister, 150 Und sind reingefallen: Nur die Register R16 bis R31 lassen sich hurtig mit einer Konstante laden, die Register R0 bis R15 nicht! Diese Einschränkung ist ärgerlich, ließ sich aber bei der Konstruktion der Assemblersprache für die AVRs wohl kaum vermeiden." Heisst das, dass man die Retister R0-R15 am besten nicht benutzen sollte?
Steht doch am Ende: 1. Register immer mit der .DEF-Anweisung festlegen, nie direkt verwenden. 2. Werden Pointer-Register für RAM u.a. benötigt, R26 bis R31 dafür reservieren. 3. 16-Bit-Zähler oder ähnliches realisiert man am besten in R24/R25. 4. Soll aus dem Programmspeicher gelesen werden, Z (R30/31) und R0 dafür reservieren. 5. Werden oft konstante Werte oder Zugriffe auf einzelne Bits in einem Register verwendet, dann die Register R16 bis R23 dafür vorzugsweise reservieren. 6. Für alle anderen Anwendungsfälle vorzugsweise R1 bis R15 verwenden.
Warum solltest Du die Register R0-R15 nicht benutzen ? Sie lassen sich halt nicht mit einer Konstanten laden. "LDI R5, 200" geht nicht, müsstest dann bspw. LDI R16, 200 MOV R5, R20 schreiben. Einige Befehle sind auch nur für Register R16-R31 nutzbar, wie z.B. SBR. Einfach rumexperimentieren, irgendwann hast Du das im Griff. Lg EC
Steht doch alles auf der verlinkten Seite! Ist zwar teilweise fehlerhaft (nen Befehl 'I' gibts nicht, müsste in dem Zusammenhang vermutlich 'SUBI' heißen...), aber die benötigten Infos sind da alle zusammengefasst.
meine Frage ist, steht das auch in einem offizielen Dokument von Atmel oder muss man sich das Wissen zusammensuchen? Ich habe mal auf deren Homepage geschaut, fand aber nichts, in den Datenblättern z.B. ATmegas steht auch nicht viel drin.
Z.B. im Instruction Set Manual steht drin, welche Befehle mit welchen Registern zusammenarbeiten.
Insofern Du das AVR-Studio installiert hast, gehe mal oben auf den "HELP"-Reiter und dann auf "ASSEMBLERHELP". Dort kannst Du Dir die Befehle anschauen und bekommst ALLE Informationen dazu. Schau doch einfach mal bei LDI nach..... LG EC
>Ich habe mal auf deren Homepage geschaut, fand aber nichts, in den >Datenblättern z.B. ATmegas steht auch nicht viel drin. Wieso? War ganz schnell zu finden. AVR Assembler User Guide (26 pages, updated 1/98): http://www.atmel.com/dyn/resources/prod_documents/DOC1022.PDF
Da steht die benötigte Information aber auch nicht drin. Das was der Thread Opener sucht ist entweder (wie schon oben angemerkt) in der Hilfe von AVRStudio oder im Instruction Set Manual zu finden: http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf
Ein gutes Beispiel für die niedrigen 16 Register ist eine schnelle SREG Sicherung. Dafür brauch man garantiert keines der oberen Register! Das wäre Verschwendung.
Mit den Registern 0..15 kann man im Prinzip alles machen, nur eben keine Operationen mit Immediate-Werten (also Konstanten)
Es gibt eine vollständige Befehlssatzbeschreibung, das sind weit mehr als 26 Seiten.
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.