Forum: Mikrocontroller und Digitale Elektronik R0-R15 Register bei AVR


von Andy (Gast)


Lesenswert?

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?

von Fritze (Gast)


Lesenswert?

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.

von ecslowhand (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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.

von Andy (Gast)


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

Z.B. im Instruction Set Manual steht drin, welche Befehle mit welchen
Registern zusammenarbeiten.

von ecslowhand (Gast)


Lesenswert?

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

von Fritze (Gast)


Lesenswert?

>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

von johnny.m (Gast)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

Mit den Registern 0..15 kann man im Prinzip alles machen, nur eben
keine Operationen mit Immediate-Werten (also Konstanten)

von A.K. (Gast)


Lesenswert?

Es gibt eine vollständige Befehlssatzbeschreibung, das sind weit mehr
als 26 Seiten.

von johnny.m (Gast)


Lesenswert?

Richtig, und genau das ist das Instruction Set Manual!

von Andy (Gast)


Lesenswert?

danke Jungs, das ist aber wirkliche eine schnelle Hilfe

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
Noch kein Account? Hier anmelden.