Doubt regarding the CMP instruction of the 8086 microprocessor
The cmp (compare) instruction is identical to the sub (subtract without borrow) instruction with one important difference - it does not store the difference back into the destination operand.

The syntax of a subtract instruction is:

sub    dest, src        dest = dest - src and set flags


The generic form of the instruction is:

cmp     dest, src       perform dest - src and set flags


so dest is a bit of a misnomer in this case, since nothing is stored.

The carry flag C is set after a cmp operation if subtracting src from dest requires a borrow. This occurs only when dest is less than src where dest and src are both unsigned values.  For signed operands, the C flag has no meaning.

The various forms are (in each case, the first op is dest, the second is src):

cmp     reg, reg
cmp     reg, mem
cmp     mem, reg
cmp     reg, immediate data
cmp     mem, immediate data
cmp     eax/ax/al, immediate data 


To be complete, here is the rundown on the other flags:

The zero flag Z is set if and only if dest = src.

The sign S and overflow O flags are only vald if the operands are considered signed (i.e., just the opposite of the C flag). 

For signed comparisons, the S (sign) and O (overflow) flags, taken together, have the following meaning:

If ((S=0) and (O=1)) or ((S=1) and (O=0)) then dest &lt; src

If ((S=0) and (O=0)) or ((S=1) and (O=1)) then dest >= src