DEC - Decrement
Syntax: |
DEC Rd
|
Funktion: |
Dieser Befehl subtrahiert eine 1 vom Inhalt des angegebenen Registers und legt das
Ergebnis im Register ab. Das Carry-Flag wird dabei nicht verändert, so dass der Befehl
in einem Schleifenzähler verwendet werden kann, ohne die eigentlichen Berechnungen
zu beeinflussen.
Wenn mit vorzeichenlosen Werten gearbeitet wird, arbeiten nur die BREQ und BRNE
Verzweigungsbefehle korrekt. Wenn mit Zweierkomplement-Werten gearbeitet wird,
können alle vorzeichenbehaftete Verzweigungsbefehle verwendet werden.
|
Operation: |
Rd ← Rd - 1
|
Operanden: |
0 ≤ d ≤ 31
|
Programmzähler: |
PC ← PC + 1
|
Words: |
1 (2 Byte)
|
Zyklen: |
1
|
16 Bit Operations Code: |
1001 010d dddd 1010
|
Flags im Status-Register (SREG):
S: |
Das S-Flag wird gesetzt, wenn entweder das V-Flag oder das N-Flag gesetzt ist.
Wenn beide Bits 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. Ein Zweierkomplement-
Überlauf kann nur auftreten, wenn Rd vor der Operation den Wert 80h hatte.
|
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:
ldi r3,$10 ;Das Register R3 mit 10h laden
loop: add r1,r2 ;R1 und R2 addieren
dec r3 ;R3 um 1 vermindern
brne loop ;Verzweigung zum Label loop, wenn R3 ≠ 0
nop ;Weiter, wenn R3 = 0