Assembleur 80x86 | DEC |
---|---|
INTEL 8088+, x86-64 | Decrement |
Syntaxe
DEC opérande |
Paramètres
Nom | Description |
---|---|
opérande | Ce paramètre permet d'indiquer l'opérande a décrémenté |
Description
Cette instruction est un quelque sorte un raccourci de l'instruction SUB, en effet celle-ci décrément de 1 le registre ou l'adresse mémoire spécifié, le résultat obtenu est donc identique à celui d'un SUB avec 1 comme 2ième opérande.
Remarques
- Les drapeaux OF, SF, ZF, AF, PF et CF sont définis en fonction du résultat de l'instruction SUB.
- L'instruction DEC peut être utilisée avec un préfixe LOCK pour permettre l'exécution de l'instruction de manière atomique.
- Mode Long : En mode 64 bits, DEC r16 et DEC r32 ne sont pas codables (car les opcodes 48h à 4Fh sont des préfixes REX). Sinon, la taille de fonctionnement par défaut du mode 64 bits de l'instruction est de 32 bits. L'utilisation du préfixe REX.R permet d'accéder à des registres supplémentaires (R8 à R15). L'utilisation du préfixe REX.W favorise le fonctionnement à 64 bits.
Algorithme
MODULE DEC(opérande) opérande ← opérande - 1 |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
DEC reg/mem8 | FEh /1 | Décrémente de 1 le contenu d'un emplacement de registre ou mémoire 8 bits |
DEC reg/mem16 | FFh /1 | Décrémente de 1 le contenu d'un emplacement de registre ou mémoire 16 bits |
DEC reg/mem32 | FFh /1 | Décrémente de 1 le contenu d'un emplacement de registre ou mémoire 32 bits |
DEC reg/mem64 | FFh /1 | Décrémente de 1 le contenu d'un emplacement de registre ou mémoire 64 bits |
DEC reg16 | (48h + rw) | Décrémente de 1 le contenu d'un registre 16 bits |
DEC reg32 | (48h +rd) | Décrémente de 1 le contenu d'un registre 32 bits |
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é |
Exemples
L'exemple suivant permet de décrémenter de 1 la valeur du registre AX :
- DEC AX
L'exemple suivant permet d'effectuer l'opération «BL = BL - 1» :
- DEC BL
L'exemple suivant permet de soustraire 1 du contenu en octets de l'emplacement de mémoire du segment de données spécifié par le registre BX :
- DEC BYTE PTR[BX]
Voir également
Instruction assembleur 80x86 - Instruction INC
Instruction assembleur 80x86 - Instruction SUB
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 810
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 404
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 107 à 108.
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 355 à 357.