Assembler R0 bis R15

stinakovits

Mitglied
22. Apr. 2013
90
6
8
Kottingbrunn
Sprachen
  1. Assembler
Hallo zusammen,

bin auf der Suche nach Speicher. :D

Ne, im Ernst. Meine Frage an euch, die ich mir nur widersprüchlich ergoogeln konnte, kann man die Register R0 bis R15 uneingeschränkt für eigene Zwecke verwenden?
Mir ist bekannt, dass R0 von LPM verwendet wird und einige Instruktionen nicht mit diesen Registern zusammen arbeiten. Gibt es sonst noch Gründe diese Register, oder einige davon, nicht für eigene Zwecke zu verwenden?

Gruß
Manfred
 
Hallo,
Gibt es sonst noch Gründe diese Register, oder einige davon, nicht für eigene Zwecke zu verwenden?

nein, es gibt keine Gründe, diese Register nicht zu verwenden. Das Ergebnis von mul (8x8->16) wird zum Beispiel in r1, r0 ausgegeben.
Es spricht ja auch nichts dagegen r0 für irgendwas zu verwenden, du musst eben nur darauf achten, dass du zum Beispiel nicht durch lpm oder elpm irgendwas in r0 überschreibst, was du vielleicht später noch benötigst.

Nur als Hinweis: r0 bis r15 sind nicht bitadressierbar und immediate Adressierung (ldi) funktioniert hier nicht.

Dirk :ciao:
 
Hi,

die ersten Programme hab ich komplett in den Registern ablaufen lassen. Das wird dann gegenüber Daten im SRAM nochmal ne ganze Ecke schneller weil dieses dauernde Speichern und Zurückholen der Daten in die Arbeitsregister wegfällt.

Gruß
Dino
 
Wie schon gesagt, hast Du (zumindest unter Assembler) vollen Zugriff auf die Register. Natürlich nur dann, wenn die gewünschte Anweisung auf das/die jeweilige/n Register anwendbar ist (zB LDI usw).

zu LPM: R0 muß da nicht immer das Ziel sein - generell Kann LPM den Inhalt einer durch Z adressierten Flash-Adresse (Byte!) in jedes Register schreiben - Ausnahme: eines der Z-Register selbst... da ist das Ergebnis dann "undefined". Wird kein Ziel angegeben, gilt R0. Außerdem gibt es noch eine LPM-Variante mit post-increment (des Z-Registers). Welche der 3 Varianten der jeweilige Controller unterstützt, ist in dessen Datenblatt nachzulesen.

Außerdem gibt es auch Operationen, die nur auf die zusammengefaßten 16bit-Register anwendbar sind.

Zur Ursache Deiner wiedersprüchlichen Suchresultate: Du bist vielleicht von Hochsprachen ausgegangen? Zumindest unter Bascom sollte man davon ausgehen können, daß Bascom für seine Instruktionen die benötigten Variablen aus dem SRAM bzw den IO-Registern lädt, die entsprechenden (Maschienencode/ASM) Operationen ausführt, und die Ergebnisse zurückschreibt. Zwischen 2 Bascom-Operationen stehen Dir die Register also zur Verfügung, ABER einige Register werden von Bascom zur Ablage irgendwelcher wichtigen Werte verwendet - wenn Du die Register also auch brauchst, muß der Inhalt gesichert und wiederhergestellt werden. Problematisch kann das werden, wenn da ein Interrupt dazwischengeht, welcher von Bascom behandelt weden kann (also die entsprechenden "Werte" in den Registern braucht). Welche Register das sind, kann man in der Hilfe "mixing ASM und Bascom" oder so ähnlich nachlesen. Irgendwo findet sich hier auch noch ein Thread dazu.
Wie sich das ganze unter C verhält, kann ich nicht sagen - aber unter ASM bestimmst Du.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)