hi! Ich bräuchte bitte hilfe bei einer Bitmaipulation! Ich habe ein byte zu manipulieren und zwar so! b11111111 bräuchte jetzt immer eine 0 in den oberen 4 bits und in den unteren 4 bits das heißt: 01110111 diese 2 nullen sollen sich getrennt von einander verschieben lassen! das aber immer nur in den 4 bits! Wie mache ich das? mfg, geri
...so richtig habe ich Dein Problem nicht verstanden, wie sollen die Nullen genau verschoben werden? Soll es immer die gleiche Verschiebereihenfolge in den beiden Nibbles sein? Wenn ja, dann wäre es z.B. so möglich: ldi temp, 01110111 ldi temp, 11011101 ldi temp, 10111010 Ist die Aufgabenstellung etwas komplzierter, dann könnte man mit SWAP, BST, BLD usw. sicherlich auch umständlicher zum Ziel kommen. Bernhard
Wozu gibt´s denn die Befehle ROL und ROR? Bei entsprechend gesetzem oder gelöschtem Carry machen die genau das was Du willst (vorausgesetzt, Du proggst in Assembler).
Ich programmiere in C, weil ich assembler nicht wirklich gut kann! Gibts dafür eine Lösung in C auch????
du koenntest die 8 bit auslesen, in 2 Arrays zu je 4 bit teilen und dort getrennt manipulieren und danach wieder einschreiben ...
ja das könnte ich, will es aber ohne arrays machen!!! die brauchen so viel speicher im data deswegen möchte ich es nicht mit arrays machen!!!
ganz einfach byte a= 0b11110111 byte b= 0b10111111 dann kannst du herumschieben wie du willst a << 1 b >> 1 und dann verknüpflst du das ganze mit nem logischen und byte ausgabe = a && b Ausgaberegiser = ausgabe würd ich so machen hab mir allerdings noch nicht angesehen wie es mit dem speicher aussieht kann aber nicht soviel brauchen
danke für die nützlichen tipps! Hab das problem mit einer Zeile lösen können! Danke!
Hallo, ich bekomme von C-Code immer Kopfschmerzen, aber das nehme ich in diesem Fall gerne auf mich. Ich möchte auch gerne wissen wie das geht. Es grüsst, Arno
Bit-Manipulationen gehen mit ( Originalwert zwischenkopieren , Ausgangswert vorab nullsetzen ), dann über UND - XOR - Maskierungen , evtl. schieben , zuletzt mit OR zusammenmaskieren. Manchmal braucht man mehrere interne Zwischenwerte, damit's übersichtlicher bleibt. Wenn's mal fuinktioniert, kann man später noch optimieren. Es kommt immer auf die konkreten Anforderung an. Am besten "aufmalen", welche (Teil-) Felder man wohin bewegen will, welche bleiben sollen.
hi! Das ist die zeiele: port_w=~((1 << wahlp3) | (1 << (wahlp4+4))); das ist eigentlich alles was ich jemals wollte
port_w=~((1 << wahlp3) | (1 << (wahlp4+4))); besser: port_w=~((1 << wahlp3) | (16 << (wahlp4))); so muss er weniger schieben noch besser: port_w=~((16 << wahlp4) | (1 << (wahlp3))); so muss er weniger (um)denken - der Mensch, der die oberen Bits lieber links sieht (-;
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.