Section courante

A propos

Section administrative du site

Assembleur 80x86

CMP

INTEL 8088+, x86-64 Compare two operands

Syntaxe

CMP Opérande Cible, Opérande Source

Paramètres

Nom Description
Opérande Cible Ce paramètre permet d'indiquer l'opérande de base sur lequel l'opération de comparaison est effectuée.
Opérande Source Ce paramètre permet d'indiquer l'opérande supplémentaire avec laquelle la comparaison est effectué

Description

Cette instruction offre la possibilité essentielle de comparer 2 registres ou emplacements de mémoire. Le résultat de la comparaison est indiqué par les indicateurs (registre drapeau du microprocesseur). La comparaison est effectuée en soustrayant le deuxième opérande (Opérande Source) du premier opérande (Opérande Cible), puis en plaçant les indicateurs d'état de la même manière que l'instruction SUB. Lorsqu'une valeur immédiate est utilisée en tant qu'opérande, elle est étendue à la longueur du premier opérande.

Remarques

Algorithme

MODULE CMP(opérande1,opérande2)
   Drapeauopérande1 = opérande2

Mnémonique

Instruction Opcode Description
CMP AL, imm8 3Ch ib Compare une valeur 8 bits immédiate avec le contenu du registre AL.
CMP AX, imm16 3Dh iw Compare une valeur 16 bits immédiate avec le contenu du registre AX.
CMP EAX, imm32 3Dh iw Compare une valeur 32 bits immédiate avec le contenu du registre EAX.
CMP RAX, imm32 3Dh id Compare une valeur 32 bits immédiate avec le contenu du registre RAX.
CMP reg/mem8, imm8 80h /7 ib Compare une valeur 8 bits immédiate avec le contenu d'une opérande mémoire ou d'un registre 8 bits.
CMP reg/mem16, imm16 81h /7 iw Compare une valeur 16 bits immédiate avec le contenu d'une opérande mémoire ou d'un registre 16 bits.
CMP reg/mem32, imm32 81h /7 id Compare une valeur 32 bits immédiate avec le contenu d'une opérande mémoire ou d'un registre 32 bits.
CMP reg/mem64, imm32 81h /7 id Compare une valeur 32 bits immédiate avec le contenu d'une opérande mémoire ou d'un registre 64 bits.
CMP reg/mem16, imm8 83h /7 ib Compare une valeur 8 bits immédiate avec le contenu d'une opérande mémoire ou d'un registre 16 bits.
CMP reg/mem32, imm8 83h /7 ib Compare une valeur 8 bits immédiate avec le contenu d'une opérande mémoire ou d'un registre 32 bits.
CMP reg/mem64, imm8 83h /7 ib Compare une valeur 8 bits immédiate avec le contenu d'une opérande mémoire ou d'un registre 64 bits.
CMP reg/mem8, reg8 38h /r Compare le contenu d'une opérande mémoire ou d'un registre 8 bits avec un registre 8 bits.
CMP reg/mem16, reg16 39h /r Compare le contenu d'une opérande mémoire ou d'un registre 16 bits avec un registre 16 bits.
CMP reg/mem32, reg32 39h /r Compare le contenu d'une opérande mémoire ou d'un registre 32 bits avec un registre 32 bits.
CMP reg/mem64, reg64 39h /r Compare le contenu d'une opérande mémoire ou d'un registre 64 bits avec un registre 64 bits.
CMP reg8, reg/mem8 39h /r Compare le contenu d'une opérande mémoire ou d'un registre 8 bits avec un registre 8 bits.
CMP reg16, reg/mem16 3Bh /r Compare le contenu d'une opérande mémoire ou d'un registre 16 bits avec un registre 16 bits.
CMP reg32, reg/mem32 3Bh /r Compare le contenu d'une opérande mémoire ou d'un registre 32 bits avec un registre 32 bits.
CMP reg64, reg/mem64 3Bh /r Compare le contenu d'une opérande mémoire ou d'un registre 64 bits avec un registre 64 bits.

Cycles d'horloge

Opérande Cycle d'horloge Taille en octets
8086 80286 80386 80486
reg,reg 3 2 2 1 2
mem,reg 9+EA 7 5 2 2 à 4
reg,mem 9+EA 6 6 2 2 à 4
mem,immed 10+EA 6 5 2 3 à 6
reg,immed 4 3 2 1 3 à 4
accum,immed 4 3 2 1 2 à 3

Exceptions

Message Mode réel Virtuel 8086 Mode protégé Description
#SS(Pile) X X X Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique
#GP(Protection général) X X X Une adresse mémoire dépasse la limite du segment de données ou n'est pas canonique
    X Un segment de données nulle est utilisé comme référence mémoire
#PF(Faute de page)   X X Une faute de page résultat de l'exécution de l'instruction
#AC(Vérifie l'alignement)   X X Un désalignement de la référence mémoire est effectué quand une vérification d'alignement est activé

Exemples

L'exemple suivant permet de comparer le registre EAX avec la valeur 0 :

  1. CMP EAX,0

L'exemple suivant permet de comparer le registre CL avec le registre BL :

  1. CMP CL,BL

L'exemple suivant permet d'effectuer le calcul de «AX-2000h» et de mettre les drapeaux à jour :

  1. CMP AX,2000h

L'exemple suivant permet de soustraire CH du contenu en octets du segment de données adressé par DI et les drapeaux sont mis à jour :

  1. CMP [DI],CH

Le contenu en octets de l'emplacement de mémoire de données 1234h est soustrait du registre AH et les drapeaux sont mis à jour :

  1. CMP AH,[1234h]

L'exemple suivant permet de comparer le registre AX avec le registre BX :

  1. CMP AX,BX

L'exemple suivant permet de comparer le registre EAX avec le registre EBX :

  1. CMP EAX,EBX

L'exemple suivant permet de comparer le registre RAX avec le registre RBX :

  1. CMP RAX,RBX

L'exemple suivant permet de comparer le registre EAX avec un emplacement mémoire absolue :

  1. CMP EAX,[01234ABC]

L'exemple suivant permet de comparer le registre EAX avec la valeur d'un symbole :

  1. CMP EAX,UnSymbole

L'exemple suivant permet de comparer le registre EAX avec l'adresse mémoire d'un symbole :

  1. CMP EAX,[UnSymbole]

L'exemple suivant permet de comparer le registre EAX avec la valeur 0 et de sauter à l'étiquette suivante si la valeur n'est pas zéro :

  1. CMP EAX,0
  2. JNZ @f

L'exemple suivant permet de retourner 1 si le caractère spécifié par la variable «Chr» est une lettre de l'alphabet (majuscule ou minuscule) ou 0 s'il ne l'est pas :

  1. XOR AL,AL 
  2. MOV CL,Chr 
  3. AND CL,0DFh 
  4. CMP CL,'A' 
  5. JB @1 
  6. CMP CL,'Z' 
  7. JA @1 
  8. INC AL 
  9. @1:

Voir également

Instruction assembleur 80x86 - Instruction SUB
Instruction assembleur 80x86 - Instruction CMPS
Instruction assembleur 80x86 - Instruction SCAS

Références

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 808
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 403
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 94 à 96.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 206 à 208.

Dernière mise à jour : Lundi, le 1 septembre 2014