Is er een manier mogelijk om dit zonder temp uit te voeren?

ldi	temp, 32
sub	temp, bitCount
mov	data, temp

Een vast getal daar een getal vanaf, en dat getal moet ik gaan gebruiken.
De variabele waarde ligt altijd onder de 32. (minmimum is 32 - 32 = 0)

Snuffel snuffel....
Zet eens 20V op het beest dat je aan het programmeren ben, dan kan ik mss ruiken wat het is (PIC???).

inverteren ? en er 1 bijtellen ? en de hoogste bitys wegmaskeren

bijvoorbeeld 32-17 = 15

10001 binair inverteren geeft 11101110
1 erij = 11101111
msbs afmaskeren met and
11101111 and 00011111 = 00001111 = 15

die foefelarij werkt alleen voor machten van 2 natuurlijk

[Bericht gewijzigd door free_electron op ]

Op 1 september 2006 22:45:48 schreef free_electron:
inverteren ? en er 1 bijtellen ? en de hoogste bitys wegmaskeren

bijvoorbeeld 32-17 = 15

10001 binair inverteren geeft 11101110
1 erij = 11101111
msbs afmaskeren met and
11101111 and 00011111 = 00001111 = 15

die foefelarij werkt alleen voor machten van 2 natuurlijk

Oftewel:

mov  data, bitCount
neg  data
andi data, 32 - 1

Als bitCount mag wijzigen heb je data ook niet nodig.

Op 1 september 2006 22:45:48 schreef free_electron:
inverteren ? en er 1 bijtellen ?

da's dan "Two's complement", ofnie? pas erover gelzen..

Klopt, je maakt er gewoon een negatieve waarde van.
Het idee is: x = 32 - x <=> x = -x + 32.
X dus negatief maken, en dan er 32 bij optellen. De and-truc daarna is in dit geval hetzelfde als 32 er bij optellen. Als je 32 optelt veranderen de laagste 4 bits niet. De rest van de bits wel, maar deze zullen altijd op 0 uitkomen omdat het resultaat altijd tussen de 0 en 32 ligt (voor x tussen 0 en 32). In dit geval kun je dus ook een AND doen met een 1 in de laagste 4 bits (=32-1).

Op de AVR kun je trouwens net zo goed 32 erbij optellen dan dat je and met 31, is een even grote en snelle instructie. Dit kan dus ook gewoon:

mov  data, bitCount
neg  data
subi data, -32

(subi met -32 omdat er geen addi is).

edit: Volgens mij werkt free_electron's truc trouwens niet voor x = 0. Uitkomst zou dan 32 moeten zijn maar met de and kom je daar nooit aan (max 31).

Wat je ook probeert, het komt niet onder de 3 cycles.
Ik laat het wel zo het is.
Bedankt.