Vergleichen

Gast #291298
Lesenswert?

Definition: Bit_0 = das ganz rechte bit ... bit_7=das höchstwertigste
Bit

1. Du hast ein Bitmuster bbbbbbbb (8 Bit), in dem du feststellen
möchtest ob bestimmte Bits einen bestimmten Zustand haben.

2. du hast ein Zähler aaa, welcher Werte zwischen 0 .. 7 (gleich:
Bitposition 0..7) annehmen kann. Das Bit aus "bbbbbbbb" soll an der
Zählerposition "aaa" verglichen werden ob es identisch ist zum Wert
von "d". Fals ja: Tue dies, falls nein: tue jenes

Frage 1: wielviele verschiedene Situationen werden mit "tue_dies bzw.
tue_jenes" abgebildet? Gibt es nur 2 Alternativen, oder wird es
mehrere geben?

Frage 2: In welcher Hochsprache, Pseudo-Hochsprache, Assemblersprache
hättest du es denn gerne ?
Gast #291300
Lesenswert?

Ich noch mal

hier noch mal eine andere beschreibung meines Anliegens.
Vergleich das Bit aaa mit den Wert d aus bb
bbbbbbbb 1110daaa
wenn gleich dann goto

lese welches bit in aaa gemeint ist dann schaue in d ob das der wert 0
oder 1 und nun gehe an das Bit in bbbbbbbb und vergleiche auch den
Wert d also ob 0 oder 1 ist.
Gast #291301
Lesenswert?

Deine Langbeschreibung deines 2. Postings beschreibt ja genau, was du
machen sollst (und ist auch nix anderes wie das im ersten Posting
benannte, also insofern sind die Beschreibungen konsistent.

Die Aufgabe ist schon soweit klar, blos wenn du_ nicht weist was _du
für einen Prozessor benutzt dann wird dir keiner helfen können
......

"ich schreibe in Assemblersprache"

Dir ist aber schon bekannt, daß es mehr wie einen Prozessor gibt?

Möchtest du nun Assembler für eine Cray XMP, oder für HAL 2000 aus
"Odyssee im Weltraum"? Ich hätt dann auch noch Assembler vom R2D2,
aber der ist in Klingonisch geschrieben und nur mit
Klingonen-Zeichensatz auf dem PC lesbar
Gast #291303
Lesenswert?

ich spreche kein PIC, daher sind meine Vorschläge nur theoretisch und in
"Pidgin-Programmiersprache" formuliert:

"lese welches bit in aaa gemeint ist "

>>> "irgendwo" (in einem register? von einem Port abgegriffen?) wird
ja deine Bitfolge   1110daaa  herkommen. Das nimmst du erst mal und
machst eine AND-Verknüpfung mit 00000111, um alles überflüssige
"wegzuknipsen". Das Ergebniss ist 00000aaa, mithin die Bitposition
von bbbbbbbb die du prüfen möchtest


"dann schaue in d ob das der wert 0 oder 1 "

>>> "irgendwo" (in einem register? von einem Port abgegriffen?) wird
ja deine Bitfolge   1110daaa  herkommen. Das nimmst du erst mal und
machst eine AND-Verknüpfung mit 00001000, um alles überflüssige
"wegzuknipsen". Das Ergebniss ist 0000d000, mithin dein Prüfbit. Der
Wert ist entweder NULL wenn d=0, oder NICHT NULL wenn d=1 gesetzt war.


"und nun gehe an das Bit in bbbbbbbb"

>>> du weißt, daß du das aaa-te bit in dieser bitfolge benötigst. Was
du nun machst ist Prozessor-abhängig.

a) du "schiebst" dieses Datenwort durch ein geegnetes Register
hindurch, wobei gleichzeitig das herausfallende bit im Carry-bit
aufgefangen wird. Dann kannst du abhängig vom Zustand des Carry-bit
sprungmarke_0 oder sprungmarke_1 anhopsen, und dort weiter machen
oder

b) du nimmst ein leeres Initialbitmuster 00000001 und schiebst es um
aaa Stellen nach links, dann hüpft die 1 um 1 Stelle weiter bis zur
benötigten Bitposition. Anschließend machst du eine AND-Verknüpfung mit
bbbbbbbb, so daß als Ergebniss raus kommt (angenommen, aaa=3-> )

bbbbbbbb
00001000
=========
0000b000

Damit hättest du halt auch dein betreffendes b-Bit isoliert



"und vergleiche auch den Wert d also ob 0 oder 1 ist."

mit den vorherigen Operationen hast du beide Informationen isoliert:
"d" und das relevante "b". Die vergleichst du nun noch ein bischen
miteinander, und abhängig vom ergebniss hüpfts du nach "tue_dies"
oder tue_jenes"



So, jetzt zeig mir, daß man das auch in PIC programmieren kann.
Gast #291306
Lesenswert?

Tja, ich spreche auch kein PIC, kann den Quellcode deshalb nicht
überprüfen.

ABER:

Im Kommentar steht:

;Vergleich das Bit aaa mit den Wert d aus der CV bb
;D2         D3         D4        ;011110bb  bbbbbbbb  1110daaa


Nun: 'aaa' sind ja nur drei Bits, kann also nur einen Wert von 0 bis
7 annehmen, also 8 verschiedene Positionen.

Aber laut Kommentar hast Du keine 8 'b'-Bits, sondern insgesammt 10
'b' Bits. Denn in D2 sollen ja die ersten zwei 'b' stehen und dann
in D3 die nächsten 8 Stück.

Dass sieht mir so aus, als ob da irgendwas faul wäre...

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