AVR-Tutorial: Logik
In weiterer Folge werden immer wieder vier logische Grundoperationen auftauchen:
- UND
- ODER
- NICHT
- XOR (exklusives Oder)
Was hat es mit diesen Operationen auf sich?
Allgemeines
Die logischen Operatoren werden mit einem Register und einem zweiten Argument gebildet. Das zweite Argument kann ebenfalls ein Register oder aber eine direkt angegebene Zahl sein.
Da ein Register aus 8 Bit besteht, werden die logischen Operatoren immer auf alle 8-Bit-Paare gleichzeitig angewendet.
Mit den logischen Grundoperationen werden die beiden Argumente miteinander verknüpft und das Ergebnis der Verknüpfung im Register des ersten Argumentes abgelegt.
Die Operatoren
UND
A | B | Ergebnis |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Das Ergebnis ist genau dann 1, wenn A und B gleich 1 sind.
Verwendung
- Gezielt einzelne Bits auf 0 setzen, ohne die anderen Bits eines Bytes zu beeinflussen.
- Dadurch auch die Verwendung um einzelne Bits auszumaskieren.
AVR-Befehle
and r16, r17 ; Verknüpfung zweier Register
andi r16, 0b01011010 ; Verknüpfung eines Registers mit einer Konstanten
Die beiden Operanden werden mittels UND miteinander verknüpft, wobei jeweils die gleichwertigen Bits der Operanden laut Wahrheitstabelle unabhängig voneinander verknüpft werden.
Sei der Inhalt des Registers r16 = 0b11001100, so lautet die Verknüpfung andi r16, 0b01011010
0b11001100 0b01011010 und ----------- 0b01001000
Das Ergebnis wird im ersten Operanden (r16) abgelegt.
Im Ergebnis haben nur diejenigen Bits denselben Wert, den sie im ersten Argument hatten, bei denen im zweiten Argument (in der Maske) eine 1 war. Alle anderen Bits sind auf jeden Fall 0. Da in der Maske
0b01011010
die Bits 0, 2, 5, 7 eine 0 aufweisen, ist auch im Ergebnis an diesen Stellen mit Sicherheit eine 0. Alle andern Bits (diejenigen, bei denen in der Maske eine 1 steht), werden aus der Ursprungszahl so wie sie sind übernommen.
ODER
A | B | Ergebnis |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
Das Ergebnis ist genau dann 1, wenn A oder B oder beide 1 sind.
Verwendung
- Gezielt einzelne Bits auf 1 setzen, ohne die anderen Bits eines Bytes zu beeinflussen.
AVR-Befehle
or r16, r17 ; Verknüpfung zweier Register
ori r16, 0b01011010 ; Verknüpfung eines Registers mit einer Konstanten
Die beiden Operanden werden miteinander ODER-verknüpft, wobei die jeweils gleichwertigen Bits der Operanden laut Wahrheitstabelle unabhängig voneinander verknüpft werden.
Sei der Inhalt des Registers r16 = 0b11001100, so lautet die Verknüpfung ori r16, 0b01011010
0b11001100 0b01011010 oder ----------- 0b11011110
Das Ergebnis wird im ersten Operanden (r16) abgelegt.
Im Ergebnis tauchen an den Bitpositionen, an denen in der Maske eine 1 war, auf jeden Fall ebenfalls eine 1 auf. In den restlichen Bitpositionen hängt es vom ersten Argument ab, ob im Ergebnis eine 1 auftaucht oder nicht.
Da in der Maske
0b01011010
an den Bitpositionen 1, 3, 4, 6 eine 1 steht, ist an diesen Bitpositionen im Ergebnis ebenfalls mit Sicherheit eine 1. Alle anderen Bits werden so wie sie sind aus der Ursprungszahl übernommen.
NICHT
A | Ergebnis |
---|---|
0 | 1 |
1 | 0 |
Das Ergebnis ist genau dann 1, wenn A nicht 1 ist.
Verwendung
- Alle Bits eines Bytes invertieren.
AVR-Befehle
com r16
Sei der Inhalt des Registers r16 = 0b11001100, so lautet die Verknüpfung com r16
0b11001100 nicht ----------- 0b00110011
Das Ergebnis wird im ersten und einzigen Operanden (r16) abgelegt.
XOR (Exklusives Oder)
A | B | Ergebnis |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Das Ergebnis ist genau dann 1, wenn A oder B, aber nicht beide 1 sind.
Verwendung
- Gezielt einzelne Bits umdrehen (invertieren), ohne die übrigen Bits eines Bytes zu beeinflussen.
AVR-Befehle
eor r16, r17 ; Verknüpfung zweier Register
Die beiden Operanden werden miteinander XOR-verknüpft, wobei die jeweils gleichwertigen Bits der Operanden laut Wahrheitstabelle unabhängig voneinander verknüpft werden.
Sei der Inhalt des Registers r16 = 0b11001100 und der Inhalt des Registers r17 = 0b01011010, so lautet die Verknüpfung eor r16, r17
0b11001100 0b01011010 xor ----------- 0b10010110
Das Ergebnis wird im ersten Operanden (r16) abgelegt.
Im Ergebnis werden diejenigen Bits umgedreht, an deren Bitposition in der Maske eine 1 vorhanden ist.
Da in der Maske
0b01011010
an den Bitpositionen 1, 3, 4, 6 jeweils eine 1 steht, enthält das Ergebnis an eben diesen Bitpositionen die umgedrehten Bits aus der Ursprungszahl. Alle anderen Bits werden so wie sie sind aus der Ursprungszahl übernommen.
Weblinks
- GATE: The Logic Game – Eine kleine Abwechslung für die Tutorialpause. (ab Windows XP, Mac OS X)