Section courante

A propos

Section administrative du site

Assembleur 80x86

CMPXCHG

INTEL 80486+ CoMPare and eXCHanGe

Syntaxe

CMPXCHG Opérande Destination, Opérande Source

Description

A l'aide de l'instruction CMPXCHG, on peut comparer la destination avec l'accumulateur (AL, AX ou EAX). S'ils sont égaux, l'opérande de destination reçoit le contenu de l'opérande source, tandis que s'ils sont différents, l'accumulation (AL, AX ou EAX) reçoit le contenu de l'opérande de destination.

Algorithme

MODULE CMPXCHG(Opérande Destination, Opérande Source)
   SI accumulateur = Opérande Destination ALORS
      drapeau ZF ← 1
      Opérande DestinationOpérande Source
   SINON
      drapeau ZF ← 0
      accumulateurOpérande Destination
   FIN SI

Mnémonique

Instruction Opcode Description
CMPXCHG reg/mem8, reg8 0Fh B0h /r Compare de registre AL avec un emplacement 8 bits de registre ou mémoire. S'ils sont égale, le deuxième opérande est copié dans le première opérande.
CMPXCHG reg/mem16, reg16 0Fh B1h /r Compare de registre AX avec un emplacement 16 bits de registre ou mémoire. S'ils sont égale, le deuxième opérande est copié dans le première opérande.
CMPXCHG reg/mem32, reg32 0Fh B1h /r Compare de registre EAX avec un emplacement 32 bits de registre ou mémoire. S'ils sont égale, le deuxième opérande est copié dans le première opérande.
CMPXCHG reg/mem64, reg64 0Fh B1h /r Compare de registre RAX avec un emplacement 64 bits de registre ou mémoire. S'ils sont égale, le deuxième opérande est copié dans le première opérande.

Cycles d'horloge

Opérande Cycle d'horloge Taille en octets
8086 80286 80386 80486
reg,reg - - - 6 2
reg,mem - - - 7 2

Exceptions

Message Mode réel Virtuel 8086 Mode protégé Description
#SS(Pile non-canonique) 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 L'opérande de destination n'est pas dans un segment non écrivable
    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é

Exemple

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

  1. CMPXCHG CX,DX

Voir également

Instruction assembleur 80x86 - Instruction CMPXCHG8B
Instruction assembleur 80x86 - Instruction CMPXCHG16B

Références

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 233 à 235.

Dernière mise à jour : Samedi, le 2 août 2014