AVR-Tutorial: Logik: Unterschied zwischen den Versionen
Zeile 168: | Zeile 168: | ||
----------- | ----------- | ||
0b10010110 | 0b10010110 | ||
Im Ergebnis werden diejenigen Bits umgedreht, an deren Bitposition in der Maske eine 1 vorhanden ist. | |||
Das Ergebnis wird im ersten Operanden (r16) abgelegt. | Das Ergebnis wird im ersten Operanden (r16) abgelegt. |
Version vom 23. Mai 2007, 22:31 Uhr
In weiterer Folge werden immer wieder 4 logische Grundoperationen auftauchen:
- UND
- ODER
- NICHT
- XOR (Exlusiv 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.
Die Operatoren
UND
Wahrheitstabelle für 2 einzelne Bits
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 1 sind
Verwendung
- gezielt einzelne Bits auf 0 setzen
- dadurch auch die Verwendung um einzelne Bits auszumaskieren
AVR Befehle
<avrasm>
and r16, r17 andi r16, 0b01011010
</avrasm>
Die beiden Operanden werden miteinander UND verknüpft, wobei jeweils 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 andi r16, 0b01011010
0b11001100 0b01011010 und ----------- 0b01001000
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.
Das Ergebnis wird im ersten Operanden (r16) abgelegt.
ODER
Wahrheitstabelle für 2 einzelne Bits
A | B | Ergebnis |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Das Ergbenis ist genau dann 1, wenn A oder B oder beide 1 sind.
Verwendung
- gezielt einzelne Bits auf 1 setzen
AVR Befehle
<avrasm>
or r16, r17 ori r16, 0b01011010
</avrasm>
Die beiden Operanden werden miteinander ODER verknüpft, wobei jeweils 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
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.
Das Ergebnis wird im ersten Operanden (r16) abgelegt.
NICHT
Wahrheitstabelle
A | Ergebnis |
---|---|
0 | 1 |
1 | 0 |
Das Ergebnis ist genau dann 1, wenn A nicht 1 ist.
Verwendung
- Bits umdrehen
AVR Befehle
com r16
XOR (Exlusives Oder)
Wahrheitstabelle für 2 einzelne Bits
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
AVR Befehle
<avrasm>
eor r16, r17
</avrasm>
Die beiden Operanden werden miteinander XOR verknüpft, wobei jeweils 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, so lautet die Verknüpfung eor r16, r17
0b11001100 0b01011010 xor ----------- 0b10010110
Im Ergebnis werden diejenigen Bits umgedreht, an deren Bitposition in der Maske eine 1 vorhanden ist.
Das Ergebnis wird im ersten Operanden (r16) abgelegt.