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?
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.
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.
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 :-)
> 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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.