Forum: Mikrocontroller und Digitale Elektronik Kurzen AVR Asm Schnipsel optimieren


von Lust L. (lust)


Lesenswert?

Will eigentlich nur wissen ob Bit 0 des IO-Registers GPR0 mit dem des 
Registers R16 übereinstimmt. Gehts kürzer als

in r17,GPR_GPR0
andi r16,1
andi r17,1
cp r16,r17
breq ... ;ist gleich

: Verschoben durch Moderator
von Mario M. (thelonging)


Lesenswert?

Ohne den Prozessor zu kennen, würde ich das vorschlagen:
1
in r17,GPR_GPR0
2
xor r17,r16
3
andi r17,1
4
breq ... ;ist gleich

von Theo (Gast)


Lesenswert?

1
in r17, GPR_GPR0
2
andi r17, r16
3
sbrcc r17, 0
4
rjmp .... ; bit set
5
...; bit cleared

von Theo (Gast)


Lesenswert?

Mist, sollte "and" statt "andi" sein.

von Falk B. (falk)


Lesenswert?

Theo schrieb:
> Mist, sollte "and" statt "andi" sein.

"geschrieben auf meinem iPhone"
(da wird das i immer automatisch angehängt) ;-)

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Theo schrieb:
> andi r17, r16

Er wollte Gleichheit testen und nicht dass beide Bits gesetzt sind.

von Theo (Gast)


Lesenswert?

Mario M. schrieb:
> Theo schrieb:
>> andi r17, r16
>
> Er wollte Gleichheit testen und nicht dass beide Bits gesetzt sind.

Stimmt. Dann "xor" statt "andi".

von Lust L. (lust)


Lesenswert?

Danke fürs Mitmachen!
Immerhin eine Anweisung eingespart mit xor (eor) ;-)

von Mario M. (thelonging)


Lesenswert?

Noch kürzer wirds, wenn die zu vergleichenden Bits auf Bit7 sind.
1
in r17,GPR_GPR0
2
eor r17,r16
3
brmi ... ;ist _un_gleich

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.