Section courante

A propos

Section administrative du site

Assembleur 80x86

MOVSX

INTEL 80386+ Move with Sign-Extension

Syntaxe

MOVSX operandedestination, operandesource

Paramètres

Nom Description
operandedestination Ce paramètre permet d'indiquer l'opérande recevant la valeur.
operandesource Ce paramètre permet d'indiquer l'opérande contenant la valeur à copier.

Description

Cette instruction permet de copier un registre de taille inférieur dans un registre de plus grande taille en remplissant les bits supplémentaires avec l'extension des signes.

Remarque

Algorithme

SI taille de l'opérande source = 8 bits ALORS
   SI taille de l'opérande destinataire = 16 bits ALORS
      operandedestination(15..8) ← FFh x operandesource(7)
      operandedestination(7..0) ← operandesource
   SINON
      operandedestination(31..8) ← FFFFFFh x operandesource(7)
      operandedestination(7..0) ← operandesource
   FIN SI
SINON
   operandedestination(31..16) ← FFFFh * operandesource(15)
   operandedestination(15..0) ← operandesource
FIN SI

Mnémonique

Instruction Opcode Description
MOVSX reg16, reg/mem8 0Fh BEh /r Copie le contenu du registre ou d'un emplacement mémoire 8 bits dans un registre 16 bits avec un extension des signes.
MOVSX reg32, reg/mem8 0Fh BEh /r Copie le contenu du registre ou d'un emplacement mémoire 8 bits dans un registre 32 bits avec un extension des signes.
MOVSX reg64, reg/mem8 0Fh BEh /r Copie le contenu du registre ou d'un emplacement mémoire 8 bits dans un registre 64 bits avec un extension des signes.
MOVSX reg32, reg/mem16 0Fh BFh /r Copie le contenu du registre ou d'un emplacement mémoire 16 bits dans un registre 32 bits avec un extension des signes.
MOVSX reg64, reg/mem16 0Fh BFh /r Copie le contenu du registre ou d'un emplacement mémoire 16 bits dans un registre 64 bits avec un extension des signes.

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

Voici un exemple Delphi permettant de tester la traitement de cette instruction sur 4 valeurs différentes :

  1. Program MOVSXSamples;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. Var _EAX,_EBX,_EDX,_EDI:LongInt;
  6.  
  7. BEGIN
  8.  ASM
  9.    MOV   CX, 0FFFFh
  10.    MOVZX EAX, CX
  11.    MOV   _EAX,EAX
  12.    MOVSX EBX, CX
  13.    MOV   _EBX,EBX
  14.    MOV   CX, 1
  15.    MOVSX EDX, CX
  16.    MOV   _EDX,EDX
  17.    MOV   CX, 08000h
  18.    MOVSX EDI, CX
  19.    MOV   _EDI,EDI
  20.  END;
  21.  WriteLn('EAX=',_EAX);
  22.  WriteLn('EBX=',_EBX);
  23.  WriteLn('EDX=',_EDX);
  24.  WriteLn('EDI=',_EDI);
  25. END.

on obtiendra le résultat suivant :

EAX=65535
EBX=-1
EDX=1
EDI=-32768

Voir également

Instruction assembleur 80x86 - Instruction MOVSXD
Instruction assembleur 80x86 - Instruction MOVZX

Références

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 809 à 811.

Dernière mise à jour : Jeudi, le 23 juillet 2015