Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ADDC versus ADD

Tags:

assembly

8051

I'm trying to figure out the difference between ADDC and ADD instructions for 8051 microcontrollers.

Description: ADD and ADDC both add the value operand to the value of the Accumulator, leaving the resulting value in the Accumulator. The value operand is not affected. ADD and ADDC function identically except that ADDC adds the value of operand as well as the value of the Carry flag whereas ADD does not add the Carry flag to the result.

How does ADDC "add the carry flag to the result"? The result is in the accumulator, how does it add a carry flag to it?

Currently, as I see it, here is how they work:

MOV A, #0xFF
ADD A, #0x01  

The result of this is A = 0x01 and C = 1

With ADDC,

MOV A, #0xFF
ADDC A, #0x01  

The result of this is A = 0x01 and C = 1

Maybe my tests are not right or something. Can someone explain the difference between ADD and ADDC?

like image 422
user2461391 Avatar asked Mar 21 '23 07:03

user2461391


1 Answers

It's the value of the carry flag before the addition that is relevant. ADDC includes it in the sum while ADD doesn't.

ADDC X, Y stores X + Y + Carry in X.

ADD only stores X + Y in X.

The purpose of this is to allow chained addition on multi-word "big integers." This is accomplished by adding each word from least to most significant. Using ADDC ensures that carries from previous additions are carried to the next-higher significant word.

like image 149
TypeIA Avatar answered Mar 30 '23 03:03

TypeIA