AngoLinux

80386 Programmer's Reference Manual -- Opcode CMP


CMP -- Compare Two Operands

OpcodeInstructionClocks DescriptionExample
3C ibcmpb imm8,al2 Compare immediate byte to ALcmpb $0x7f,%al
3D iwcmpw imm16,ax2 Compare immediate word to AXcmpw $0x7fff,%ax
3D idcmpl imm32,eax2 Compare immediate dword to EAXcmpl $0x7fffffff,%eax
80 /7 ibcmpb imm8,r/m82/5 Compare immediate byte to r/m bytecmpb $0x7f,%dl
cmpb $0x7f,(%ebx,1)
cmpb $0x7f,m8(%ebx,1)
cmpb $0x7f,m8(%ebx,%ebp,1)
81 /7 iwcmpw imm16,r/m162/5 Compare immediate word to r/m wordcmpw $0x7fff,%cx
cmpw $0x7fff,(%ebx,1)
cmpw $0x7fff,(%ebx,2)
cmpw $0x7fff,(%ebx,%ebp,1)
81 /7 idcmpl imm32,r/m322/5 Compare immediate dword to r/m dwordcmpl $0x7fffffff,%ecx
cmpl $0x7fffffff,(%ebx,2)
cmpl $0x7fffffff,(%ebx,4)
cmpl $0x7fffffff,(%ebx,%ebp,1)
83 /7 ibcmpw imm8,r/m162/5 Compare sign extended immediate byte to r/m wordcmpw $0x7f,%cx
cmpw $0x7f,(%ebx,1)
cmpw $0x7f,(%ebx,2)
cmpw $0x7f,(%ebx,%ebp,1)
83 /7 ibcmpl imm8,r/m322/5 Compare sign extended immediate byte to r/m dwordcmpl $0x7f,%ecx
cmpl $0x7f,(%ebx,2)
cmpl $0x7f,(%ebx,4)
cmpl $0x7f,(%ebx,%ebp,1)
38 /rcmpb r8,r/m82/5 Compare byte register to r/m bytecmpb %bh,%dl
cmpb %bh,(%ebx,1)
cmpb %bh,m8(%ebx,1)
cmpb %bh,m8(%ebx,%ebp,1)
39 /rcmpw r16,r/m162/5 Compare word register to r/m wordcmpw %bx,%cx
cmpw %bx,(%ebx,1)
cmpw %bx,(%ebx,2)
cmpw %bx,(%ebx,%ebp,1)
39 /rcmpl r32,r/m322/5 Compare dword register to r/m dwordcmpl %ebx,%ecx
cmpl %ebx,(%ebx,2)
cmpl %ebx,(%ebx,4)
cmpl %ebx,(%ebx,%ebp,1)
3A /rcmpb r/m8,r82/6 Compare r/m byte to byte registercmpb %dl,%bh
cmpb (%ebx,1),%bh
cmpb m8(%ebx,1),%bh
cmpb m8(%ebx,%ebp,1),%bh
3B /rcmpw r/m16,r162/6 Compare r/m word to word registercmpw %cx,%bx
cmpw (%ebx,1),%bx
cmpw (%ebx,2),%bx
cmpw (%ebx,%ebp,1),%bx
3B /rcmpl r/m32,r322/6 Compare r/m dword to dword registercmpl %ecx,%ebx
cmpl (%ebx,2),%ebx
cmpl (%ebx,4),%ebx
cmpl (%ebx,%ebp,1),%ebx

Operation




LeftSRC - SignExtend(RightSRC);
(* CMP does not store a result; its purpose is to set the flags *)

Description

CMP subtracts the second operand from the first but, unlike the SUB instruction, does not store the result; only the flags are changed. CMP is typically used in conjunction with conditional jumps and the SETcc instruction. (Refer to Appendix D for the list of signed and unsigned flag tests provided.) If an operand greater than one byte is compared to an immediate byte, the byte value is first sign-extended.

Flags Affected

OF, SF, ZF, AF, PF, and CF as described in Appendix C

Protected Mode Exceptions

#GP(0) for an illegal memory operand effective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page fault

Real Address Mode Exceptions

Interrupt 13 if any part of the operand would lie outside of the effective address space from 0 to 0FFFFH

Virtual 8086 Mode Exceptions

Same exceptions as in Real Address Mode; #PF(fault-code) for a page fault


[Home Page dell'ITIS "Fermi"] [80386 Programmer's Reference Manual Index] [Previous] [Next]