Logik ... Binärwerte verknüpfen

  • Logik gibt es in verschiedenen Erscheinungsformen - als Alltagslogik, als Aussagenlogik, als klassische Logik, als Fuzzy-Logik, als formale Logik und so weiter.


    Es geht dabei i.P. immer darum, aus einem bestimmten Satz vorgegebener Möglichkeiten Verknüpfungen zu bilden, dabei aber rein durch Betrachtung der Anordnung eine Aussage über die Zulässigkeit, d.h. Gültigkeit, der Verknüpfung zu treffen. Man versucht also eine formale Beschreibung zu finden, die es ermöglicht zu sagen, ob irgendetwas unter bestimmten Voraussetzungen bzw. Annahmen gültig sein kann, und das ohne den Inhalt dabei zu betrachten.


    Für die "Binär-Logik" interessieren dabei eigentlich nur ein paar wenige Verknüpfungen und Operationen, die sich meist mit dem Zusammentreffen zweier Einzel-Bits beschäftigen, wobei das Ergebnis voraussagbar ist anhand der Verknüpfungsart.



    UND und ODER


    Es werden hierbei 2 Einzelwerte mittels einem UND bzw. einem ODER verknüpft.

    Das funktioniert eigentlich so, wie es umgangssprachlich auch verwendet wird. Bei einem UND sind beide Werte gültig und das Ergebnis enthält folglich beide Werte gleichzeitig, aber nur dann, wenn beide auch "da" sind.


    Peter ist groß UND hat eine rote Nase !

    Das bedeutet, daß alle anderen Peter, also die kleinen Peter, solche mit grüner Nase etc., nicht DER Peter sein können.


    Peter ist groß ODER hat eine rote Nase !

    Dies erweitert den Personenkreis beträchtlich, weil nur eine von beiden Beschreibungen zutreffen muß, damit es DER Peter sein könnte. Es sind ja nun alle kleinen Peter mit roter Nase ebenso "gültig" wie die Peter, die groß sind und eine grüne, blaue, orange Nase haben.


    Im Fall von Bits sind die Grundelemente natürlich keine Nasen o.ä., sondern eben Bits.

    Üblicherweise schreibt man die Möglichkeiten, die sich ergeben, in eine Tabelle und die zulässigen Verknüpfungsergebnisse dazu.


    Da man 2 unabhängige Bits miteinander verknüpft, kann also Bit A den Wert "0" annehmen bzw. alternativ den Wert "1". Für Bit B gilt das Gleiche. Man schaut sich dann für alle denkbaren Möglichkeiten die Verknüpfungen an. d.h.


    Bit A ist 0 , Bit B ist 0 ->Verknüpfung

    Bit A ist 1 , Bit B ist 0 ->Verknüpfung

    Bit A ist 0 , Bit B ist 1 ->Verknüpfung

    Bit A ist 1 , Bit B ist 1 ->Verknüpfung


    und trifft für die jeweilige Art der Verknüpfung eine Aussage über das Ergebnis.


    Beim obigen Beispiel muß(!) der Peter in der UND Verknüpfung BEIDE Merkmale haben, damit es der richtige ist. In Bits bedeutet das, daß Bit A und Bit B gesetzt sein müssen, damit man das Ergebnis auch setzen kann.


    Also:


    Bit A = 0 , Bit B = 0 , UND verknüpft : 0

    Bit A = 1 , Bit B = 0 , UND verknüpft : 0

    Bit A = 0 , Bit B = 1 , UND verknüpft : 0

    Bit A = 1 , Bit B = 1 , UND verknüpft : 1



    Für die ODER Verknüpfung reicht es aus EINES VON BEIDEN Merkmalen zu haben. Aber es ist durchaus auch OK, wenn beide zutreffend sind, also "groß"+"rote Nase". In Bits reicht es also aus, wenn nur eines gesetzt ist, beide sind aber ebenfalls zulässig.


    Bit A = 0 , Bit B = 0 , ODER verknüpft : 0

    Bit A = 1 , Bit B = 0 , ODER verknüpft : 1

    Bit A = 0 , Bit B = 1 , ODER verknüpft : 1

    Bit A = 1 , Bit B = 1 , ODER verknüpft : 1



    Wozu ist das nun gut ?


    Man kann es z.B. Verwenden, um Bits wie Schalter gezielt an- oder abzuschalten. Und das auch so, daß die Bits in der Nachbarschaft nicht geändert werden. Es lassen sich auftretende Ereignisse erst dann auslösen, wenn eine oder mehrere Bedingungen zutreffen. Es lassen sich Daten, z.B. Grafiken, modifizieren, indem man nur bestimmte Wertebereiche zuläßt. Es lassen sich etwa Nibbles damit "einzeln" darstellen, so daß man sie getrennt bearbeiten kann u.v.m.



    Wie geht es ?


    Man betrachtet die Werte in ihrer binären Form. Zahlen sind also Folgen von "0" bzw. "1" in unterschiedlicher Zusammensetzung. Da es ja um eine Verknüpfung geht, braucht man 2 Zahlen. Von diesen wird jede einzelne Stelle mit der gleichen Stelle in der anderen Zahl nach dem Schema oben "verrechnet".


    Hat man z.B. eine 8-Bit Zahl in binär %11001001 und eine %11011100 werden Stelle 0 mit Stelle 0, Stelle 1 mit Stelle 1 usf. verknüpft. Am Besten schreibt man sie dazu übereinander


    %11001001 - Zahl1

    %11011100 - Zahl2


    und das Ergebnis nach der Verknüpfungstabelle einfach darunter


    %1xxxxxxx - UND Verknüpfung Stelle7

    %x1xxxxxx - UND Verknüpfung Stelle6

    %xx0xxxxx - UND Verknüpfung Stelle5

    %xxx0xxxx - UND Verknüpfung Stelle4

    %xxxx1xxx - UND Verknüpfung Stelle3

    %xxxxx0xx - UND Verknüpfung Stelle2

    %xxxxxx0x - UND Verknüpfung Stelle1

    %xxxxxxx0 - UND Verknüpfung Stelle0


    %11001001 - alles zusammen dargestellt (UND verknüpft)



    Für ODER passiert das ebenso und es ergibt sich


    %11011101 - alles zusammen dargestellt (ODER verknüpft)




    Will man nun etwa ein Einzelbit setzen, verknüpft man eine Zahl ODER mit dem gesetzten Bit an der gewünschten Stelle. Den "Wunsch" trägt man dazu in Zahl2 ein, z.B. Bit 5 und 7 sollen gesetzt werden:


    %11001001 - Zahl1

    %10100000 - Bit 5 und 7 gesetzt in Zahl2


    %11101001 - Ergebnis der ODER Verknüpfung


    Man sieht, daß Bit 7 gesetzt war (in Zahl1) und durch die Zahl2 nicht geändert wird - es ist also im Ergebnis gesetzt. Bit 5 dagegen ist in Zahl1 noch "0" und wird durch das gesetzte Bit 5 in Zahl2 sowie die ODER Verknüpfung nun angeschaltet.



    Um ein oder mehrere Einzelbits zu löschen benutzt man die UND Verknüpfung. Bit 0 bis 3 sollen gelöscht werden. Dafür setzt man alle zu löschenden Bits auf 0 und alle, die in ihrem aktuellen Zustand erhalten werden sollen, auf 1.


    %11001001 - Zahl1

    %11110000 - Bit 0,1,2,3 sind "0" in Zahl2


    %11000000 - Ergebnis der UND Verknüpfung


    Es findet sich in den Bits 4 bis 7 der Originalzustand wie in Zahl1. Aber die Bits 0 bis 3 sind komplett gelöscht, unabhängig davon, ob sie zuvor eine 0 oder eine 1 enthielten.



    Die Bitbreite, also ob 8-Bit, 16-Bit, 32-Bit etc. spielt hierbei keine Rolle. Es muß nur sichergestellt sein, daß der Verknüpfungsbefehl für jede Stelle zwei Bits vorfindet, die er nach der Verknüpfungstabelle zusammenfassen kann.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • =6502=


    Beim 6502 gibt es

    für UND den Befehl AND

    für ODER den Befehl ORA


    ORA deutet schon mit dem A im Namen an, daß immer mit dem Akku verknüpft wird. Dies gilt ebenso auch für AND. Die eine Zahl vor der Verknüpfung muß also immer bereits im Akku stehen. Der zweite Wert kann ein fixer Absolutwert sein oder aus einer RAM Adresse geholt werden. Dabei sind die gleichen umfangreichen Adressierungsmöglichkeiten wie beim LDA Befehl möglich.



    Dies sind zwei Mini-Programme. Das erste bei $5000 lädt Zeichen und verknüpft sie ODER mit %10000000 ($80). Es wird daher im Ergebnis das Bit-7 gesetzt - und das bedeutet zumindest am C16, daß das Zeichen nun in invertierter Farbe angezeigt wird.

    Das zweite Programm bei $5010 macht das wieder rückgängig, indem das Bit-7 wieder bei jedem bearbeiteten Zeichen gelöscht wird. Dazu wird der Wert mit UND %01111111 verknüpft.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

    Einmal editiert, zuletzt von ThoralfAsmussen ()

  • =6502=


    Die Tabelle bei $5100 muß per Hand eingegeben werden.


    Zuerst wird eine Farbe in den Farbspeicher geschrieben.

    Anschließend wird ab $500B je eine Farbwertposition abgefragt und ihr Wert mit %00001111 UND verknüpft. Es bleiben also alle hinteren Bits erhalten, die vorderen 4 werden gelöscht. Anschließend wird aus einer Tabelle bei $5100 ein Wert geladen, der nur die vorderen 4 Bits gesetzt hat. Da das erste Verknüpfungsergebnis noch im Akku steht, kann dieser jetzt gleich mit dem Tabellenwert verknüpft werden und zwar ODER verknüpft. Es werden also die obersten 4 Bits im Akku nun mit dem Wert aus der Tabelle gesetzt. Das Ergebnis wird zurück in den Farbspeicher geschrieben.


    Es wird somit eine UND und gleich anschließend eine ODER Verknüpfung durchgeführt.



    SUBWAIT2 wird ab $6000 benötigt.


    Da die vorderen 4 Bits die Helligkeit der Farbe bestimmen und die Tabellenwerte nacheinander durchlaufen werden, ändert sich jedesmal die Helligkeit für die 200 ersten Zeichen. Dabei wird aber - und das ist der Unterschied zum ähnlichen Tabellen-Thread Demo - der die eigentliche Farbe bestimmende Wert unangetastet belassen.


    Bitte mit anderen Farbwerten probieren; entweder bei $5000 die #$04 ändern oder per Hand einzelne Werte im Farbspeicher umändern ($0800) und im letzteren Fall danach mit G $500B starten.


    (Achtung: $10 ist Schwarz und hat keine Helligkeitsabstufungen. Für alle anderen Farben sollte es passen (Bsp. $03,$06).)


    Das demonstriert evtl. auch nochmal schön was schon hier und hier zum Thema Nibble geschrieben worden ist.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

    Einmal editiert, zuletzt von ThoralfAsmussen ()

  • Exklusiv-ODER


    Dies ist eine besondere Spielart der ODER Verknüpfung.

    Dabei steht das "exklusiv" vielleicht besser übersetzt für ein "ausschließlich" oder "entweder". Es bedeutet, daß diese Verknüpfung ENTWEDER Merkmal1 ODER Merkmal2 zuläßt. In Fällen, wo beide Werte in gleicher Form auftreten, d.h. beide vorhanden oder beide nicht vorhanden sind, wird das Verknüpfungsergebnis nicht erlaubt.


    Wenn z.B. gilt

    Lars hat ENTWEDER einen violetten Pullover ODER einen grünen Daumen!

    dann kann er nicht beides haben, damit es der gesuchte Lars ist. Genauso ist aber jemand, der keines von beiden Merkmalen hat, auch nicht der gesuchte Lars.



    In Bits schreibt sich das als Tabelle so


    Bit A = 0 , Bit B = 0 , EXKLUSIV-ODER verknüpft : 0

    Bit A = 1 , Bit B = 0 , EXKLUSIV-ODER verknüpft : 1

    Bit A = 0 , Bit B = 1 , EXKLUSIV-ODER verknüpft : 1

    Bit A = 1 , Bit B = 1 , EXKLUSIV-ODER verknüpft : 0



    Bei Verknüpfungen von Bits werden also alle Bits erhalten, die genau den entgegengesetzten Wert haben, wie das Bit der gleichen Stelle in der zweiten Zahl. Alle gleichgesetzten Bits werden dagegen gelöscht.


    Wenn also


    %11010011 - Zahl1 ist und

    %01010101 - Zahl2 , dann ergibt sich


    %10000110 - als Ergebnis der EXKLUSIV-ODER Verknüpfung.


    Nützlich ist das z.B., wenn man nach einem bekannten Muster fahndet und dieses, sofern es auftritt, dadurch abschalten, d.h. seine Bits auf "0" setzen, oder einschalten, d.h. seine Bits auf "1" setzen, kann.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • =6502=


    Der Befehl für die Exklusiv-ODER Verknüpfung heißt EOR

    Dieser erwartet wieder, wie AND und ORA, einen Wert im Akku und kann den anderen Verknüpfungswert als Fixwert oder Adressierung entgegennehmen.


    Das Beispiel hier benötigt in $D0/$D1 eine Adresse. Am Besten die Bildschirmstartadresse $0C00, wobei man hierzu die beiden Bytes, aus denen sich die Adresse zusammensetzt, in umgekehrter Reihenfolge an $D0 hinschreibt.


    >00D0 00 0C

    (bitte vor dem Start eingeben)



    SUBWAIT2 wird benötigt bei $6000.


    Die fürs Thema wichtige Zeile ist die $605B - dort steht das EOR.


    Dahinter steht ein eigenwilliger Ausdruck - eine Adresse in Klammern und dahinter ein Y. Dabei handelt es sich um eine sogenannte indirekte Adressierung, wofür die Klammern stehen, welche zusätzlich mit Y indiziert wird. Und die Adresse steht auch noch in der Zeropage ($D0). Es ist also eine: Zeropage indirekte Y-indizierte Adressierung.

    Klingt komplex, ist aber nicht schwer: Es wird nämlich einfach aus $D0/$D1 ein Bytepaar ausgelesen, was eine Adresse darstellt. Diese ausgelesene Adresse ist dann die, die interessiert, aber bevor sie verwendet wird, kommt noch der Wert vom Y-Register hinzu. Das Ergebnis dieser Addition ist dann die Adresse wo gelesen/geschrieben oder hier EOR verknüpft wird.


    Die eigentliche Verknüpfungsroutine läuft in einer Y-Register gesteuerten Zählschleife (bis $6060), die von #$27 auf #$00 herunterzählt. In ihr wird zunächst der Akku mit einem Wert für "X" geladen und diese an die seltsame Adressangabe bei ($D0),Y gespeichert. Im ersten Durchlauf wäre das die $0C27 , die nachfolgend bis $0C00 heruntergezählt wird.

    Dann wird kurz gewartet. Im Anschluß wird der gleiche Wert nocheinmal in den Akku geladen (was man, wenn man mit einem "$00" Ergebnis zufrieden ist, auch weglassen kann, da der Wert #$18 ja noch unverändert im Akku steht). Dieser Wert wird jetzt mit der GLEICHEN Adresse in die er kurz vorher gepeichert wurde verknüpft - und zwar EXKLUSIV-ODER.


    Frage: Was passiert wenn man einen Wert mit sich selbst EOR verknüpft ?


    Da jedes Bit an jeder Stelle identisch mit dem zu verknüpfenden Bit ist, wird bei EOR Verknüpfung natürlich jedes Bit auf "0" gesetzt ! Wenn beide Bits 1 sind entsteht ( 1 EOR 1 = 0 ), wenn beide Bits 0 sind ( 0 EOR 0 = 0 ). Andere Optionen gibt es nicht wegen der Identität.

    Es handelt sich also um ein komplettes Löschen des bekannten Bitmusters.


    Dieser Verknüpfungswert kommt jetzt gleich wieder an die ($D0),Y adressierte Adresse. Es steht da jetzt also eine "$00" drin. Im C16 Bildschirm hat nun leider der Wert "$00" nicht die Bedeutung "Leerzeichen", sondern wird als Klammeraffe (at Symbol) angezeigt. Ein Speicheransehen mit M 0C00 macht das Ergebnis evtl. deutlicher.

    Im Anschluß ab $6062 wird nun noch auf die in $D0/$D1 abgelegte Adresse soviel aufaddiert, wie die Zählschleife mit dem Y-Register an Adressen bereits verarbeitet hat. Dabei wird beachtet, ob beim Addieren ein Überlauf im "kleineren" Byte (dem mit dem LSB, dem Least Signifant Bit) entsteht, wenn ja wird das höherwertige Byte automatisch um +1 erhöht. Es handelt sich hier als bereits um eine 16-Bit Addition.


    Am Schluß steht diesmal ein BRK.

    Frage: Warum ein BRK und kein JMP (nach Anfang), wie doch sonst so oft ?


    Die Routine sollte am Besten mehrmals hintereinander gestartet werden.



    Zusatz:

    Solange man sich im Bildschirmspeicher bewegt, wäre es ja schön, wenn da statt einer $00 der Wert für ein Leerzeichen "entstehen" würde. Das ist möglich und der Grund für das "unambitionierte" zweite LDA#$18.

    Man kann nämlich diesen Verknüpfungswert geschickt so wählen, daß das "SPACE" entsteht. Der andere Verknüpfungswert ist ja bekannt, nämlich das "X". Nun schaut man sich die Bitmuster an und sieht

    %00011000 - das "X" ($18)

    %00100000 - das "SPACE" ($20)

    Um ein SPACE zu erhalten, müßte das Bit-5 gesetzt werden und Bit-4 sowie Bit-3 sollten gelöscht werden. Mit einer EOR Verknüpfung wird daher ein Verknüpfungswert

    %00111000

    benötigt, um das "X" zum "SPACE" werden zu lassen. Das ist eine #$38 - die man bei $6059 mal hinschreiben kann und das Ganze nochmal startet.


    Frage: Welchen Verknüpfungswert müßte man wählen, um in einem mit "SPACE" ($20) gefüllten Speicher, ein "X" mittels EOR zu erzeugen ?


    Frage: Welchen Verknüpfungswert benutzt man in einem mit $00 gefüllten Speicher, um ein beliebiges Bitmuster mittels EOR Verknüpfung dort hineinzuschreiben ?


    Frage: Was geschieht, wenn man über einen beliebigen Wert aus dem Speicher ein beliebiges Verknüpfungsmuster mit EOR verknüpft, aber dies zweimal hintereinander tut ?

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Oben konnte man sehen, daß und wie die drei Operationen UND, ODER, EXKLUSIV-ODER gemeint sind und angewendet werden. Diese drei sind die, die i.a. auf allen gängigen CPUs irgendwie als Maschinensprachbefehl und damit auch im Assembler existieren.


    Die Anwendungen in Kürze waren:

    UND - zum Ausschalten von Bits

    ODER - zum Einschalten von Bits

    EXKLUSIV-ODER - zum Umschalten von Bits


    Interessant ist nun, daß nur zwei von diesen, nämlich UND sowie ODER, echte grundlegende Funktionen sind. Funktionen deshalb, weil man diese Kommandos in ein Gebiet der Mathematik einordnen kann, das man Boolesche Algebra nennt. Sie geht zurück auf einen George Boole, der eine "Algebra der Logik" entwickelt hat. Man kann es auch als eine Art Mengenlehre ansehen, wobei die Menge nur die Elemente 0 und 1 umfaßt. Für das Rechnen mit diesen Werten hat er drei wichtige Grundfunktionen beschrieben: das UND, das ODER und die Negation (NICHT).


    Wie man sieht, ist das EXKLUSIV-ODER nicht dabei. Das liegt daran, daß man seinen Wirkmechanismus aus den drei ebengenannten Grundfunktionen aufbauen kann. Es gibt auch noch weitere Boolesche Funktionen, die aber wiederum durch eine Kombination von NICHT,UND,ODER nachgebildet werden können.

    UND und ODER verhalten sich im Rahmen der Booleschen Algebra wie oben in den Wahrheitstabellen (Verknüpfungstabellen) angegeben.


    Die Negation - auch NOT, bzw. NICHT (in deutsch) - funktioniert ein bißchen anders als die beiden anderen. Sie benötigt nämlich keine zwei Werte, die sie verknüpft; ihr genügt ein Wert von dem sie ganz schlicht das Gegenteil bildet. Sie schaltet also eine "0" um auf eine "1" bzw. macht aus einer "1" eine "0". Die Tabelle, wenn man das so nennen will, dazu sieht dann so aus:


    Bit A = 0 , NICHT "verknüpft" : 1

    Bit A = 1 , NICHT "verknüpft" : 0


    Es ist nun erlaubt mit diesen Funktionen zu rechnen. Dafür gibt es, wie in der "normalen" Mathematik, Rechenregeln und -gesetze. Dazu gehört die Festlegung der "Priorität", die besagt, daß ein NICHT immer vor einem UND und dieses vor einem ODER ausgeführt wird. Für alle anderen Anordnungen muß man dann Klammern setzen, die die Reihenfolge festlegen.


    Ein EXKLUSIV-ODER läßt sich damit so darstellen: (BitA ODER BitB) UND NICHT(BitA UND BitB).


    Es gibt auch noch andere wichtige derartige Konstrukte. Insbesondere die Verknüpfungen der NICHT Funktion mit einer der drei anderen sind interessant und relevant, nicht so sehr für Assembler, aber für Computer als solche.

    Dies wären also:


    UND + NICHT : NAND

    ODER + NICHT : NOR

    EXKLUSIV-ODER + NICHT : XNOR


    Diese sind insbesondere darum wichtig, weil sie im Rahmen der Schaltalgebra, die nach Claude Shannon eine Anwendung der Booleschen Algebra auf elektronische Schaltungen ist, benutzt werden können, um die anderen möglichen Funktionen mittels Relais oder ICs in der Realität darzustellen. Dafür reicht dann entweder eine NAND oder eine NOR Grundschaltung, mit der sich alle anderen Funktionen nachbilden lassen, wenn man mehrere davon hintereinander setzt; womit man nun bereits eine Ebene tiefer angelangt ist, dort, wo der Assembler schon lange keine Rolle mehr spielt, dafür Elektronen in bunten Drähten... oder eben auch Elektronenlücken in "Substrat"...


    Wer es anschaulich - mit Relais - mag, dem sei diese Seite empfohlen:

    NICHT, NAND (und jeweils dort die Links unten zu UND, OR, XOR usf.)

    Wer es lieber leise mag, der halte sich an ICs (statt Relais) und benutze zum Basteln seines eigenen Bit-Verarbeitungs-Systems die Bausteine der berühmten Reihe 74xx, deren erster - der SN7400N von TexasInstruments - ganze 4 NAND Funktionen anbot und -bietet.



    Was ist davon für "Programmieren lernen" relevant ?

    Nicht so sonderlich viel, aber man sollte es vielleicht trotzdem mal in der Verbindung gehört haben.


    Hier noch die Wikipedia Einstiegspunkte zum Weiterlesen

    Boolesche_Algebra, Boolesche_Funktion, Bitweiser_Operator, Schaltalgebra

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

    Einmal editiert, zuletzt von ThoralfAsmussen ()

  • =6502=


    Es existiert noch eine "logische" Anweisung, die vmtl. aber recht selten benutzt wird. Diese erlaubt es ein einzelnes Bit daraufhin zu testen, ob es gesetzt ist, oder nicht.


    Der Name spricht für sich - BIt Test : BIT


    Dafür muß eine Adresse angegeben werden, die "befragt" werden soll. Zusätzlich muß im Akku ein Wert stehen, bei dem die Testbits auf "1" gesetzt werden. Der Befehl verknüpft nun die Adresse und den Wert im Akku mittels UND. Aber das Ergebnis der Verknüpfung erscheint nirgendwo, es wird verworfen. Stattdessen wird das Zero-Flag gesetzt, wenn die Test Bits (im Akku) auf bereits gesetzte Bits in der Adresse gestoßen sind. Waren die Bits in der Adresse nicht gesetzt, dann wird das Zero-Flag gelöscht - aber nur wenn alle getesteten Bits "0" waren.


    Nützlich ist das etwa, um im TED bestimmte Zustände abzufragen. Lautstärke vom Sound Maximal ? oder GraphikModus An ?


    Zusätzlich werden die beiden obersten Bits aus der Adresse in das Negativ-Flag (Bit-7) und das Overflow-Flag (Bit-6) kopiert.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Da eine NOT Funktion nicht immer direkt zur Verfügung steht, muß man sich dafür etwas einfallen lassen.


    Nun wurde ja oben die Exklusiv-ODER Verknüpfung als logische "Umschaltfunktion" dargestellt. Und genau das macht ja auch die NOT (NICHT) Funktion aus - sie schaltet alle Bit in den entgegengesetzten Zustand.

    Somit ist also eine Exklusiv-ODER Verknüpfung, bei der man bei einer der beiden Zahlen alle Bits auf "1" setzt, das Pendant einer NOT Funktion für die andere Zahl der Verknüpfung.


    Beim 6502 also: EOR #$FF

    Bei 32-Bit Maschinen entsprechend alle 32-Bit gesetzt (#$FFFFFFFF).

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries