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....
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.