Section courante

A propos

Section administrative du site

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

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 :

  1. NEG AL

L'exemple suivant permet de faire la négation du contenu du registre AH :

  1. NEG AH

L'exemple suivant permet de faire la négation du contenu du registre AX :

  1. 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 :

  1. NEG BYTE PTR[BX]

L'exemple suivant permet de faire la négation du contenu du registre EAX :

  1. NEG EAX

L'exemple suivant permet de faire la négation du contenu du registre RAX :

  1. NEG RAX

L'exemple suivant permet de faire la négation du contenu de l'emplacement mémoire relatif [EDX+112] :

  1. NEG [EDX+112]

L'exemple suivant permet de faire la négation du contenu de l'emplacement mémoire relatif [RDX+12] :

  1. NEG [RDX+12]

L'exemple suivant permet de faire la négation du contenu de l'emplacement mémoire absolue [01234abc] :

  1. NEG [01234abc]

L'exemple suivant permet de faire la négation du contenu de l'emplacement mémoire définit par un symbole utilisateur :

  1. NEG [SymboleUtilisateur]

Cet exemple, en Turbo Pascal, permet de montrer l'affectation des nombres par cette instruction dans un langage de programmation évolué :

  1. Program NegSamples;
  2.  
  3. Function AsmNeg(X:Integer):Integer;Assembler;ASM
  4.  MOV AX,X
  5.  NEG AX
  6. END;
  7.  
  8. BEGIN
  9.  WriteLn('NEG -1 = ',AsmNeg(-1));
  10.  WriteLn('NEG 0 = ',AsmNeg(0));
  11.  WriteLn('NEG 1 = ',AsmNeg(1));
  12.  WriteLn('NEG 255 = ',AsmNeg(255));
  13.  WriteLn('NEG 32767 = ',AsmNeg(32767));
  14.  WriteLn('NEG TRUE = ',AsmNeg(Integer(TRUE)));
  15.  WriteLn('NEG FALSE = ',AsmNeg(Integer(FALSE)));
  16. END.

on obtiendra le résultat suivant :

NEG -1 = 1
NEG 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.

Dernière mise à jour : Vendredi, le 5 septembre 2014