AVR-Tutorial: Logik: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Zeile 167: Zeile 167:
====AVR Befehle====
====AVR Befehle====
<avrasm>
<avrasm>
         eor  r16, r17
         eor  r16, r17           ; Verknüpfung zweier Register
</avrasm>
</avrasm>



Version vom 15. September 2011, 22:43 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.

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

Wahrheitstabelle 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 1 sind

Verwendung

  • gezielt einzelne Bits auf 0 setzen
  • dadurch auch die Verwendung um einzelne Bits auszumaskieren

AVR Befehle

<avrasm>

       and  r16, r17             ; Verknüpfung zweier Register
       andi r16, 0b01011010      ; Verknüpfung eines Registers mit einer Konstanten

</avrasm>

Die beiden Operanden werden miteinander UND 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

Wahrheitstabelle 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

AVR Befehle

<avrasm>

       or   r16, r17           ; Verknüpfung zweier Register
       ori  r16, 0b01011010    ; Verknüpfung eines Registers mit einer Konstanten

</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

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 andern Bits werden so wie sie sind aus der Ursprungszahl übernommen.

NICHT

Wahrheitstabelle NICHT
A Ergebnis
0 1
1 0

Das Ergebnis ist genau dann 1, wenn A nicht 1 ist.

Verwendung

  • alle Bits eines Bytes umdrehen

AVR Befehle

<avrasm>

       com  r16

</avrasm>

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 (Exlusives Oder)

Wahrheitstabelle XOR
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           ; Verknüpfung zweier Register

</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 = 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