Titelbild Mikrocontroller

D-Befehle


oben 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):
ITH S V N Z C
----
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


Impressum