Assembleur 80x86 | NOT |
---|---|
INTEL 8088+, x86-64 | Pas |
Syntaxe
NOT registre |
NOT mémoire |
Description
Cette instruction permet d'inverser la valeur de chacun des bits d'une opérande.
Remarques
- L'instruction NOT 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, 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 NOT(dest) dest ← (¬ dest) |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
NOT reg/mem8 | F6h /2 | Compléments les bits d'une opérande de registre ou mémoire 8 bits. |
NOT reg/mem16 | F7h /2 | Compléments les bits d'une opérande de registre ou mémoire 16 bits. |
NOT reg/mem32 | F7h /2 | Compléments les bits d'une opérande de registre ou mémoire 32 bits. |
NOT reg/mem64 | REX.W + F7h /2 | Compléments les bits d'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 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 d'inverser les bits du registre AL :
- NOT AL
L'exemple suivant permet d'inverser les bits du registre AX :
- NOT AX
L'exemple suivant permet d'inverser les bits du registre EAX :
- NOT EAX
L'exemple suivant permet d'inverser les bits du registre RAX :
- NOT RAX
L'exemple suivant permet d'inverser les bits de l'emplacement mémoire EAX :
- NOT [EAX]
L'exemple suivant permet d'inverser les bits de l'emplacement mémoire RAX :
- NOT [RAX]
L'exemple suivant permet d'inverser les bits de l'emplacement mémoire absolue 01234ABC :
- NOT [01234ABC]
L'exemple suivant permet d'inverser les bits de l'emplacement mémoire d'un symbole utilisateur :
- NOT [UnSymbole]
Le contenu de l'emplacement de mémoire TEMP est complémenté :
- NOT TEMP
Le contenu en octets de l'emplacement mémoire spécifié par la variable est complémenté :
- NOT BYTE PTR[Var]
Cet exemple permet de montrer l'affectation des nombres par cette instruction :
- Program NotSamples;
-
- Function AsmNot(X:Integer):Integer;Assembler;ASM
- MOV AX,X
- NOT AX
- END;
-
- BEGIN
- WriteLn('NOT -1 = ',AsmNot(-1));
- WriteLn('NOT 0 = ',AsmNot(0));
- WriteLn('NOT 1 = ',AsmNot(1));
- WriteLn('NOT 255 = ',AsmNot(255));
- WriteLn('NOT 32767 = ',AsmNot(32767));
- WriteLn('NOT TRUE = ',AsmNot(Integer(TRUE)));
- WriteLn('NOT FALSE = ',AsmNot(Integer(FALSE)));
- END.
on obtiendra le résultat suivant :
NOT -1 = 0NOT 0 = -1
NOT 1 = -2
NOT 255 = -256
NOT 32767 = -32768
NOT TRUE = -2
NOT FALSE = -1
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 178.
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 15 à 15.