Forum: Mikrocontroller und Digitale Elektronik [ASM] Bit 7 = Bit 1; Bit 6 = Bit0


von Christian (dragony)


Lesenswert?

Hallo,

Gegeben: r19 = 0bxx000000 (x kann 0 oder 1 sein. Unbekannt.)
Gesucht: r19 = 0b000000xx

Ich möchte also "einfach nur" 2xlsl machen. Geht aber nicht, da daraus 
dann ein 0b00000000 wird. Ich müsste also eigentlich ein rol machen, 
aber wenn ich die Doku richtig verstehe, wird das C Flag erst NACH der 
Operation gesetzt.

lsl r19
lsl r19
Ergebnis: 0b00000000

lsl r19
rol r19
Ergebnis: 0b0000000x

Wenn ich es richtig verstehe, müsste ich es so machen:
lsl r19
rol r19
rol r19

Alternativ könnte ich es auch so machen:
swap r19
lsr r19
lsr r19

Finde es aber n bissl viel, dafür 3 Takte nutzen zu müssen. Da ich erst 
seit einigen Tagen ASM mache, wollte ich mal fragen, wie man es richtig 
macht.

Edit: Da ich es dauernd vergesse. Es ist ein ATtiny, Barrel Shifter ist 
leider nicht drin....

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

du hast selbst schon die richtige Lösung gefunden!
A: 1x lsl + 2x rol
B: swap + 2x lsr

kürzer als 3 Takte wird es nicht

Sascha

von c-hater (Gast)


Lesenswert?

Christian S. schrieb:

> Finde es aber n bissl viel, dafür 3 Takte nutzen zu müssen. Da ich erst
> seit einigen Tagen ASM mache, wollte ich mal fragen, wie man es richtig
> macht.

Ganz klar: Man überlegt zuerst, ob es eigentlich wirklich nötig ist, die 
Bits in diese Positionen zu bringen oder ob sich die Gesamtaufgabe (die 
du uns leider nicht mitgeteilt hast) nicht auch irgendwie sinnvoller 
lösen ließe...

Nun gut, es mag durchaus sein, daß es Probleme gibt, wo das wirklich 
nötig ist. Dann geht es wirklich nicht mit weniger als drei Takten. 
Allerdings gibt es noch deutlich mehr Möglichkeiten, das in drei Takten 
zu realisieren als die zwei von dir geposteten.

Da wählt der Asm-Programmierer dann nach Möglichkeit wieder diejenige, 
die ihm vielleicht einen oder sogar zwei Takte an anderer Stelle 
erspart. Ist das auch nicht möglich: Schicksal. Irgendwann ist halt Ende 
Gelände. Auch das muß man als Asm-Programmierer irgendwann einfach mal 
zu akzeptieren lernen...

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.