* remove "\r" nonsense
[mascara-docs.git] / i386 / i386.reference / CMP.htm
blob0686b2375b496fc23a5256b7ab977dfe89981e4a
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2 <HTML>
3 <HEAD>
4 <TITLE>80386 Programmer's Reference Manual -- Opcode CMP</TITLE>
5 </HEAD>
6 <BODY>
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>
11 <P>
12 <HR>
13 <P>
14 <H1>CMP -- Compare Two Operands</H1>
17 <PRE>
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
24 byte
25 81 /7 iw CMP r/m16,imm16 2/5 Compare immediate word to r/m
26 word
27 81 /7 id CMP r/m32,imm32 2/5 Compare immediate dword to r/m
28 dword
29 83 /7 ib CMP r/m16,imm8 2/5 Compare sign extended immediate
30 byte to r/m word
31 83 /7 ib CMP r/m32,imm8 2/5 Compare sign extended immediate
32 byte to r/m dword
33 38 /r CMP r/m8,r8 2/5 Compare byte register to r/m
34 byte
35 39 /r CMP r/m16,r16 2/5 Compare word register to r/m
36 word
37 39 /r CMP r/m32,r32 2/5 Compare dword register to r/m
38 dword
39 3A /r CMP r8,r/m8 2/6 Compare r/m byte to byte
40 register
41 3B /r CMP r16,r/m16 2/6 Compare r/m word to word
42 register
43 3B /r CMP r32,r/m32 2/6 Compare r/m dword to dword
44 register
45 </PRE>
47 <H2>Operation</H2>
49 <PRE>
50 LeftSRC - SignExtend(RightSRC);
51 (* CMP does not store a result; its purpose is to set the flags *)
52 </PRE>
54 <H2>Description</H2>
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
85 <P>
86 <HR>
87 <P>
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>
92 </BODY>