The ADD instruction performs the basic operation of adding a number from the source and a number from the destination. It is like any basic addition that we perform in our day to day life, no difference what so ever. But the ADC instruction on the other hand, adds the carry flag into the result. The ADC instruction is basically adding the carry which is generated by a particular operation into the result.
ADD AX,BX : This is register addressing mode instruction that adds the content of BX to AX
ADC AX, 1234H: This is immediate addressing mode instruction that adds the immediate number 1234H to AX with the carry
and stores the result in AX
The source may be an immediate number, register or simply a memory location. The source can be specified in any of the 24 addressing modes available in the 8086 microprocessor. But the thing change when it comes to the specification of the destination part of the instruction. The destination can only be an register or a memory location, addressed in any of the 24 addressing mode, but it cannot be an immediate number, because the 8086 microprocessor simply cannot operate on two immediate data, at least one of them has to stored in a memory location or a register.
Valid: ADC AX,BX
Not Valid: ADC 1234H,0254H
The source and the destination must be of the same type in the ADD and ADC instructions. Basically they both can be a byte or word but cannot be different from each other. There is no need to mention that they both cannot be memory locations at the same time.