Titelbild Mikrocontroller

A-Befehle


oben ADC - Add with Carry

Syntax: ADC Rd, Rr
Funktion: Addiert zwei Register und den Inhalt des Carry-Flag. Das Ergebnis wird im Quellregister Rd abgelegt.
Operation: Rd ← Rd + Rr + C
Operanden: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0001 11rd dddd rrrr

Flags im Status-Register (SREG):
ITH S V N Z C
--
H: Das H-Flag wird gesetzt, wenn ein Übertrag von Bit 3 auf Bit 4 erfolgte, andernfalls wird das Flag gelöscht.
S: Das S-Flag wird gesetzt, wenn entweder das N-Flag oder das V-Flag gesetzt ist. Wenn beide Flags gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gesetzt, wenn aus der Operation ein Zweierkomplement- Überlauf erfolgt, andernfalls wird das Flag gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn im Ergebnis ein Überlauf von Bit 8 erfolgte, andernfalls wird es gelöscht.

Beispiel:
add r2,r0    ;Addieren der Low-Bytes
adc r3,r1    ;Addieren der High-Bytes und des Carry-Flags

oben ADD - Add without Carry

Syntax: ADD Rd, Rr
Funktion: Addiert zwei Register ohne das Carry-Flag. Das Ergebnis wird im Quellregister Rd abgelegt.
Operation: Rd ← Rd + Rr
Operanden: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0000 11rd dddd rrrr

Flags im Status-Register (SREG):
ITH S V N Z C
--
H: Das H-Flag wird gesetzt, wenn ein Übertrag von Bit 3 auf Bit 4 erfolgte, andernfalls wird das Flag gelöscht.
S: Das S-Flag wird gesetzt, wenn entweder das N-Flag oder das V-Flag gesetzt ist. Wenn beide Flags gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gesetzt, wenn aus der Operation ein Zweierkomplement- Überlauf erfolgt, andernfalls wird das Flag gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn im Ergebnis ein Überlauf von Bit 8 erfolgte, andernfalls wird es gelöscht.

Beispiel:
add r1,r0    ;Addieren der Register R0 und R1

oben ADIW - Add Immediate to Word

Syntax: ADIW Rd+1:Rd,K
Funktion: Addiert eine Konstante zu einem Registerpaar. Das Ergebnis wird in diesem Registerpaar abgelegt. Der Befehl arbeitet nur mit den oberen vier Registerpaaren und unterstützt somit das Arbeiten mit den Pointer-Registern. Der Befehl ist nicht in allen AVR-Bausteinen verfügbar.
Operation: Rd+1:Rd ← Rd+1:Rd + K
Operanden: d ε {24, 26, 28, 30}, 0 ≤ K ≤ 63
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 2
16 Bit Operations Code: 1001 0110 KKdd KKKK

Flags im Status-Register (SREG):
ITH S V N Z C
---
S: Das S-Flag wird gesetzt, wenn entweder das N-Flag oder das V-Flag gesetzt ist. Wenn beide Flags gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gesetzt, wenn aus der Operation ein Zweierkomplement- Überlauf an Bit 15 erfolgt, andernfalls wird das Flag gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB (Bit 15) des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 0000h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn im Ergebnis ein Überlauf von Bit 15 erfolgte, andernfalls wird es gelöscht.

Beispiel:
adiw r25:r24,1    ;Addiert 1 zu dem Registerpaar R25:R24
adiw ZH:ZL,34    ;Addiert 34 zum Z-Pointer (R31:R30)

oben AND - Logical AND

Syntax: AND Rd, Rr
Funktion: Führt eine logische UND-Verknüpfung der Inhalte zweier Register durch, das Ergebnis wird im Quellregister Rd abgelegt.
Operation: Rd ← Rd • Rr
Operanden: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0010 00rd dddd rrrr

Flags im Status-Register (SREG):
ITH S V N Z C
---0-
S: Das S-Flag wird gesetzt, wenn entweder das N-Flag oder das V-Flag gesetzt ist. Wenn beide Flags gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.

Beispiel:
and r1, r0    ;UND-Verknüpfung der Register R0 und R1

oder:

ldi r16,$01    ;Maskierungsbyte 0000 0001 in R16 schreiben
and r2,r16    ;Löschen der oberen 7 Bit in R2

oben ANDI - Logical AND with Immediate

Syntax: ANDI Rd,K
Funktion: Führt eine logische UND-Verknüpfung zwischen einem Register und einer Konstante durch, das Ergebnis wird im Quellregister Rd abgelegt. Für diesen Befehl können nur die Register R16 bis R31 verwendet werden.
Operation: Rd ← Rd • K
Operanden: 16 ≤ d ≤ 31, 0 ≤ K ≤ 255
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0111 KKKK dddd KKKK

Flags im Status-Register (SREG):
ITH S V N Z C
---0-
S: Das S-Flag wird gesetzt, wenn entweder das N-Flag oder das V-Flag gesetzt ist. Wenn beide Flags gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.

Beispiel:
andi r1,$0F    ;Löschen der oberen 4 Bit in R1

oben ASR - Arithmetic Shift Right

Syntax: ASR Rd
Funktion: Mit diesem Befehl werden alle Bits des Registers Rd eine Position nach rechts geschoben. Das Bit 7 verändert sich dabei nicht, das Bit 0 wird in das Carry-Flag geschoben. Damit stellt dieser Befehl eine Division durch 2 dar, wobei sich das Vorzeichen nicht verändert. Das Carry-Flag kann dazu benutzt werden, um das Ergebnis zu runden.
Operation: Operation asr
Operanden: 0 ≤ d ≤ 31
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 010d dddd 0101

Flags im Status-Register (SREG):
ITH S V N Z C
---
S: Das S-Flag wird gesetzt, wenn entweder das N-Flag oder das V-Flag gesetzt ist. Wenn beide Flags gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gesetzt, wenn entweder das N-Flag oder das C-Flag gesetzt ist. Wenn beide Bits gleich sind, wird das V-Flag gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB (Bit 7) des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn das Bit 0 im Register Rd vor dem Schieben gesetzt war. War das Bit 0 vorher gelöscht, so wird auch das Carry-Flag gelöscht.

Beispiel:
ldi r16,$10    ;Die Dezimalzahl 16 in R16 laden
asr r16        ;R16 = R16/2 = 8

oder:

ldi r16,$FC    ;Die Dezimalzahl -4 in R16 laden
asr r16        ;R16 = R16/2 = -2

Impressum