Redundanz im AVR-Assembler?

OP #324061
Lesenswert?
• ▲
▼
Programmiere nur in C, aber werfe hin und wieder auch mal ein Blick in
den Assembler Befehlssatz.
Was ich schon immer mal nachfragen wollte:
Was ist eigentlich der Unterschied zwischen den Befehlen >BCLR 0< und
>CLC<
Oder zwischen den Befehlen >BCLR 5< und >CLH< usw. usf.
Beide sind 1 Wort lang und werden in einem Maschinenzyklus
abgearbeitet.
Wozu also diese 2 verschiedene Befehle, die (meiner Meinung nach)
dasselbe tun?
Auch bei anderen Befehlen hatte ich den Eindruck, als waere da eine
Redundanz. Dank im voraus für die Aufklaerung.

MfG
Gast #324062
Lesenswert?
• ▲
▼
Die Befehle zur Manipulation einzelner Flags sind lediglich Kurzformen,
die die Lesbarkeit des Assembler-Codes verbessern. Wenn Du Dir den Hex-
bzw. Binär-Code für die Befehle anschaust (im Instruction Set Manual),
wirst Du feststellen, dass die Befehle in der Tat identisch sind. In
Deinem Beispiel: BCLR ist binär mit '1001 0100 1sss 1000' definiert,
wobei 'sss' die Nummer des Bits im SREG ist. Soll das Carry-Flag (Bit
Nr. 0) gelöscht werden, lautet der Befehl '1001 0100 1000 1000' oder
9488h. Für CLC ist exakt der selbe Opcode definiert, es ist aber auf
den ersten Blick zu erkennen, was der Befehl macht, im Unterschied zu
BCLR 0. Wenn Du den Assembler-Befehlssatz durchgehst, wirst Du noch
andere Beispiele finden, bei denen das ähnlich gemacht wird. Die
Befehle SBR und CBR sind z.B. identisch mit ANDI bzw. ORI.

Gruß und frohe Ostern

Johnny
Gast #324063
Lesenswert?
• ▲
▼
Upps, hab grad gesehen, dass ich beim Tippen die Reihenfolge vertauscht
hab. Nicht dass es zu Missverständissen kommt: CBR entspricht ANDI mit
dem Komplement des Operanden und SBR entspricht ORI.

Gruß

Johnny
Gast #324064
Lesenswert?
• ▲
▼
Es gibt noch einige andere Befehle mit identischem Opcode. Als Beispiele
könnte man noch nennen:

   lsl rXX   =  add rXX, rXX
   rol rXX   =  adc rXX, rXX
   tst rXX   =  and rXX, rXX
   clr rXX   =  eor rXX, rXX

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.