Forum: Projekte & Code 2 Register vertauschen (AVR Assembler)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Andreas S. (andreas) (Admin) Benutzerseite Flattr this


Lesenswert?

Wenn die Register knapp werden und man 2 Register vertauschen muss, kann 
man sich den Umweg über ein 3. Register als Zwischenspeicher sparen:

1. Möglichkeit: Stack
Unpraktisch, da pop und push jeweils 2 Takte brauchen.

push R1
push R2
pop R1
pop R2

2. Möglichkeit: XOR
Besser, eor benötigt nur 1 Takt.

eor R1, R2
eor R2, R1
eor R1, R2

von Koopmeiners, Bernhard (Gast)


Lesenswert?

zu 2. Möglichkeit:

Hallo Andreas,

sogar mein EDV-Prof ( Prof. Kanne Bochum ) kannte keine bessere Lösung.
Einfach genial. Genial einfach.

Bernhard

von Peter D. (peda)


Lesenswert?

Jeder Prozessor hat so seine eigenen Tricks.

Beim 8051 geht das z.B. so:

xch a, r0
xch a, r1
xch a, r0

Damit sind R0 und R1 vertauscht und ACC unverändert.

Vorteil beim 8051: Das geht nicht nur mit den 32 Registern sondern mit 
allen 128 Bytes im RAM:

xch a, 055h
xch a, 077h
xch a, 055h


Peter

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]
  • [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.