1 <!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML 2.0//EN">
4 <TITLE>80386 Programmer's Reference Manual -- Opcode CMP
</TITLE>
7 <B>up:
</B> <A HREF=
"c17.htm">
8 Chapter
17 --
80386 Instruction Set
</A><BR>
9 <B>prev:
</B><A HREF=
"CMC.htm"> CMC Complement Carry Flag
</A><BR>
10 <B>next:
</B><A HREF=
"CMPS.htm"> CMPS/CMPSB/CMPSW/CMPSD Compare String Operands
</A>
14 <H1>CMP -- Compare Two Operands
</H1>
18 Opcode Instruction Clocks Description
20 3C ib CMP AL,imm8
2 Compare immediate byte to AL
21 3D iw CMP AX,imm16
2 Compare immediate word to AX
22 3D id CMP EAX,imm32
2 Compare immediate dword to EAX
23 80 /
7 ib CMP r/m8,imm8
2/
5 Compare immediate byte to r/m
25 81 /
7 iw CMP r/m16,imm16
2/
5 Compare immediate word to r/m
27 81 /
7 id CMP r/m32,imm32
2/
5 Compare immediate dword to r/m
29 83 /
7 ib CMP r/m16,imm8
2/
5 Compare sign extended immediate
31 83 /
7 ib CMP r/m32,imm8
2/
5 Compare sign extended immediate
33 38 /r CMP r/m8,r8
2/
5 Compare byte register to r/m
35 39 /r CMP r/m16,r16
2/
5 Compare word register to r/m
37 39 /r CMP r/m32,r32
2/
5 Compare dword register to r/m
39 3A /r CMP r8,r/m8
2/
6 Compare r/m byte to byte
41 3B /r CMP r16,r/m16
2/
6 Compare r/m word to word
43 3B /r CMP r32,r/m32
2/
6 Compare r/m dword to dword
50 LeftSRC - SignExtend(RightSRC);
51 (* CMP does not store a result; its purpose is to set the flags *)
56 CMP subtracts the second operand from the first but, unlike the
57 <A HREF=
"SUB.htm">SUB
</A>
58 instruction, does not store the result; only the flags are changed. CMP is
59 typically used in conjunction with conditional jumps and the
60 <A HREF=
"SETcc.htm">SETcc
</A>
61 instruction. (Refer to Appendix D for the list of signed and unsigned flag
62 tests provided.) If an operand greater than one byte is compared to an
63 immediate byte, the byte value is first sign-extended.
65 <H2>Flags Affected
</H2>
67 OF, SF, ZF, AF, PF, and CF as described in
<A HREF=
"appc.htm">Appendix C
</A>
69 <H2>Protected Mode Exceptions
</H2>
71 #GP(
0) for an illegal memory operand effective address in the CS, DS, ES,
72 FS, or GS segments; #SS(
0) for an illegal address in the SS segment;
73 #PF(fault-code) for a page fault
75 <H2>Real Address Mode Exceptions
</H2>
77 Interrupt
13 if any part of the operand would lie outside of the effective
78 address space from
0 to
0FFFFH
80 <H2>Virtual
8086 Mode Exceptions
</H2>
82 Same exceptions as in Real Address Mode; #PF(fault-code) for a page fault
88 <B>up:
</B> <A HREF=
"c17.htm">
89 Chapter
17 --
80386 Instruction Set
</A><BR>
90 <B>prev:
</B><A HREF=
"CMC.htm"> CMC Complement Carry Flag
</A><BR>
91 <B>next:
</B><A HREF=
"CMPS.htm"> CMPS/CMPSB/CMPSW/CMPSD Compare String Operands
</A>