Assembleur 80x86 | CMPS |
---|---|
INTEL 8088+ | Compare String |
Syntaxe
CMPS destination,source |
Paramètres
Nom | Description |
---|---|
destination | Ce paramètre permet d'indiquer l'adresse à utiliser pour faire la comparaison. |
source | Ce paramètre permet d'indiquer l'adresse supplémentaire à utiliser pour faire la comparaison. |
Description
Cette instruction permet d'effectuer la comparaison d'un octet, d'un mot, double mot ou du quadruple mot spécifié avec l'opérande source et destination spécifié et fixe l'état des drapeaux du registres EFLAGS en fonction des résultats de la comparaison.
Algorithme
MODULE CMPS(destination,source) Fixe les drapeaux d'états de (destination = source) SI (comparaison d'octet) ALORS SI DF = 0 ALORS (E)SI ← (E)SI + 1 (E)DI ← (E)DI + 1 SINON (E)SI ← (E)SI - 1 (E)DI ← (E)DI - 1 FIN SI SINON SI (comparison d'un mot) ALORS SI DF = 0 ALORS (E)SI ← (E)SI + 2 (E)DI ← (E)DI + 2 SINON (E)SI ← (E)SI - 2 (E)DI ← (E)DI - 2 FIN SI SINON SI (comparaison d'un double mot) ALORS SI DF = 0 ALORS (E)SI ← (E)SI + 4 (E)DI ← (E)DI + 4 SINON (E)SI ← (E)SI - 4 (E)DI ← (E)DI - 4 FIN SI SINON SI (comparaison d'un quadruple mot) ALORS SI DF = 0 ALORS (E)SI ← (E)SI + 8 (E)DI ← (E)DI + 8 SINON (E)SI ← (E)SI - 8 (E)DI ← (E)DI - 8 FIN SI FIN SI |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
CMPS mem8, mem8 | A6h | Compare l'octet à l'adresse DS:(R)SI avec l'octet à l'adresses ES:(R)DI et incrémente ou décrémente les registres (R)SI et (R)DI |
CMPS mem16, mem16 | A7h | Compare le mot à l'adresse DS:(R)SI avec le mot à l'adresses ES:(R)DI et incrémente ou décrémente les registres (R)SI et (R)DI |
CMPS mem32, mem32 | A7h | Compare le double mot à l'adresse DS:(R)SI avec le double mot à l'adresses ES:(R)DI et incrémente ou décrémente les registres (R)SI et (R)DI |
CMPS mem64, mem64 | A7h | Compare le quadruple mot à l'adresse DS:(R)SI avec le quadruple mot à l'adresses ES:(R)DI et incrémente ou décrémente les registres (R)SI et (R)DI |
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é |
Exemple
L'exemple suivant permet de comparer deux chaînes de caractères en mode réel en utilisant l'instruction CMPS :
Voir également
Instruction assembleur 80x86 - Instruction CMP
Instruction assembleur 80x86 - Instruction SCAS
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 808
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 97.
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 219 à 224.