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 Destination ← Opérande Source SINON drapeau ZF ← 0 accumulateur ← Opé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 :
- 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