|
CMP -- Compare Two Operands
Opcode | Instruction | Clocks |
Description | Example |
3C ib | cmpb imm8,al | 2 |
Compare immediate byte to AL | cmpb $0x7f,%al |
3D iw | cmpw imm16,ax | 2 |
Compare immediate word to AX | cmpw $0x7fff,%ax |
3D id | cmpl imm32,eax | 2 |
Compare immediate dword to EAX | cmpl $0x7fffffff,%eax |
80 /7 ib | cmpb imm8,r/m8 | 2/5 |
Compare immediate byte to r/m byte | cmpb $0x7f,%dl
cmpb $0x7f,(%ebx,1)
cmpb $0x7f,m8(%ebx,1)
cmpb $0x7f,m8(%ebx,%ebp,1) |
81 /7 iw | cmpw imm16,r/m16 | 2/5 |
Compare immediate word to r/m word | cmpw $0x7fff,%cx
cmpw $0x7fff,(%ebx,1)
cmpw $0x7fff,(%ebx,2)
cmpw $0x7fff,(%ebx,%ebp,1) |
81 /7 id | cmpl imm32,r/m32 | 2/5 |
Compare immediate dword to r/m dword | cmpl $0x7fffffff,%ecx
cmpl $0x7fffffff,(%ebx,2)
cmpl $0x7fffffff,(%ebx,4)
cmpl $0x7fffffff,(%ebx,%ebp,1) |
83 /7 ib | cmpw imm8,r/m16 | 2/5 |
Compare sign extended immediate byte to r/m word | cmpw $0x7f,%cx
cmpw $0x7f,(%ebx,1)
cmpw $0x7f,(%ebx,2)
cmpw $0x7f,(%ebx,%ebp,1) |
83 /7 ib | cmpl imm8,r/m32 | 2/5 |
Compare sign extended immediate byte to r/m dword | cmpl $0x7f,%ecx
cmpl $0x7f,(%ebx,2)
cmpl $0x7f,(%ebx,4)
cmpl $0x7f,(%ebx,%ebp,1) |
38 /r | cmpb r8,r/m8 | 2/5 |
Compare byte register to r/m byte | cmpb %bh,%dl
cmpb %bh,(%ebx,1)
cmpb %bh,m8(%ebx,1)
cmpb %bh,m8(%ebx,%ebp,1) |
39 /r | cmpw r16,r/m16 | 2/5 |
Compare word register to r/m word | cmpw %bx,%cx
cmpw %bx,(%ebx,1)
cmpw %bx,(%ebx,2)
cmpw %bx,(%ebx,%ebp,1) |
39 /r | cmpl r32,r/m32 | 2/5 |
Compare dword register to r/m dword | cmpl %ebx,%ecx
cmpl %ebx,(%ebx,2)
cmpl %ebx,(%ebx,4)
cmpl %ebx,(%ebx,%ebp,1) |
3A /r | cmpb r/m8,r8 | 2/6 |
Compare r/m byte to byte register | cmpb %dl,%bh
cmpb (%ebx,1),%bh
cmpb m8(%ebx,1),%bh
cmpb m8(%ebx,%ebp,1),%bh |
3B /r | cmpw r/m16,r16 | 2/6 |
Compare r/m word to word register | cmpw %cx,%bx
cmpw (%ebx,1),%bx
cmpw (%ebx,2),%bx
cmpw (%ebx,%ebp,1),%bx |
3B /r | cmpl r/m32,r32 | 2/6 |
Compare r/m dword to dword register | cmpl %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]
|