# ADC Add With Carry

Adds the data in the operand with the contents of the accumulator. Add 1 to the result if the carry flag is set. Store the final result in the accumulator.

### Binary/Decimal mode

If the d flag is clear then binary addition is performed. If the d flag set then Binary Coded Decimal (BCD) addition is performed.

### Data size

On all processors, the data added from memory is 8-bit. However, for 16-bit processors with the m flag is clear then the data added is 16-bit with the low-order 8-bits at the effective address and the high-order 8-bits at the effective address plus one.

### Multi-precision arithmetic

In multi-precision (multi-word) arithmetic, the carry flag should be cleared before the low-order words are added. The addition will generate a new carry flag value based on that addition which will then be passed on to the next word.

For example, to add 1 to a 16-bit value at &70 on 8-bit processors:

```
1 CLC ; Clear carry before first addition
2 LDA &70 ; Add 1 to low-order byte
3 ADC #1
4 STA &70
5 LDA &71 ; Add 0 to high order byte
6 ADC #0 ; This will add 1 if carry was set
7 STA &71 ; in the low-order byte
```

##### Flags Affected

Flags |
| ||||||||
---|---|---|---|---|---|---|---|---|---|

n | Set if most-significant bit of result is set | ||||||||

v | Set if signed overflow | ||||||||

z | Set if result is zero | ||||||||

c | Set if unsigned overflow, clear if valid unsigned result |

##### Instructions

Syntax | Opcode | Available on: | # of | # of | Addressing Mode | ||
---|---|---|---|---|---|---|---|

(hex) |
6502 | 65C02 | 65816 | bytes | cycles | ||

ADC #const | 69 | x | x | x | 2^{1} |
2^{2, 5} |
Immediate |

ADC addr | 6D | x | x | x | 3 | 4^{2, 5} |
Absolute |

ADC long | 6F | x | 4 | 5^{2, 5} |
Absolute Long | ||

ADC dp | 65 | x | x | x | 2 | 3^{2, 3, 5} |
Direct Page |

ADC (dp) | 72 | x | x | 2 | 5^{2, 3, 5} |
Direct Page Indirect | |

ADC [dp] | 67 | x | 2 | 6^{2, 3, 5} |
Direct Page Indirect Long | ||

ADC addr,X | 7D | x | x | x | 3 | 4^{2, 4, 5} |
Absolute Indexed X |

ADC long,X | 7F | x | 4 | 5^{2, 5} |
Absolute Long Indexed X | ||

ADC addr,Y | 79 | x | x | x | 3 | 4^{2, 4, 5} |
Absolute Indexed Y |

ADC dp,X | 75 | x | x | x | 2 | 4^{2, 3, 5} |
Direct Page Indexed X |

ADC (dp,X) | 61 | x | x | x | 2 | 6^{2, 3, 5} |
Direct Page Indexed Indirect X |

ADC (dp),Y | 71 | x | x | x | 2 | 5^{2, 3, 4, 5} |
Direct Page Indirect Indexed Y |

ADC [dp],Y | 77 | x | 2 | 6^{2, 3, 5} |
Direct Page Indirect Long Indexed Y | ||

ADC sr,S | 63 | x | 2 | 4^{2, 5} |
Stack Relative | ||

ADC (sr,S),Y | 73 | x | 2 | 7^{2, 5} |
Stack Relative Indirect Indexed Y |

### Notes:

- 65816: Add 1 byte if m=0 (16-bit memory/accumulator)
- 65816: Add 1 cycle if m=0 (16-bit memory/accumulator)
- 65816: Add 1 cycle if low byte of Direct Page register is not 0
- Add 1 cycle if adding index crosses a page boundary
- 65C02: Add 1 cycle if d=1