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
- MOVSX vs MOVZX : La différence majeure entre MOVSX et MOVZX réside dans le fait que MOVSX est destiné à convertir des nombres entiers dans un plus grand format tandis que le MOVZX est destiné à convertir des nombres naturels en plus grand format.
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 :
- Program MOVSXSamples;
-
- {$APPTYPE CONSOLE}
-
- Var _EAX,_EBX,_EDX,_EDI:LongInt;
-
- BEGIN
- ASM
- MOV CX, 0FFFFh
- MOVZX EAX, CX
- MOV _EAX,EAX
- MOVSX EBX, CX
- MOV _EBX,EBX
- MOV CX, 1
- MOVSX EDX, CX
- MOV _EDX,EDX
- MOV CX, 08000h
- MOVSX EDI, CX
- MOV _EDI,EDI
- END;
- WriteLn('EAX=',_EAX);
- WriteLn('EBX=',_EBX);
- WriteLn('EDX=',_EDX);
- WriteLn('EDI=',_EDI);
- END.
on obtiendra le résultat suivant :
EAX=65535EBX=-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