www.mikrocontroller.net

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


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Fritze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ecslowhand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

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

Autor: ecslowhand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fritze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig, und genau das ist das Instruction Set Manual!

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke Jungs, das ist aber wirkliche eine schnelle Hilfe

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.