Forum: Mikrocontroller und Digitale Elektronik Linksrotation, Frage zu den Statusbits


von PC-Anfaenger (Gast)


Lesenswert?

Atmega8, AVRStudio 4, Simulator2

Ich habe mit der Rechtsrotation lsr "gespielt" und dabei die Register 
und die Statusbits beobachtet

.include "m8def.inc"

  ldi r17, 0b11001100
  out PORTB, r17
lsr_:  lsr r17
  out PORTB, r17
rjmp lsr_


Wird ein Bit mit dem Wert 0 verschoben und "verschwindet", dann wird 
keines der Statusbits gesetzt. War der Wert des letzten Bits jedoch 1, 
dann werden die Statusbits S, V und C gesetzt. Wurde das Bit7 (also das 
letzte) verschoben, dann leuchtet auch das Bit Z auf.

Meine Frage - Das Flag Z scheint wohl aufzuleuchten, wenn 8mal nach 
rechts geschoben wurde. Angenommen, ich mache eine Rechtsrotation, mache 
was anderes zwischen drinnen - und etwas später erneut eine 
Rechtsrotation - merkt sich der uC irgendwo, wann das ganze Bit 
verschoben wurde, um dann das Flag Z zu setzen?

von Karl H. (kbuchegg)


Lesenswert?

Für solche Fragen gibt es immer Doku.

In deinem Fall ist es die INstruction Set Doku.

Du hast sie sogar schon auf deinem Rechner. Drück im AVR-Studio F1, wenn 
sich der Cursor über einem Befehl befindet, und die Hilfe sucht dir dir 
Doku dazu raus.
Und in der Doku steht genau, welches Bit wie beeinflusst wird.

von PC-Anfaenger (Gast)


Lesenswert?

Oder leuchtet das Flag Z vielleicht nur dann auf, wenn eine Rotation 
erfolgte und das ganze Byte danach den Wert 0 hat? Weil eben hab ich 
probiert, dass nur der Wert 0b00000001 verschoben wurde und dann hat 
danach das Z auch aufgeleuchtet, wo dann alle Null waren.

von PC-Anfaenger (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Drück im AVR-Studio F1, wenn
> sich der Cursor über einem Befehl befindet

Cool, dass hab ich garnicht gewusst - vielen Dank für den Hinweis mit 
der Doku :-)

von Karl H. (kbuchegg)


Lesenswert?

> merkt sich der uC irgendwo, wann das ganze Bit
> verschoben wurde, um dann das Flag Z zu setzen?

Bei JEDEM Befehl werden die Statusregisterflags getreu der Doku 
verändert.

Veränderungen können sein
* gar nicht. D.h. der Befehl beeinflusst ein bestimmtes Flag überhaupt
  nicht
* das Flag wird anhand irgendwelcher Regeln gesetzt
* das Flag wird anhand irgendwelcher Regeln gelöscht

Welche der Möglichkeiten bei welchem Flag und welchem Befehl zutrifft, 
findest du in der Doku. Es gibt da zwar für Befehls'familien' sowas wie 
generelle Schemata, aber im Zweifel musst du bei jedem Befehl nachsehen, 
wie das wirklich ist.

von spess53 (Gast)


Lesenswert?

Hi

>Oder leuchtet das Flag Z vielleicht nur dann auf, wenn eine Rotation
>erfolgte und das ganze Byte danach den Wert 0 hat?

Bingo. Z wie Zero.

>Ich habe mit der Rechtsrotation lsr "gespielt" und dabei die Register
>und die Statusbits beobachtet

LSR ist Left Shift. Rotieren wird mit ROR gemacht.

>Wird ein Bit mit dem Wert 0 verschoben und "verschwindet", dann wird
>keines der Statusbits gesetzt.War der Wert des letzten Bits jedoch 1,
dann werden die Statusbits S, V und C gesetzt.

Das Bit0 befindet sich nach dem Shift im Carry-Flag. Da vom Carry-Flag 
andere Flags abhängig sind kann es passieren das mehrere Flags gesetzt 
oder gelöscht werden.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Bei JEDEM Befehl werden die Statusregisterflags getreu der Doku
>verändert.

Getreu der Doku heisst aber auch, das bestimmte Befehle die Flags nicht 
beeinflussen.

MfG Spess

von PC-Anfaenger (Gast)


Lesenswert?

spess53 schrieb:
> LSR ist Left Shift. Rotieren wird mit ROR gemacht.

stimmt, danke für den Hinweis auch mit dem ROR und dass "shift" schieben 
heisst und nicht rotieren...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.