Syntax: |
Operation: |
Operands: |
Program Counter: |
Opcode |
Comment |
Stack |
DEC Rd |
Rd = Rd - 1 |
0 <= d <= 31 |
PC = PC + 1 |
1001010ddddd1010 |
Subtracts one -1- from the contents of register Rd and places the result in the destination register Rd.
The C flag in SREG is not affected by the operation, thus allowing the DEC instruction to be used on a loop counter in multiple-precision computations.
When operating on unsigned values, only BREQ and BRNE branches can be expected to perform consistently. When operating on two's complement values, all signed branches are available.
I |
– |
||
T |
– |
||
H |
– |
||
S |
⇔ |
N XOR V, for signed tests. |
|
V |
⇔ |
~R7 AND R6 AND R5 AND R4 AND R3 AND R2 AND R1 AND R0 |
Set if two's complement overflow resulted from the operation; cleared otherwise. Two's complement overflow occurs only if Rd was 0x80 before the operation. |
N |
⇔ |
R7 |
Set if MSB of the result is set; cleared otherwise. |
Z |
⇔ |
~R7 AND ~R6 AND ~R5 AND ~R4 AND ~R3 AND ~R2 AND ~R1 AND ~R0 |
Set if the result is 0x00; cleared otherwise. |
C |
– |
||
R (Result) |
R (Result) equals Rd after the operation. |
ldi r17,0x10 ; Load constant in r17 loop: add r1,r2 ; Add r2 to r1 dec r17 ; Decrement r17 brne loop ; Branch if r17<>0 nop ; Continue (do nothing)
1 (2 bytes)
Name |
Cycles |
AVRe |
1 |
AVRxm |
1 |
AVRxt |
1 |
AVRrc |
1 |