Hi, für eine Statusabfrage möchte ich folgendes realisieren. bei jedem Aufruf des Programms soll ein Bit0 im Register (status) seinen Wert ändern. d.h. 1. Programmaufruf: 0x00000000 2. Programmaufruf: 0x00000001 3. Programmaufruf: 0x00000000 ... Eigentlich recht simpel, leider konnte ich keinen passenden Befehl finden und auch die Suche ergab keine Treffer. Software: Assembler Hardware: ATmega8515 Gruß Julien
temp ist ein beliebiges Register, togglebit das zu toggelnde: ldi temp, 1 eor togglebit, temp
hi, jo hast recht, es ist so einfach wenn man darauf kommt. :) Danke es funktioniert.
Und wenn Du Dich fragst, ob es vielleicht auch ohne "temp"-Hilfsregister geht: Ja, und zwar so: inc togglebit andi togglebit, 1 Aber geht es auch ohne "temp" und ohne "1"-Konstante? Wieder ja! Auch so kannst Du immer zwischen 0 und 1 hin- und herschalten: dec togglebit neg togglebit Zwischen den beiden obigen Sequenzen gibt es jedoch einen theoretischen Unterschied. Falls togglebit bei Eintritt in die dec-neg-Sequenz weder den Wert 0 noch den Wert 1 hat, dann hat es am Schluß einen Wert, der ebenfalls weder 0 noch 1 ist (Beispiel: bei 73 rein kommt -72 raus). Die dec-neg-Sequenz verhält sich also "Garbage-In-Garbage-Out"-mäßig. Die inc-andi-Sequenz ist dagegen "gutmütig": Am Ende steht in togglebit stets entweder 0 oder 1, auch wenn togglebit vorher gleich 29 war.
Allerdings stellt sich mir die Frage, ob all die lösungen noch funktionieren wenn die restlichen Bits dieses Status-Registers auch schon einen Wert angenommen haben. Bsp. Statusregister 0x01001101 Bit 0 soll hierbei das Togglebit sein. Hinweis: Die Bits 1-7 können durch andere Unterprogramme gesetzt bzw. gelöscht werden. Ich denke man benötigt dafür eine Art Maske, die man über dieses Register legt. Gruß Julien
Die EOR BitX Variante funktioniert auch dann. Wenn Du ein anderes Bit als Bit 0 oder mehrere toggeln willst, machst Du hinter dem EOR für jedes zu toggelnde Bit eine 1 in die Bitmaske, also EOR 0b00100011 es toggeln Bit 0, 1 und 5.
>Allerdings stellt sich mir die Frage, ob all die lösungen noch >funktionieren wenn die restlichen Bits dieses Status-Registers auch >schon einen Wert angenommen haben. Die Frage habe ich eigentlich schon beantwortet: Nein, in diesem Fall funktionieren meine Lösungen nicht. Für die Anforderung "ein oder mehrere Bits sollen togglen und die restlichen sollen unverändert bleiben" gibt es nur eine "elegante" Lösung, und das ist die EOR-Variante (siehe Beitrag von TravelRec).
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.