Syntax: |
Operation: |
Operands: |
Program Counter: |
Opcode |
Comment |
Stack |
SBC Rd,Rr |
Rd = Rd - Rr - C |
0 <= d <= 31, 0 <= r <= 31 |
PC = PC + 1 |
000010rdddddrrrr |
Subtracts two registers and subtracts with the C flag, and places the result in the destination register Rd.
I |
– |
||
T |
– |
||
H |
⇔ |
~Rd3 AND Rr3 OR Rr3 AND R3 OR R3 AND ~Rd3 |
Set if there was a borrow from bit 3; cleared otherwise. |
S |
⇔ |
N XOR V, for signed tests. |
|
V |
⇔ |
Rd7 AND ~Rr7 AND ~R7 OR ~Rd7 AND Rr7 AND R7 |
Set if two's complement overflow resulted from the operation; cleared otherwise. |
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 AND Z |
The previous value remains unchanged when the result is zero; cleared otherwise. |
C |
⇔ |
~Rd7 AND Rr7 OR Rr7 AND R7 OR R7 AND ~Rd7 |
Set if the absolute value of the contents of Rr plus previous carry is larger than the absolute value of the Rd; cleared otherwise. |
R (Result) |
R (Result) equals Rd after the operation. |
; Subtract r1:r0 from r3:r2 sub r2,r0 ; Subtract low byte sbc r3,r1 ; Subtract with carry high byte
1 (2 bytes)
Name |
Cycles |
AVRe |
1 |
AVRxm |
1 |
AVRxt |
1 |
AVRrc |
1 |