Assembleur 80x86 | NEG |
---|---|
INTEL 8088+, x86-64 | Negation |
Syntaxe
NEG registre |
NEG mémoire |
Description
Cette instruction permet d'effectuer le complément à 2 d'une opérande.
Remarques
- L'instruction NEG peut être utilisée avec un préfixe LOCK pour permettre l'exécution de l'instruction de manière atomique.
- En mode 64 bits, la taille de fonctionnement par défaut de l'instruction est de 32 bits. L'utilisation d'un préfixe REX sous la forme REX.R permet d'accéder à des registres supplémentaires (R8 à R15). L'utilisation d'un préfixe REX sous la forme de REX.W favorise le fonctionnement à 64 bits.
Algorithme
MODULE NEG(DEST) SI DEST = 0 ALORS CF ← 0 SINON CF ← 1 FIN SI DEST ← - (DEST) |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
NEG reg/mem8 | F6h /3 | Effectue une négation de compléments de 2 dans une opérande de registre ou mémoire 8 bits. |
NEG reg/mem16 | F7h /3 | Effectue une négation de compléments de 2 dans une opérande de registre ou mémoire 16 bits. |
NEG reg/mem32 | F7h /3 | Effectue une négation de compléments de 2 dans une opérande de registre ou mémoire 32 bits. |
NEG reg/mem64 | F7h /3 | Effectue une négation de compléments de 2 dans une opérande de registre ou mémoire 64 bits. |
Cycles d'horloge
Opérande | Cycle d'horloge | Taille en octets | |||
---|---|---|---|---|---|
8086 | 80286 | 80386 | 80486 | ||
reg | 3 | 2 | 2 | 1 | 2 |
mem | 16+EA | 7 | 6 | 3 | 2 à 4 |
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 | 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 faire la négation du contenu du registre AL :
- NEG AL
L'exemple suivant permet de faire la négation du contenu du registre AH :
- NEG AH
L'exemple suivant permet de faire la négation du contenu du registre AX :
- NEG AX
Le contenu en octets de l'emplacement de mémoire de segment de données spécifié par le registre BX est complété par deux :
- NEG BYTE PTR[BX]
L'exemple suivant permet de faire la négation du contenu du registre EAX :
- NEG EAX
L'exemple suivant permet de faire la négation du contenu du registre RAX :
- NEG RAX
L'exemple suivant permet de faire la négation du contenu de l'emplacement mémoire relatif [EDX+112] :
- NEG [EDX+112]
L'exemple suivant permet de faire la négation du contenu de l'emplacement mémoire relatif [RDX+12] :
- NEG [RDX+12]
L'exemple suivant permet de faire la négation du contenu de l'emplacement mémoire absolue [01234abc] :
- NEG [01234abc]
L'exemple suivant permet de faire la négation du contenu de l'emplacement mémoire définit par un symbole utilisateur :
- NEG [SymboleUtilisateur]
Cet exemple, en Turbo Pascal, permet de montrer l'affectation des nombres par cette instruction dans un langage de programmation évolué :
- Program NegSamples;
-
- Function AsmNeg(X:Integer):Integer;Assembler;ASM
- MOV AX,X
- NEG AX
- END;
-
- BEGIN
- WriteLn('NEG -1 = ',AsmNeg(-1));
- WriteLn('NEG 0 = ',AsmNeg(0));
- WriteLn('NEG 1 = ',AsmNeg(1));
- WriteLn('NEG 255 = ',AsmNeg(255));
- WriteLn('NEG 32767 = ',AsmNeg(32767));
- WriteLn('NEG TRUE = ',AsmNeg(Integer(TRUE)));
- WriteLn('NEG FALSE = ',AsmNeg(Integer(FALSE)));
- END.
on obtiendra le résultat suivant :
NEG -1 = 1NEG 0 = 0
NEG 1 = -1
NEG 255 = -255
NEG 32767 = -32767
NEG TRUE = -1
NEG FALSE = 0
Voir également
Instruction assembleur 80x86 - Instruction AND
Instruction assembleur 80x86 - Instruction NEG
Instruction assembleur 80x86 - Instruction OR
Instruction assembleur 80x86 - Instruction XOR
Mathématique - Algèbre de Boole - Table de vérité
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 823
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 412
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 175.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 10 à 12.