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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren