# explanation required

I went through the following question / answer :

Assume that AX = BBBBh  and BX = BBBBh. What will be the contents
of the AX register after the instruction:

is executed.

A. BBBBh    B. BBF6h   C. BB76h    D. BB78h    E. None of these

What will the condition code bits be after the instruction is
executed.

A. SF=0 ZF=0 OF=0 CF=1      B. SF=0 ZF=0 OF=1 CF=1

C. SF=0 ZF=1 OF=0 CF=1      D. SF=1 ZF=0 OF=1 CF=1    E. None of the above

I didn't understand why the OF is set to 1 can someone explain to me that ?

Thanks.
LVL 2
###### Who is Participating?

Commented:
There is an important distinction between the carry flag (CF) and the overflow flag (OF) :

CF : set if the LSB (least significant bit) of the neighboring more significant value would have been set by the instruction (useful for unsigned accition eg.)
OF : set if the MSB (most significant bit) changes due to the instruction (useful for signed addition eg.)

For example (in binary) :

11111111 + 11111111 = 111111110

so, there is carry (because an extra 9th bit is set), but there is no overflow (because the 8th bit hasn't changed - it was 1 before and after).

And also :

01111111 + 01111111 = 11111110

so there is no carry (the result still fits in the 8 bits), but there is overflow (because the 8th bit has changed from 0 to 1).
0

Commented:
>> I didn't understand why the OF is set to 1 can someone explain to me that ?

OF is the overflow flag, and it is set if the previous instruction caused an (arithmetic) overflow.

In this case, ADD AL,BL caused an overflow, so the flag is set.
0

Author Commented:
I understand that :

BBh + BBh caused a carry that's why CF is set ;

But what confuses me is when do we say that there is Overflow; do you mean every time we have a carry we'll have overflow ?
Is there a case when we have overflow and not a carry ? or vice versa ?

Thanks
0

Author Commented:
Can the carry flag be set 1 in a substraction operation :

e.g : sub 11h, 44h
0

Commented:
>> Can the carry flag be set 1 in a substraction operation :

In the case of a subtraction, the CF is set in case of what is called a borrow :

00000001 - 00000010 = 11111111

In order for this (unsigned) subtraction to work, we need a borrow, to add a 9th 1 bit to the first operand :

100000001 - 00000010 = 11111111

so the CF flag is set.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.