Assembleur 80x86 | CMPXCHG16B |
---|---|
x86-64+ | Compare and Exchange Sixteen Bytes |
Syntaxe
CMPXCHG16B dest |
Paramètres
Nom | Description |
---|---|
dest | Ce paramètre permet d'indiquer le nombre de 128 bits à traiter. |
Description
Cette instruction permet de comparer un nombre de 128 bits et les échanges si la condition est vrai.
Algorithme
MODULE CMPXCHG16B(dest) SI RDX:RAX = dest ALORS ZF ← 1 dest ← RCX:RBX SINON ZF ← 0 RDX:RAX ← dest FIN SI |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
CMPXCHG16B mem128 | 0Fh C7h /1 m128 | Compare la paire de registres EDX:EAX à l'emplacement mémoire de 128 bits. S'ils sont égale, alors fixe le drapeau de zéro à 1 et copie RCX:RBX dans l'emplacement mémoire. Autrement, copie l'emplacement mémoire dans RDX:RAX et efface le drapeau de zéro. |
Exceptions
Message | Mode réel | Virtuel 8086 | Mode protégé | Description |
---|---|---|---|---|
#UD(Opcode invalide) | X | X | X | L'instruction CMPXCHG16B n'est pas supporté, lequel est indiquer par le bit 13 du registre ECX de l'instruction CPUID, fonction 0000_0001h. |
X | L'opérande est un registre. | |||
#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 | |||
X | L'opérande mémoire pour l'instruction CMPXCHG16B n'est pas aligné avec une limite de 16 octets. | |||
#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
Cet exemple permet de tester la valeur d'un octet de deux adresses :
- MOVZX RBX,Byte Ptr [RAX]
- MOVZX RCX,Byte Ptr [RAX]
- MOVZX RDX,Byte Ptr [RAX]
- MOVZX RAX,Byte Ptr [RDI]
- CMPXCHG16B OWord Ptr [RAX]
Voir également
Instruction assembleur 80x86 - Instruction CMPXCHG
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 236 à 238.
Dernière mise à jour : Samedi, le 2 août 2014