Bit löschen

Gast #338747
Lesenswert?

Hi zusammen,
steh gerade etwas auf dem Schlauch und hoffe mir kann jemand helfen.
Wie kann ich ein Bit in einem 16bit word löschen?
Also nicht auf "0" setzen sondern löschen damit ich nur noch 15 Bit
habe.
Benutze einen ATMega und Assembler.
Danke schonmal für eure Hilfe.
Gast #338750
Lesenswert?

Dir wird nichts anderes übrigbleiben, als Bits zu verschieben und die
damit unbenutzt werdenden höchsten Bits auf einen dir genehmen Wert zu
setzten (vmtl. 0).

Jetzt mal ins Unreine ein Ansatz:

Ist  - yyyy.yyAx.xxxx.xxxx
Soll - 0yyy.yyyx.xxxx.xxxx

A - unwillkommenes Bit
x - niedriger benutzter Wortteil
y - hoher benutzter Wortteil

- den Wert trennen in niedrigen und hohen benutzten Wortteil
(entsprechend maskieren halt)
- den hohen Teil um eins nach rechts schieben
- beide Teile wieder kombinieren.

Gruß
Gast #338751
Lesenswert?

Hmm hab ich mich vielleicht blöd ausgedrückt.
Also nochmal.
hab wie gesagt eine 16 Bit Zahl.
Nun brauch ich davon aber angenommen nur die ersten 12 Bits.
Wie kann ich das in Assembler realisieren?
Gast #338754
Lesenswert?

Bitweise shiften dürfte da wohl die antwort sein...

lsr - logical shift right
lsl - logical shift left

Wenn Du also nur die 12 höchstwertigsten Bits eines 16-bit-Wortes
benötigst, schiebst du das ganze viermal nach rechts. Wird von ober mit
Nullen aufgefüllt.
Gast #338755
Lesenswert?

Mach es z.B. so: Schiebe das High-Byte (also die höherwertigen acht Bit)
mit lsr um eine Stelle nach rechts. Dadurch wird der Inhalt des
niederwertigsten Bits ins Carry-Flag geschoben und von links eine Null
reingeschoben. Dann wendest Du sofort danach (ohne dass in der
Zwischenzeit das Carry verändert wird!!!) auf das Low-Byte ror an.
Dadurch wird das Low-Byte um eine Stelle nach rechts geschoben und von
links wandert der Übertrag von der ersten Operation rein. Wenn Du das
viermal hintereinander machst, hast Du die oberen zwölf Bits von Deinem
16-Bit-Wort auf die unteren zwölf Stellen  verschoben. Ich denke, das
ist es, was Du wolltest...
Gast #338757
Lesenswert?

"Nun brauch ich davon aber angenommen nur die ersten 12 Bits."

Shifts und Rotationen sind auch nicht unbedingt was du brauchst. Du
willst möglicherweise Bits maskieren und da ist das bitweise UND dein
Freund. Einfach deinen Wert mit einer Maske ver-UND-en und die
unerwünschten Bits sind Null.

Istwert yyyy.xxxx.xxxx.xxxx
Maske   0000.1111.1111.1111
UND     0000.xxxx.xxxx.xxxx

Ansonsten musst du dir mit Shifts, Rots und Maskierung alles selber
bauen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren