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):
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
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):
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
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):
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)
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):
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
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):
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
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: |
|
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):
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