[ASM] Bit 7 = Bit 1; Bit 6 = Bit0

OP #4109369
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....
Gast #4109586
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...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.