Forum: Mikrocontroller und Digitale Elektronik AVR/ASM: Bit in Register invertieren


von moby (Gast)


Lesenswert?

Hallo, steh gerade auf dem Schlauch ob das Invertieren eines beliebigen 
Registerbits in ASM nicht effektiver geht als so hier, z.B. mit r16 und 
Bit 4:
1
       sbrs r16,4
2
       rjmp m1
3
       cbr r16,8
4
       rjmp m2
5
m1: sbr r16,8
6
m2:

Ideen?

Gruß moby

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

ldi r17, (1<<Bit)
eor r16, r17

von Karl H. (kbuchegg)


Lesenswert?

Leider gibt es kein EORI sondern nur ein EOR

   ld   r17, 1<<4
   eor  r16, r17

von moby (Gast)


Lesenswert?

Danke! Damit dürfte EOR nun erstmalig in meinem Programmieralltag Einzug 
halten :)

von Ralf G. (ralg)


Lesenswert?

@moby
Und Achtung: das 1. Bit ist 0
Dein Beispiel funktioniert nicht!

von Karl H. (kbuchegg)


Lesenswert?

Ralf G. schrieb:
> @moby
> Und Achtung: das 1. Bit ist 0
> Dein Beispiel funktioniert nicht!

Womit dann auch ganz zwanglos die Vorteile der Schreibweise
       cbr r16, (1<<4)
gegenüber
       cbr r16,8
aufgezeigt wären. Im ersten steht die Bitnummer direkt dort und der 
Assembler rechnet das entsprechende Maskenbyte aus. Im zweiten hat der 
Programmierer das entsprechende Maskenbyte für sich im Kopf ausgerechnet 
und dabei prompt einen Fehler gemacht :-)

von moby (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> und dabei prompt einen Fehler gemacht :-)

Wie peinlich :-)
Die Schreibweise sollte man diesbezüglich wirklich ändern,
wenn nur der Zeichen-Mehraufwand nicht wäre :-(

Beitrag #5699683 wurde von einem Moderator gelöscht.
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.