Vous êtes sur la page 1sur 1558

Grimoire Assembleur 80x86

Premire Edition Avril 2010

Par Sylvain Maltais

Numro de publication : 00001


1

Ce document ne peut tre vendu sans le consentement de lauteur, cependant, il est libre de diffusion et il peut tre copi sur nimporte quel support de donnes du moment que le nom de lauteur nest pas effac ou remplac. Tous les informations sont galements disponible sur le site http://www.gladir.com/, lequel les informations original. De plus, les noms AMD, IBM, Cyrix, Intel et autres, sont des produits appartenant respectivements aux compagnies mentionns, et ils sont libres de modifis sans pravis le fonctionnement de leur matriel.

Annexe A Voici une table des instructions du langage de programmation assembleur de la famille 80x86 :
Instruction AAA AAD AAM AAS Description CPU/MPU Cette instruction permet d'adapter le rsultat obtenu par l'addition de 2 valeurs INTEL 8088+ en format DCB. Cette instruction permet de convertir une valeur de format DCB non INTEL 8088+ compacte. Cette instruction offre la possibilit de convertir le produit de la INTEL 8088+ multiplication de 2 valeurs de format DCB en un format DCB. Cette instruction permet d'adapter le rsultat de la soustraction de nombre de INTEL 8088+ format DCB. Cette instruction additionne 2 quantits numriques sur 8 ou 16 bits et ajoute ensuite la valeur de l'indicateur de retenue, lequel est contenu dans le drapeau INTEL 8088+ CF (CARRY FLAG), la somme obtenu. Cette instruction additionne 2 quantits numriques sur 8 ou 16 bits. INTEL 8088+

ADC ADD

ADDPD

Cette instruction permet d'effectuer une addition de 2 paquets de valeurs rels de double prcision dun oprande source et dun oprande destination et INTEL Pentium 4+ entrepose le rsultat dans l'oprande de destination sous le format d'un paquet de valeurs rels de double prcision. Cette instruction permet d'effectuer une addition SIMD de 4 paquets de valeurs rels de simple prcision dun oprande source et dun oprande INTEL Pentium III (SSE)+ destination et entrepose le rsultat dans l'oprande de destination sous le format d'un paquet de valeurs rels de simple prcision. Cette instruction permet d'effectuer une addition de la partie basse d'une valeur rel de double prcision dun oprande source et destination et INTEL Pentium 4+ entrepose le rsultat dans un oprande de destination de valeur rel de double prcision. Cette instruction permet d'effectuer une addition de la partie basse d'une valeur rel de simple prcision dun oprande source et destination et INTEL Pentium III (SSE)+ entrepose le rsultat dans un oprande de destination de valeur rel de simple prcision. Cette instruction permet d'effectuer une soustraction de la partie basse d'une valeur rel de double prcision dun oprande source et destination et entrepose le rsultat dans un oprande de destination de valeur rel de double INTEL Pentium 4 (SSE3)+ prcision et d'effectuer une addition de la partie haute d'une valeur rel de double prcision dun oprande source et destination et entrepose le rsultat dans un oprande de destination de valeur rel de double prcision. Cette instruction permet d'effectuer une soustraction de la partie basse d'un paquet de valeur rel de simple prcision dun oprande source et destination et entrepose le rsultat dans un oprande de destination de valeur rel de simple prcision et d'effectuer une addition de la partie haute d'un paquet de INTEL Pentium 4 (SSE3)+ valeur rel de simple prcision dun oprande source et destination et entrepose le rsultat dans un oprande de destination de valeur rel de simple prcision. Cette instruction permet d'effectuer un ET BINAIRE sur les 2 oprandes INTEL 8088+ spcifis. Cette instruction permet d'effectuer un ET BINAIRE sur les 2 paquets d'oprandes de valeur de format rel de double prcision et inverse chacun INTEL Pentium 4+ des bits du rsultat. Cette instruction permet d'effectuer un ET BINAIRE sur les 2 oprandes 128 INTEL Pentium III (SSE)+ bits spcifis et inverse chacun des bits du rsultat. Cette instruction permet d'effectuer un ET BINAIRE sur les 2 paquets INTEL Pentium 4+

ADDPS

ADDSD

ADDSS

ADDSUBPD

ADDSUBPS

AND

ANDNPD

ANDNPS ANDPD

d'oprandes de valeur de format rel de double prcision. ANDPS ARPL BOUND BSF BSR BSWAP BT BTC BTR Cette instruction permet d'effectuer un ET BINAIRE sur les 2 oprandes 128 INTEL Pentium III (SSE)+ bits spcifis. Cette instruction permet de contrler et corriger le niveau de privilge du INTEL 80286+ segment de code en mode protge. Cette instruction permet de vrifier la validit pouvant exister entre avec un INTEL 80186+ tableau et son indexation. Cette instruction permet d'effectuer une comparaison binaire de la droite vers INTEL 80386+ la gauche. Cette instruction permet d'effectuer une comparaison binaire de la gauche INTEL 80386+ vers la droite. Cette instruction permet d'inverse l'ordre des 4 octets d'un registre de taille de INTEL 80486+ 32 bits. Cette instruction permet de transfrer une Oprande vers l'indicateur de INTEL 80386+ retenue. Cette instruction transfre une Oprande vers l'indicateur de retenue le bit INTEL 80386+ spcifi et inverser la valeur du bit correspondant. Cette instruction permet de transfrer l'Oprande vers l'indicateur de retenue INTEL 80386+ le bit spcifi puis met le bit correspondant de l'Oprande 0. Cette instruction permet de transfrer une Oprande vers l'indicateur de retenue le bit spcifi puis ensuite met le bit correspondant dans Oprande INTEL 80386+ 1. Cette instruction force le microprocesseur excuter les instructions du sousINTEL 8088+ programme indiqu par l'adresse d'appel avant de continuer. Cette instruction permet de convertir un nombre contenu dans le registre AL en un format sur 16 bits pour se retrouver dans le registre AX en appliquant INTEL 8088+ une extension du signe. Cette instruction permet de convertir le double mot en un quadruple mot, le INTEL 80386+ rsultat tient sur une taille de 64 bits. Cette instruction permet de convertir le double mot du registre EAX en un x86-64+ quadruple mot RAX, le rsultat tient sur une taille de 64 bits. Cette instruction permet de mettre l'indicateur d'tat de retenu CF 0. Cette instruction met l'indicateur d'tat DF 0. Cette instruction permet de vider la ligne de cache d'une adresse linaire. INTEL 8088+ INTEL 8088+ INTEL Pentium 4 (SSE2)+

BTS

CALL

CBW

CDQ CDQE CLC CLD CLFLUSH CLGI CLI CLTS CMC CMOV CMP

Cette instruction permet d'effacer le drapeau global d'interruption (GIF). AMD-V Quand le GIF est 0, toutes les interruptions externes sont dsactives. Cette instruction met l'indicateur d'tat IF 0. INTEL 8088+

Cette instruction permet de mettre 0 le drapeau de l'indicateur de tche INTEL 80286+ (Task-Switch) du registre CR0. Cette instruction offre la possibilit d'inverser la valeur de l'indicateur de INTEL 8088+ retenue. Si ce dernier vaut 1, elle le met 0 et inversement. Cette instruction copie des donnes d'une source (valeur) une destination INTEL Pentium Pro+ (registre) la condition que la condition demande soit remplie. Cette instruction offre la possibilit essentielle de comparer 2 registres ou INTEL 8088+ emplacements de mmoire. Cette instruction permet d'effectuer une comparaison SIMD de 4 paquets de valeurs rels de simple prcision dun oprande source et dun oprande INTEL Pentium III (SSE)+ destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

CMPPS

CMPS

Cette instruction permet d'effectuer la comparaison d'un octet, d'un mot ou double mot spcifi avec l'oprande source et destination spcifi et fixe l'tat INTEL 8088+ des drapeaux du registres EFLAGS en fonction des rsultats de la comparaison. Cette instruction permet d'effectuer la comparaison d'un octet avec l'oprande source (DS:(R)SI) et destination (ES:(R)DI) et fixe l'tat des drapeaux du INTEL 8086+ registres EFLAGS en fonction des rsultats de la comparaison. Cette instruction permet d'effectuer la comparaison d'un double mot avec l'oprande source (DS:(R)SI) et destination (ES:(R)DI) et fixe l'tat des INTEL 80386+ drapeaux du registres EFLAGS en fonction des rsultats de la comparaison. Cette instruction permet d'effectuer la comparaison d'un quadruple mot avec l'oprande source (DS:(R)SI) et destination (ES:(R)DI) et fixe l'tat des x86-64+ drapeaux du registres EFLAGS en fonction des rsultats de la comparaison. Cette instruction permet d'effectuer une comparaison de la partie basse de valeurs relles de simple prcision dun oprande source et dun oprande INTEL Pentium III (SSE)+ destination et entrepose le rsultat de la comparaison dans l'oprande de destination. Cette instruction permet d'effectuer la comparaison d'un mot avec l'oprande source (DS:(R)SI) et destination (ES:(R)DI) et fixe l'tat des drapeaux du INTEL 8086+ registres EFLAGS en fonction des rsultats de la comparaison. Cette instruction compare la destination avec l'accumulateur (AL, AX ou EAX) INTEL Pentium+ et les changes si la condition est vraie. Cette instruction compare un nombre de 64 bits et les changes si la condition INTEL Pentium+ est vraie. Cette instruction permet de comparer un nombre de 128 bits et les changes si INTEL x86-64+ la condition est vraie. Cette instruction permet de comparer deux valeurs rel de double-prcision dans la partie faible du quadruple mot de deux oprande et fixe les drapeaux INTEL Pentium III+ de ZF, PF et FC du registre EFLAGS en fonction du rsultat (non-ordonne, suprieur , infrieur ou gal). Cette instruction permet de comparer deux valeurs rel de simple-prcision dans la partie faible du quadruple mot de deux oprande et fixe les drapeaux INTEL Pentium III+ de ZF, PF et FC du registre EFLAGS en fonction du rsultat (non-ordonne, suprieur , infrieur ou gal). Cette instruction retourne le code d'identification du microprocesseur. INTEL Pentium+

CMPSB

CMPSD

CMPSQ

CMPSS

CMPSW

CMPXCHG CMPXCHG8B CMPXCHG16B

COMISD

COMISS

CPUID CQO CVTDQ2PD CVTDQ2PS CVTPD2DQ CVTPD2PI

Cette instruction permet de convertir le quadruple mot du registre EAX en x86-64+ deux quadruples mots RDX:RAX, le rsultat tient sur une taille de 128 bits. Cette instruction permet d'effectuer la conversion d'un paquet de double mot INTEL Pentium 4+ entier en valeurs rel de double prcision. Cette instruction permet d'effectuer la conversion d'un paquet de double mot INTEL Pentium 4+ entier en valeurs rel de simple prcision. Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel INTEL Pentium 4+ de double prcision en double mot entier et fixe 0 le reste du paquet. Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel INTEL Pentium 4+ de double prcision en double mot entier. Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de double prcision en valeurs rel de simple prcision et fixe 0 le reste du INTEL Pentium 4+ paquet. Cette instruction permet d'effectuer la conversion d'un paquet de double mot INTEL Pentium 4+ entier en valeurs rel de double prcision compact. Cette instruction permet de convertir un entier de format double mot en une Pentium III (KNI/MMX2)+ valeur rel de simple prcision compact. Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel INTEL Pentium 4+

CVTPD2PS

CVTPI2PD CVTPI2PS CVTPS2DQ

de simple prcision en paquet de doubles mots entiers. CVTPS2PD CVTPS2PI CVTSD2SI CVTSD2SS CVTSI2SD CVTSI2SS CVTSS2SD CVTSS2SI Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel INTEL Pentium 4+ de simple prcision en paquet de valeurs rel de double prcision. Cette instruction permet de convertir une valeur rel de simple prcision Pentium III (KNI/MMX2)+ compact en un entier de format double mot. Cette instruction permet d'effectuer la conversion d'une valeur rel de simple INTEL Pentium 4+ prcision en valeur entier de double mots. Cette instruction permet d'effectuer la conversion d'une valeur rel de double INTEL Pentium 4+ prcision en valeur rel de simple prcision. Cette instruction permet de convertir un entier de format double mot en une INTEL Pentium 4+ valeur rel de double prcision. Cette instruction permet de convertir un entier de format double mot en une Pentium III (KNI/MMX2)+ valeur rel de simple prcision. Cette instruction permet de convertir une valeur rel de simple prcision en INTEL Pentium 4+ une valeur rel de double prcision. Cette instruction permet de convertir une valeur rel de simple prcision en Pentium III (KNI/MMX2)+ un entier de format double mot. Cette instruction permet de convertir un paquet de valeur rel de double prcision avec en un paquet d'entier de format double mot tronquer et fixe 0 INTEL Pentium 4+ le reste du paquet. Cette instruction permet de convertir une valeur rel de double prcision INTEL Pentium 4+ compact avec tronquage en un entier de format double mot compact. Cette instruction permet de convertir un paquet de valeur rel de simple INTEL Pentium 4+ prcision avec en un paquet d'entier de format double mot tronquer. Cette instruction permet de convertir une valeur rel de simple prcision Pentium III (KNI/MMX2)+ compact avec tronquage en un entier de format double mot compact. Cette instruction permet de convertir une valeur rel de double prcision avec INTEL Pentium 4+ en un entier de format double mot tronquer. Cette instruction permet de convertir un entier de format double mot avec Pentium III (KNI/MMX2)+ tronquage en une valeur rel de simple prcision. Cette instruction est l'alternative pour convertir le mot du registre AX en un double mot contenu dans le couple de registre DX et AX par extension du INTEL 8088+ signe. Cette instruction est l'alternative pour convertir le mot du registre AX en un INTEL 80386+ double mot contenu dans le registre EAX par extension du signe. Cette instruction corrige aprs coup les retenues lors de la manipulation de INTEL 8088+ valeur DCB. Cette instruction offre l'intressante possibilit de corrige le rsultat d'une INTEL 8088+ soustraction de 2 nombres de format DCB compactes. Cette instruction dcrment de 1 le registre ou l'adresse mmoire spcifi. Cette instruction permet d'effectuer une division non-signe (nombre naturel). INTEL 8088+ INTEL 8088+

CVTTPD2DQ

CVTTPD2PI CVTTPS2DQ CVTTPS2PI CVTTSD2SI CVTTSS2SI

CWD

CWDE DAA DAS DEC DIV DIVPD DIVPS DIVSD DIVSS

Cette instruction permet d'effectuer une division de valeur rel de double INTEL Pentium 4+ prcision de registre XMM ou d'emplacement mmoire de 128 bits. Cette instruction permet d'effectuer une division de valeur rel de simple INTEL Pentium III prcision de registre XMM ou d'emplacement mmoire de 128 bits. (KNI/MMX2)+ Cette instruction permet d'effectuer une division scalaire de valeur rel de INTEL Pentium 4+ double prcision de registre XMM ou d'emplacement mmoire de 128 bits. Cette instruction permet d'effectuer une division scalaire de valeur rel de Pentium III (KNI/MMX2)+ simple prcision de registre XMM ou d'emplacement mmoire de 128 bits.

EMMS ENTER ESC

Cette instruction fixe les mots marqus du MPU de chacun un.

INTEL Pentium-MMX

Cette instruction permet de crer les structures de paramtres ncessaires aux INTEL 80186+ procdures des langages de haut niveau. Cette instruction active le coprocesseur, lequel se permettra d'utiliser les INTEL 8088 au 80386 mthodes d'adressage du processeur principal (CPU). Cette instruction s'applique calculer 2 puissance le registre mathmatique ST(0) moins 1 et enregistre son produit dans le registre mathmatique ST(0). INTEL MPU 8087+ Alias de F2XM1, mais dconseill. Cette instruction permet d'effectuer le calcul de 2 puissance le registre mathmatique ST(0) moins 1 et enregistre son produit dans le registre INTEL MPU 8087+ mathmatique ST(0). Cette instruction permet de convertir le nombre rel contenu dans le registre INTEL MPU 8087+ mathmatique ST(0) en sa valeur absolue. Cette instruction offre l'essentiel possibilit d'ajouter le nombre rel de valeur INTEL MPU 8087+ positive source cible et enregistre la somme dans cible. Cette instruction complmentaire ajoute le nombre rel source au nombre rel cible et enregistrer la somme dans cible puis prendre le registre mathmatique INTEL MPU 8087+ ST(0) et le dpile. Cette instruction charge la valeur de format DCB compacte aprs le registre INTEL MPU 8087+ mathmatique ST(0). Cette instruction extrait la valeur de format DCB compacte du registre mathmatique ST(0), l'enregistrer dans cible et prendre le registre INTEL MPU 8087+ mathmatique ST(0) et sort de la pile. Cette instruction inverse tout simplement le signe du registre mathmatique INTEL MPU 8087+ ST(0). Cette instruction efface toutes les exceptions contenu dans les drapeaux de INTEL MPU 8087+ registres du coprocesseur mathmatique. Cette instruction permet de dplac des nombres rel (virgule flottante) si la INTEL P6+ condition en question est satisfaite. Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 INTEL MPU 8087+ avec la valeur 1. Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des INTEL Pentium III+ rsultats. Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des INTEL Pentium III+ rsultats et dsempile de la pile la valeur dans le registre. Cette instruction compare le nombre rel de valeur positive source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la INTEL MPU 8087+ valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres. Cette instruction permet de comparer les nombres rels du registre mathmatique ST(1) avec le registre mathmatique ST(0), ensuite de mettre INTEL MPU 8087+ les indicateurs d'tat C0 C3 la valeur 1 et prendre le couple de registre mathmatique ST(1) et ST(0) dans la pile de registres (2 dpilages). Cette instruction calcule le cosinus du registre mathmatique ST(0). Cette instruction permet de dcrmenter le pointeur de pile de registres. Cette instruction permettait de dsactiver les interruptions. INTEL MPU 80387+ INTEL MPU 8087+ INTEL MPU 8087+

F2XM

F2XM1

FABS FADD

FADDP

FBLD

FBSTP

FCHS FCLEX FCMOV

FCOM

FCOMI

FCOMIP

FCOMP

FCOMPP

FCOS FDECSTP FDISI FDIV FDIVP

Cette instruction offre la possibilit d'effectuer des division de nombre rel de INTEL MPU 8087+ valeur positive. Cette instruction offre la possibilit d'effectuer des division de nombre rel et INTEL MPU 8087+

place ST(0) dans la pile. FDIVR FDIVRP FEMMS FENI FFREE FFREEP FIADD FICOM Cette instruction offre la possibilit d'effectuer des division de nombre rel de INTEL MPU 8087+ valeur positive avec les registres inverss cible par source. Cette instruction offre la possibilit d'effectuer des division de nombre rel INTEL MPU 8087+ avec les registres inverss cible par source et place ST(0) dans la pile. Cette instruction permet d'effacer les tats MMX aprs le passage AMD 3DNow! d'instructions MMX. Cette instruction permet d'autoriser les interruptions. Cette instruction permet de librer un des registres de la pile. INTEL MPU 8087 INTEL MPU 8087+

Cette instruction permet de librer un des registres de la pile et d'ensuite de INTEL MPU 80287+ dsempiler le registre de la pile. Cette instruction offre l'essentiel possibilit d'ajoute le nombre rel source INTEL MPU 8087+ cible et enregistre la somme dans cible. Cette instruction permet de comparer le nombre rel source avec le registre INTEL MPU 8087+ mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1. Cette instruction compare le nombre rel source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et INTEL MPU 8087+ dpile le registre mathmatique ST(0) de la pile de registres. Cette instruction offre la possibilit d'effectuer des division de nombre rel. INTEL MPU 8087+

FICOMP FIDIV FIDIVR FILD FIMUL FINCSTP FINIT FIST FISTP FISUB FISUBR FLD FLD1 FLDCW FLDENV FLDL2E FLDL2T FLDLG2

Cette instruction offre la possibilit d'effectuer des division de nombre rel INTEL MPU 8087+ avec les registres inverss cible par source. Cette instruction permet de charger le nombre entier auprs du registre ST(0). INTEL MPU 8087+

Cette instruction permet de multiplier le nombre rel source par cible et INTEL MPU 8087+ sauvegarde le rsultat dans cible. Cette instruction permet d'incrmenter le pointeur de pile de registres. Cette instruction mathmatique. permet d'effectuer l'initialisation du coprocesseur INTEL MPU 8087+ INTEL MPU 8087+

Cette instruction permet de sauvegarder le nombre du registre ST(0) dans INTEL MPU 8087+ cible. Cette instruction permet de sauvegarder le nombre du registre ST(0) dans INTEL MPU 8087+ cible et prendre le registre ST(0) de la pile du registres. Cette instruction offre l'essentielle posibilit de soustraire le nombre source INTEL MPU 8087+ du registre ST(0). Cette instruction offre l'essentielle posibilit de soustraire le nombre du INTEL MPU 8087+ registre ST(0) de source. Cette instruction permet de charger le nombre rel du registre ST(0) dans la INTEL MPU 8087+ pile. Cette instruction permet de charger la constante 1,0 du registre ST(0) dans la INTEL MPU 8087+ pile. Cette instruction permet de charger le mot de contrle avec source. Cette instruction permet de charger l'environnement partir de source. INTEL MPU 8087+ INTEL MPU 8087+

Cette instruction permet de mettre le rsultat du logarithme de e de la base INTEL MPU 8087+ 2 dans ST(0). Cette instruction permet de mettre le rsultat du logarithme de 10 de la base 2 INTEL MPU 8087+ dans ST(0). Cette instruction permet de mettre le rsultat du logarithme de 2 de la base 10 INTEL MPU 8087+ dans ST(0).

FLDLN2 FLDPI FLDZ FMUL

Cette instruction permet de mettre le rsultat du logarithme de e de la base INTEL MPU 8087+ 10 dans ST(0). Cette instruction permet de mettre le rsultat de la constante PI () dans le INTEL MPU 8087+ registre ST(0). Cette instruction permet de mettre le rsultat de la constante 0,0 dans le INTEL MPU 8087+ registre ST(0). Cette instruction permet de multiplier le nombre rel de valeur positive INTEL MPU 8087+ source par cible et sauvegarde le rsultat dans cible. Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible et prend ensuite INTEL MPU 8087+ ST(0) dans la pile de registres. Cette instruction permet d'liminer et de grer les exceptions non masques. INTEL MPU 8087+

FMULP FNCLEX FNDISI FNENI FNINIT FNOP

Cette instruction permet de dsactiver les interruptions et de grer les INTEL MPU 8087 exceptions non masques. Cette instruction permet d'activer les interruptions et de grer les exceptions INTEL MPU 8087 non masques. Cette instruction permet d'initialiser le coprocesseur mathmatique et de grer INTEL MPU 8087+ les exceptions non masques. Cette instruction permet de ne rien faire et de simplement passer INTEL MPU 8087+ l'instruction suivante. Cette instruction permet de sauvegarder l'tat courant du coprocesseur mathmatique dans l'emplacement mmoire partir de source et grer les INTEL MPU 8087+ exceptions numriques non masques. Cette instruction permet de sauvegarder le mot de contrle dans cible et INTEL MPU 8087+ grer les exceptions numriques non masques. Cette instruction permet de copier l'environnement du coprocesseur mathmatique vers une cible mais sans toutefois attendre que l'exception de INTEL MPU 8087+ nombre rel (virgule flottante) soit effac. Cette instruction permet de copier le mot d'tat du coprocesseur mathmatique vers une cible mais sans toutefois attendre que l'exception de INTEL MPU 8087+ nombre rel (virgule flottante) soit effac. Cette instruction permet de calculer le rsultat de l'arc tangente de ST(1) par INTEL MPU 8087+ ST(0) et de mettre le rsultat dans le registre ST(0). Cette instruction permet de diviser le registre ST(0) par le registre ST(1) et INTEL MPU 8087+ enregistre le reste dans registre ST(0). Cette instruction permet de diviser le registre ST(0) par le registre ST(1) et INTEL MPU 80387+ enregistre le reste IEEE dans registre ST(0). Cette instruction permet d'effectuer le calcule de la fonction trigonomtrique de la tangente du registre ST(0) et enregistre son rsultat dans le registre INTEL MPU 8087+ ST(0). Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 Cyrix 486 avec FPU dcimal selon la mthode CHOP. Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 Cyrix 486 avec FPU dcimal selon la mthode du plus proche. Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 dcimal selon la mthode du plus proche et si le nombre est exactement la Cyrix 486 avec FPU moiti, alors l'instruction arrondit au signe de l'infini. Cette instruction permet d'arrondir le registre ST(0) l'entier le plus proche et INTEL MPU 8087+ enregistre son rsultat dans le registre ST(0). Cette instruction permet de restituer l'tat du coprocesseur prcdamment INTEL MPU 8087+ sauvegard dans l'emplacement mmoire spcifi par source.

FNSAVE

FNSTCW

FNSTENV

FNSTSW

FPATAN FPREM FPREM1

FPTAN

FRICHOP FRINEAR

FRINT2

FRNDINT FRSTOR

FSAVE FSCALE FSETPM

Cette instruction permet de sauvegarder l'tat courant du coprocesseur dans INTEL MPU 8087+ l'emplacement mmoire spcifi par source. Cette instruction permet d'effectuer la multiplication du registre ST(0) par 2 INTEL MPU 8087+ puissance le registre ST(1) et sauvegarde le rsultat dans le registre ST(0). Cette instruction permet de faire passer le coprocesseur mathmatique en INTEL MPU 80287 mode protg. Cette instruction permet d'effectuer le calcule de la fonction trigonomtrique du sinus du registre ST(0) et le copie dans le registre ST(1), le registre ST(0) INTEL MPU 80387+ prend la valeur 1,0. Cette instruction permet d'effectuer le calcule de la fonction trigonomtrique du sinus et du cosinus du registre ST(0) puis copie le rsultat du sinus dans le INTEL MPU 80387+ registre ST(0) et le cosinus dans le registre ST(1). Cette instruction permet d'extraire la racine carre du registre ST(0) et de INTEL MPU 8087+ copier son rsultat dans le registre ST(0). Cette instruction permet de copier la valeur rel contenu le registre ST(0) vers INTEL MPU 8087+ une cible. Cette instruction permet de copier le mot de contrle CW vers une cible. INTEL MPU 8087+

FSIN

FSINCOS

FSQRT FST FSTCW FSTENV FSTP FSTSW FSUB FSUBP

Cette instruction permet de copier l'environnement du coprocesseur INTEL MPU 8087+ mathmatique vers une cible. Cette instruction permet de copier un nombre entier et prendre le contenu du INTEL MPU 8087+ registre ST(0) dans la pile de registres (dpilage). Cette instruction permet de copier le mot d'tat du coprocesseur INTEL MPU 8087+ mathmatique vers une cible. Cette instruction permet de soustraire un nombre entier du registre ST(0). INTEL MPU 8087+

Cette instruction permet de soustraire un nombre entier du registre ST(0) et INTEL MPU 8087+ copie le registre ST(0) dans la pile de registres. Cette instruction permet de soustraire un nombre entier du registre ST(0) et copie le registre ST(0) dans la pile de registres. Cette instruction est INTEL MPU 8087+ dconseille. Cette instruction permet de soustraire le registre ST(0) du nombre entier et INTEL MPU 8087+ place le rsultat dans le registre ST(0). Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0) et copie le registre ST(0) dans la pile de INTEL MPU 8087+ registres. Cette instruction permet de comparer le sommet de la pile avec la valeur 0,0 INTEL MPU 8087+ et dfinit les indicateurs d'tats C0 et C3 de faon appropri. Cette instruction compare le registre ST0 avec un oprande et fixe les INTEL MPU 80387+ drapeaux de faon appropri. Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et vrifie l'ordre des valeurs et fixe la valeur drapeaux ZF, PF et CF du registre INTEL Pentium III+ EFLAGS en fonction des rsultats. Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et vrifie l'ordre des valeurs et fixe la valeur drapeaux ZF, PF et CF du registre INTEL Pentium III+ EFLAGS en fonction des rsultats et dsempile de la pile la valeur dans le registre. Cette instruction compare le registre ST0 avec un oprande et fixe les INTEL MPU 80387+ drapeaux de faon appropri et dsempile la pile. Cette instruction compare le registre ST0 avec le registre ST1 et fixe les INTEL MPU 80387+ drapeaux de faon appropri et dsempile les registres ST0 et ST1 de la pile. Cette instruction permet d'attendre la fin de l'excution d'une commande INTEL MPU 8087+ avant de poursuivre.

FSUBPP

FSUBR

FSUBRP

FTST FUCOM

FUCOMI

FUCOMIP

FUCOMP FUCOMPP FWAIT

10

FXAM FXCH

Cette instruction permet d'examiner le sommet de la pile et dfinit les INTEL MPU 8087+ indicateurs d'tat C0 et C3 de faon appropri. Cette instruction permet d'changer le contenu d'une expression avec celle du INTEL MPU 8087+ registre ST(0) s'il est omis. Cette instruction permet de restituer rapidement 94 (en mode 16 bits) ou 108 (en mode 32 bits) octets d'un contexte de coprocesseur mathmatique vers la INTEL MMX-2+ mmoire. Cette instruction permet de sauvegarder rapidement 94 (en mode 16 bits) ou 108 (en mode 32 bits) octets d'un contexte de coprocesseur mathmatique de INTEL MMX-2+ la mmoire. Cette instruction permet de copier l'exposant du registre ST(0) dans le registre ST(1) comme nombre entier puis copie la mantisse dans la registre ST(0) INTEL MPU 8087+ comme nombre entier. Cette instruction permet de calculer la multiplication du registre ST(1) par le logarithme du registre ST(0) dans la base 2 et copie le rsultat dans le registre INTEL MPU 8087+ ST(0). Cette instruction permet de calculer la multiplication du registre ST(1) par le logarithme du registre ST(0) plus 1 dans la base 2 et copie le rsultat dans le INTEL MPU 8087+ registre ST(0). Cette instruction permet de faire passer le microprocesseur en mode d'arrt. Toutefois, le processeur peut quitter cet tat lorsqu'une ligne matrielle INTEL 8088+ RESET ou lorsqu'une interruption non-masquable (NMI) reoit un signal. Cette instruction permet de faire un tableau de bits du deuxime oprand et le INTEL 80386+ met dans le premier. Cette instruction permet de passer en mode d'instruction ICE (In-Circuit INTEL 80386 au Pentium Pro Emulator) si le bit 12 du registre DR7 vaut 1 sinon il excute l'interruption 1. Cette instruction permet d'effectuer une division signe (nombre entier). Cette instruction permet d'effectuer une multiplication signe (nombre entier). INTEL 8086+ INTEL 8086+

FXRSTOR

FXSAVE

FXTRACT

FYL2X

FYL2XP1

HLT

IBTS ICEBP IDIV IMUL IN

Cette instruction permet de demander un octet, un mot ou un double mot provenant du port d'entre/sortie et le retourne dans le registre accumulateur INTEL 8086+ (AL, AX, EAX). Cette instruction permet d'incrmenter un registre ou un emplacement INTEL 8086+ mmoire. Cette instruction permet de demander un octet, un mot ou un double mot du port d'entre/sortie et retourne le rsultat dans l'adresse ES:[DI] et INTEL 8086+ incrmente/dcrmente le registre DI en fonction de la taille de l'oprande cible et de l'tat du drapeau de direction. Cette instruction permet de demander un octet du port d'entre/sortie et retourne le rsultat dans l'adresse ES:[DI] et incrmente/dcrmente le INTEL 80286+ registre DI de 1 en fonction de l'tat du drapeau de direction. Cette instruction permet de demander un double mot du port d'entre/sortie et retourne le rsultat dans l'adresse ES:[DI] et incrmente/dcrmente le INTEL 80386+ registre DI de 4 en fonction de l'tat du drapeau de direction. Cette instruction permet de demander un mot du port d'entre/sortie et retourne le rsultat dans l'adresse ES:[DI] et incrmente/dcrmente le INTEL 80286+ registre DI de 2 en fonction de l'tat du drapeau de direction. Cette instruction permet d'excuter l'interruption avec le numro spcifi. INTEL 8086+

INC

INS

INSB

INSD

INSW INT INTO INVD INVLPG

Cette instruction permet d'excuter l'interruption numro 4 si le drapeau de INTEL 8086+ dbordement (OF) est fix sur 1 Cette instruction permet de dsactiver et de vider le tampon interne du microINTEL 80486+ processeur. Cette instruction permet d'invalider les transferts du TLB (Translation INTEL 80486+

11

Lookaside Buffer) du micro-processeur INVLPGA IRET IRETD IRETQ Jump if JMP LAHF LAR LDDQU LDMXCSR LDS LEA Cette instruction permet d'invalider la cartographie TLB (Translation x86-64+ Lookaside Buffer) pour une page virtual et un ASID spcifi. Cette instruction permet d'effectuer un retour prcdemment provoquer par INTEL 8086+ une interruption. Cette instruction permet d'effectuer un retour 32-bits prcdemment INTEL 80386+ provoquer par une interruption. Cette instruction permet d'effectuer un retour 64-bits prcdemment x86-64+ provoquer par une interruption. Ces instructions permettent d'effectuer d'effectuer conditionnel emplacement mmoire spcifi. un branchement INTEL 8086+

Cette instruction permet d'effectuer un branchement un emplacement INTEL 8086+ mmoire spcifi. Cette instruction permet de transfrer les bits d'indicateurs du registre d'tat INTEL 8086+ vers le registre AH. Cette instruction permet de charger le registre des indicateurs d'un INTEL 80286+ descripteur. Cette instruction permet de copier un quadruple mot d'une oprande source INTEL Pentium 4 (SSE3)+ vers une oprande destination. Cette instruction permet d'effectuer le chargement du mot de contrle et d'tat INTEL Pentium III du flux d'extension SIMD d'une oprande mmoire 32 bits. (KNI/MMX2)+ Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits INTEL 8086+ dans la paire de registre de segment DS et dans un registre d'offset spcifi. Cette instruction permet de copier l'offset d'une adresse de mmoire contenu INTEL 8086+ dans un registre spcifi. Cette instruction permet de librer une zone de mmoire attribu par l'instruction ENTER lorsqu'on utilise des procdures dans des langages de INTEL 80286+ programmation de haut niveau. Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits INTEL 8086+ dans la paire de registre de segment ES et dans un registre d'offset spcifi. Cette instruction permet d'agir comme une barrire pour forcer une priorit en mmoire (srialisation) entre les instructions prcdant le LFENCE et les INTEL Pentium 4 (SSE2)+ instructions de chargement suivant le LFENCE. Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits INTEL 80386+ dans la paire de registre de segment FS et dans un registre d'offset spcifi. Cette instruction permet de charger un descripteur de tables globale. INTEL 80286+

LEAVE

LES

LFENCE

LFS LGDT LGS LIDT LLDT LMSW LOADALL

Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits INTEL 80386+ dans la paire de registre de segment GS et dans un registre d'offset spcifi. Cette instruction permet de charger un descripteur de tables d'interruption. Cette instruction permet de charger un descripteur de tables local. INTEL 80286+ INTEL 80286+

Cette instruction permet de copier 4 des bits d'une oprande vers les 4 bits de INTEL 80286+ registre de contrle CR0. Cette instruction permet d'effectuer le chargement de tous les registres de INTEL 80286 ou 80386 descripteur de cache. Cette instruction est utilis comme prfixe avec d'autres instructions pour amener le microprocesseur mettre un signal de vrouillage (Lock) sur le INTEL 8086+ bus lors du traitement de l'instruction suivante. Cette instruction permet de copier un lment de l'adresse DS:SI dans le INTEL 8086+ registre accumulateur et incrmente/dcrmente le registre SI en fonction de

LOCK

LODS

12

la taille de l'oprande source et de l'tat du drapeau de direction. LODSB Cette instruction permet de copier un lment de l'adresse DS:SI dans le registre accumulateur et incrmente/dcrmente le registre SI de 1 en fonction INTEL 8086+ de l'tat du drapeau de direction. Cette instruction permet de copier un lment de l'adresse DS:SI dans le registre accumulateur et incrmente/dcrmente le registre SI de 4 en fonction INTEL 80386+ de l'tat du drapeau de direction. Cette instruction permet de copier un lment de l'adresse DS:(R)SI dans le registre accumulateur et incrmente/dcrmente le registre (R)SI de 8 en x86-64+ fonction de l'tat du drapeau de direction. Cette instruction permet de copier un lment de l'adresse DS:SI dans le registre accumulateur et incrmente/dcrmente le registre SI de 2 en fonction INTEL 8086+ de l'tat du drapeau de direction. Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 8086+ destinataire tant que le registre CX ne vaut pas 0. Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 80386+ destinataire tant que le registre ECX ne vaut pas 0. Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 8086+ destinataire tant que le registre CX ne vaut pas 0 et si le drapeau ZF vaut 1. Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 80386+ destinataire tant que le registre ECX ne vaut pas 0 et si le drapeau ZF vaut 1. Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 8086+ destinataire tant que le registre CX ne vaut pas 0 et si le drapeau ZF vaut 0. Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 80386+ destinataire tant que le registre ECX ne vaut pas 0 et si le drapeau ZF vaut 0. Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 8086+ destinataire tant que le registre CX ne vaut pas 0 et si le drapeau ZF vaut 0. Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 80386+ destinataire tant que le registre ECX ne vaut pas 0 et si le drapeau ZF vaut 0. Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 8086+ destinataire tant que le registre CX ne vaut pas 0 et si le drapeau ZF vaut 1. Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette INTEL 80386+ destinataire tant que le registre ECX ne vaut pas 0 et si le drapeau ZF vaut 1. Cette instruction permet de charger la limite de segment d'un descripteur de segment spcifi avec l'oprande source dans l'oprande de destination et fixe INTEL 80286+ le drapeau ZF du registre EFLAGS. Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits dans la paire de registre de segment SS (Segment de pile) et dans un registre INTEL 80386+ d'offset spcifi. Cette instruction permet de charger l'oprande source dans le champ du INTEL 80286+ slecteur de segment du registre de tche. Cette instruction permet de compter le nombre de bits 0 dans un registre 16, AMD K10 (SSE4a)+ 32 ou 64 bits contenu dans l'oprande source.

LODSD

LODSQ

LODSW

LOOP

LOOPD

LOOPE

LOOPED

LOOPNE

LOOPNED

LOOPNZ

LOOPNZD

LOOPZ

LOOPZD

LSL

LSS

LTR LZCNT

13

MASKMOVDQU MASKMOVQ MAXPS MAXSS

Cette instruction permet d'entreposer les octets slectionns par l'oprande INTEL Pentium 4 (SSE2)+ source dans une emplacement mmoire de 128 bits. Cette instruction permet d'entreposer les octets slectionner de l'oprande Pentium III (KNI/MMX2)+ source dans un emplacement mmoire de 64 bits. Cette instruction permet de retourner la valeur maximal de chacune des paires Pentium III (KNI/MMX2)+ de valeur entre l'oprande source et l'oprande de destination. Cette instruction permet de retourner la valeur maximal entre l'oprande Pentium III (KNI/MMX2)+ source et destination. Cette instruction permet d'agir comme une barrire pour forcer une priorit en mmoire (srialisation) entre les instructions prcdant le MFENCE et les INTEL Pentium 4 (SSE2)+ instructions de chargement et d'entreposage prcdent le MFENCE. Cette instruction permet de retourner la valeur minimal de chacune des paires Pentium III (KNI/MMX2)+ de valeur entre l'oprande source et l'oprande de destination. Cette instruction permet de retourner la valeur minimal entre l'oprande Pentium III (KNI/MMX2)+ source et destination. Cette instruction permet d'indiquer au microprocesseur quel rang d'adresse INTEL Pentium 4+ est serveiller par l'instruction STORE. Cette instruction permet de copier oprande source dans une oprande INTEL 8086+ destinataire. Cette instruction permet de copier le contenu de 4 paquets aligns de valeurs Pentium III (KNI/MMX2)+ rel de simple prcision (4 x 32 bits). Cette instruction permet de copier l'oprande dans un registre XMM ou viceINTEL Pentium MMX+ vera. Cette instruction permet de copier le contenu du haut d'un paquet de valeurs Pentium III (KNI/MMX2)+ rel de simple prcision dans sa partie basse. Cette instruction permet de copier le contenu du haut de deux paquets de Pentium III (KNI/MMX2)+ valeurs rel de simple prcision dans une oprande de destination. Cette instruction permet de copier le contenu du bas d'un paquet de valeurs Pentium III (KNI/MMX2)+ rel de simple prcision dans sa partie haute. Cette instruction permet de copier le contenu du bas de deux paquets de Pentium III (KNI/MMX2)+ valeurs rel de simple prcision dans une oprande de destination. Cette instruction permet de copier le contenu de 4 paquets aligns de valeurs rel de simple prcision sans utiliser la mthode temporel pour minimiser la Pentium III (KNI/MMX2)+ pollution du cache. Cette instruction permet de copier les bits de signes de deux paquets de valeurs rels de double prcision d'un registre XMM dans les 2 bits les plus INTEL Pentium 4 (SSE2)+ bas d'un registre 32 bits. Les autres bits du registres 32 bits sont fixs 0. Cette instruction permet de copier les bits de signes de quatre paquets de valeurs rels de simple prcision d'un registre XMM dans les 4 bits les plus INTEL Pentium 3 (SSE)+ bas d'un registre 32 bits. Les autres bits du registres 32 bits sont fixs 0. Cette instruction permet de copier une valeur 32 ou 64 bits dans un emplacement mmoire afin de minimiser la pollution du cache dans un INTEL Pentium 4 (SSE2)+ processus lger. Cette instruction permet de copier une valeur 64 bits sans utiliser la mthode Pentium III (KNI/MMX2)+ temporel pour minimiser la pollution du cache. Cette instruction permet de copier un quadruple mot d'une oprande source INTEL Pentium MMX+ vers une oprande destination dans le cas des registres XMM. Cette instruction permet de copier un lment de l'adresse DS:SI dans l'adresse ES:DI et incrmente/dcrmente les registres DI et SI en fonction de INTEL 8086+ la taille de l'oprande source et de l'tat du drapeau de direction. Cette instruction permet de copier un octet de l'adresse DS:SI dans l'adresse INTEL 8086+

MFENCE

MINPS MINSS MONITOR MOV MOVAPS MOVD MOVHLPS MOVHPS MOVLHPS MOVLPS

MOVNTPS

MOVMSKPD

MOVMSKPS

MOVNTI

MOVNTQ MOVQ

MOVS MOVSB

14

ES:DI et incrmente/dcrmente les registres DI et SI de 1 en fonction de l'tat du drapeau de direction. MOVSD Cette instruction permet de copier un double mot de l'adresse DS:SI dans l'adresse ES:DI et incrmente/dcrmente les registres DI et SI de 4 en INTEL 80386+ fonction de l'tat du drapeau de direction. Cette instruction permet de copier un quadruple mot de l'adresse DS:(R)SI dans l'adresse ES:(R)DI et incrmente/dcrmente les registres (R)DI et (R)SI x86-64+ de 8 en fonction de l'tat du drapeau de direction. Cette instruction permet de copier une valeur rel de simple prcision d'une Pentium III (KNI/MMX2)+ oprande source vers une oprande de destination. Cette instruction permet de copier un mot de l'adresse DS:SI dans l'adresse ES:DI et incrmente/dcrmente les registres DI et SI de 2 en fonction de INTEL 8086+ l'tat du drapeau de direction. Cette instruction permet de copier un registre de taille infrieur dans un INTEL 80386+ registre de plus grande taille en remplissant les bits supplmentaires par des 1. Cette instruction permet de copier un registre de taille infrieur dans un x86-64+ registre 64 bits en remplissant les bits supplmentaires par des 1. Cette instruction permet de copier le contenu de 4 paquets dsaligns de Pentium III (KNI/MMX2)+ valeurs rel de simple prcision (4 x 32 bits). Cette instruction permet de copier un registre de taille infrieur dans un INTEL 80386+ registre de plus grande taille en remplissant les bits supplmentaires par des 0. Cette instruction permet d'effectuer une multiplication non-signe (nombre INTEL 8086+ naturel). Cette instruction permet d'effectuer la multiplication de chacune des paires de Pentium III (KNI/MMX2)+ valeur de l'oprande source et l'oprande de destination. Cette instruction permet d'effectuer la multiplication scalaire de l'oprande Pentium III (KNI/MMX2)+ source et l'oprande de destination. Cette instruction permet d'indiquer au microprocesseur que l'tat de l'alimentation de la ligne de cache est en attente d'criture dans la plage INTEL Pentium 4+ d'adresse, mettant fin la plupart des activits dans le noyau en le faisant. Cette instruction permet d'effectuer le complment 2 d'une oprande. Cette instruction ne fait rien. INTEL 8086+ INTEL 8086+

MOVSQ

MOVSS

MOVSW

MOVSX MOVSXD MOVUPS MOVZX MUL MULPS MULSS

MWAIT NEG NOP NOT OIO OR ORPS OUT

Cette instruction permet d'inverser la valeur de chacun des bits d'une INTEL 8086+ oprande. Cette instruction permet de provoquer l'excution d'un code indfinie. Cyrix Cx6x86/AMD Am5k86

Cette instruction permet d'effectuer un OU BINAIRE sur les 2 oprandes INTEL 8086+ spcifis. Cette instruction permet d'effectuer un OU BINAIRE de 128 bits sur les 2 Pentium III (KNI/MMX2)+ oprandes spcifis. Cette instruction permet d'envoyer un octet, un mot ou un double mot sur le INTEL 8086+ port d'entre/sortie. Cette instruction permet d'envoyer un octet, un mot ou un double mot contenu dans l'adresse DS:[SI] du port d'entre/sortie et incrmente/dcrmente le INTEL 80286+ registre SI en fonction de la taille de l'oprande cible et de l'tat du drapeau de direction. Cette instruction permet d'envoyer un octet contenu dans l'adresse DS:[SI] du port d'entre/sortie et incrmente/dcrmente le registre SI de 1 en fonction de INTEL 80286+ l'tat du drapeau de direction. Cette instruction permet d'envoyer un double mot contenu dans l'adresse DS:[SI] du port d'entre/sortie et incrmente/dcrmente le registre SI de 4 en INTEL 80386+ fonction de l'tat du drapeau de direction.

OUTS

OUTSB

OUTSD

15

OUTSW PACKSSDW PACKSSWB PACKUSWB PADDB PADDD PADDSB

Cette instruction permet d'envoyer un mot contenu dans l'adresse DS:[SI] du port d'entre/sortie et incrmente/dcrmente le registre SI de 2 en fonction de INTEL 80286+ l'tat du drapeau de direction. Cette instruction permet de compact 8 paquets de double mots en mots. Cette instruction permet de compact 8 paquets d'entier en octets. Cette instruction permet de compact 8 paquets de mots en octets. INTEL Pentium Pro+ INTEL Pentium Pro+ INTEL Pentium Pro+

Cette instruction permet d'effectuer une addition scalaire sur un paquet de 8 INTEL Pentium Pro+ octets. Cette instruction permet d'effectuer une addition scalaire sur un paquet de 2 INTEL Pentium Pro+ double mots. Cette instruction permet d'effectuer une addition scalaire avec saturation sur INTEL Pentium Pro+ un paquet de 8 octets signs. Cette instruction permet d'effectuer l'addition du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit Cyrix 6x86MX (EMMX)+ le rsultat dans le registre MMX. Cette instruction permet d'effectuer une addition scalaire avec saturation sur INTEL Pentium Pro+ un paquet de 4 entiers. Cette instruction permet d'effectuer une addition scalaire avec saturation sur INTEL Pentium Pro+ un paquet de 8 octets. Cette instruction permet d'effectuer une addition scalaire avec saturation sur INTEL Pentium Pro+ un paquet de 4 mots. Cette instruction permet d'effectuer une addition scalaire sur un paquet de 4 INTEL Pentium Pro+ mots. Cette instruction permet d'effectuer un ET BINAIRE d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres INTEL Pentium MMX+ XMM. Cette instruction permet d'effectuer un ET BINAIRE et une NEGATION de chacun des bits d'un quadruple mot d'une oprande source avec une INTEL Pentium Pro+ oprande destination dans le cas des registres XMM. Cette instruction permet d'amliorer les performances des boucles de SPIN, en fournissant une indication pour le microprocesseur que le code courant est INTEL Pentium 4 (SSE2)+ dans une boucle en SPIN. Cette instruction permet d'effectuer le calcul de la moyenne des paquets Cyrix 6x86MX (EMMX)+ spcifis. Cette instruction permet d'effectuer le calcul de la moyenne de paquets de 8 AMD 3DNow! octets spcifis. Cette instruction permet d'effectuer une comparaison sur un paquet d'octets et INTEL Pentium Pro+ fixe la valeur de chacun d'eux FFh s'ils sont gales sinon 00h. Cette instruction permet d'effectuer une comparaison sur un paquet de double mots et fixe la valeur de chacun d'eux FFFFFFFFh s'ils sont gales sinon INTEL Pentium Pro+ 00000000h. Cette instruction permet d'effectuer une comparaison sur un paquet de mots et INTEL Pentium Pro+ fixe la valeur de chacun d'eux FFFFh s'ils sont gales sinon 0000h. Cette instruction permet d'effectuer une comparaison sur un paquet d'octets et fixe la valeur de chacun d'eux FFh si l'oprande destinataire est suprieur INTEL Pentium Pro+ l'oprande source sinon 00h. Cette instruction permet d'effectuer une comparaison sur un paquet de double mots et fixe la valeur de chacun d'eux FFFFFFFFFh si l'oprande INTEL Pentium Pro+ destinataire est suprieur l'oprande source sinon 00000000h. Cette instruction permet d'effectuer une comparaison sur un paquet de mots et INTEL Pentium Pro+ fixe la valeur de chacun d'eux FFFFFh si l'oprande destinataire est

PADDSIW

PADDSW PADDUSB PADDUSW PADDW

PAND

PANDN

PAUSE

PAVEB PAVGUSB PCMPEQB

PCMPEQD

PCMPEQW

PCMPGTB

PCMPGTD

PCMPGTW

16

suprieur l'oprande source sinon 0000h. PDISTIB Cette instruction permet d'effectuer le calcul de la distance entre des octets de deux oprandes, le rsultat de l'addition d'octet de l'oprande de destination et Cyrix 6x86MX (EMMX)+ la saturation du rsultat. Cette instruction permet de copier le mot de l'oprande source spcifi par INTEL Pentium III une compteur d'oprande dans l'oprande de destination. (KNI/MMX2)+ Cette instruction permet de convertir un double mots d'un format rel un AMD 3DNow! format d'entier 32 bits. Cette instruction permet de convertir un double mots d'un format rel un AMD 3DNow! format d'entier 16 bits. Cette instruction permet d'effectuer l'accumulation de double mots. Cette instruction permet d'effectuer l'addition de double mots. AMD 3DNow! AMD 3DNow!

PEXTRW PF2ID PF2IW PFACC PFADD PFCMPEQ PFCMPGE PFCMPGT PFMAX PFMIN PFMUL PFNACC PFPNACC PFRCP

Cette instruction permet d'effectuer la comparaison d'galit d'un paquet de AMD 3DNow! double mots contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer la comparaison d'galit ou de supriorit AMD 3DNow! d'un paquet de double mots contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer la comparaison de supriorit d'un paquet AMD 3DNow! de double mots contenu dans des oprandes de 64 bits. Cette instruction permet de retourner la valeur maximal de chacun des AMD 3DNow! doubles mots d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet de retourner la valeur minimal de chacun des doubles AMD 3DNow! mots d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer la multiplication de la valeur de chacun AMD 3DNow! des doubles mots d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer l'accumulation ngative de double mots. AMD 3DNow!

Cette instruction permet d'effectuer un mixe d'accumulation positive et AMD 3DNow! ngative de double mots. Cette instruction permet d'effectuer la rciproque de la valeur de chacun des AMD 3DNow! doubles mots d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer la premire tape d'itration de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans AMD 3DNow! des oprandes de 64 bits. Cette instruction permet d'effectuer la deuxime tape d'itration de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans AMD 3DNow! des oprandes de 64 bits. Cette instruction permet d'effectuer la premire tape d'itration de la racine carr de la rciproque de la valeur de chacun des doubles mots d'un paquet AMD 3DNow! contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer la racine carr approximative de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans AMD 3DNow! des oprandes de 64 bits. Cette instruction permet d'effectuer la soustraction de la valeur de chacun des AMD 3DNow! doubles mots d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer la soustraction invers de la valeur de AMD 3DNow! chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet de convertir un paquet de format d'entier 32 bits AMD 3DNow! double mots d'un format rel. Cette instruction permet de convertir un paquet de format d'entier 16 bits AMD 3DNow! double mots d'un format rel.

PFRCPIT1

PFRCPIT2

PFRSQIT1

PFRSQRT

PFSUB PFSUBR PI2FD PI2FW

17

PINSRW

Cette instruction permet d'effectuer une copie d'une oprande source et de INTEL Pentium III l'insrer dans l'oprande de destination de l'emplacement spcifi par un (KNI/MMX2)+ compteur d'oprande. Cette instruction permet d'effectuer une multiplication de 2 oprandes sources en utilisant la mthode dcrite par PMULHRW et accumule le rsultat avec la Cyrix 6x86MX (EMMX)+ valeur dans un registre de destination en utilisant un arrondissement arithmtique. Cette instruction permet d'effectuer une multiplication de 2 registres MMX INTEL Pentium Pro+ contenant dans un paquet de mots d'un emplacement/mmoire. Cette instruction permet d'effectuer la comparaison de la valeur absolue d'un paquet de mots de l'oprande source et de l'ensemble des mots de destination Cyrix 6x86MX (EMMX)+ et fixe l'oprande de destination avec la valeur de la plus large magntude. Cette instruction permet de retourner la valeur maximal de chacun des mots INTEL Pentium III des paquets contenu dans deux oprandes. (KNI/MMX2)+ Cette instruction permet de retourner la valeur maximal de chacun des octets INTEL Pentium III des paquets contenu dans deux oprandes. (KNI/MMX2)+ Cette instruction permet de retourner la valeur minimal de chacun des mots INTEL Pentium III des paquets contenu dans deux oprandes. (KNI/MMX2)+ Cette instruction permet de retourner la valeur minimal de chacun des octets INTEL Pentium III des paquets contenu dans deux oprandes. (KNI/MMX2)+ Cette instruction permet de copis les masques de chacun des octets d'un INTEL Pentium III paquet contenu dans une oprande. (KNI/MMX2)+ Cette instruction permet de retourner le rsultat d'une matrice de 16x16 bits avec un arrondissement LSB avant de tronquer les 16 bits et place ce rsultat Cyrix 6x86MX (EMMX)+ dans un registre MMX. Cette instruction permet de retourner le rsultat d'une matrice de 16x16 bits Cyrix 6x86MX (EMMX)+ avec un arrondissement LSB avant de tronquer les 16 bits. Cette instruction permet d'effectuer la multiplication de la partie haute de INTEL Pentium III chacun des entiers des 2 paquets d'oprandes. (KNI/MMX2)+ Cette instruction permet d'effectuer la multiplication de la partie haute de INTEL Pentium Pro+ chacun des mots des 2 paquets d'oprandes. Cette instruction permet d'effectuer la multiplication de la partie basse de INTEL Pentium Pro+ chacun des mots des 2 paquets d'oprandes. Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande Cyrix 6x86MX (EMMX)+ destination est suprieur 0 et effectue se traitement pour chacun des 8 octets du paquet. Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande Cyrix 6x86MX (EMMX)+ destination est infrieur 0 et effectue se traitement pour chacun des 8 octets du paquet. Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande Cyrix 6x86MX (EMMX)+ destination ne vaut pas 0 et effectue se traitement pour chacun des 8 octets du paquet. Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande Cyrix 6x86MX (EMMX)+ destination vaut 0 et effectue se traitement pour chacun des 8 octets du paquet. Cette instruction permet de dsempiler de la pile une mot ou un double mot et INTEL 8086+ la met dans une oprande. Cette instruction permet de dsempiler de la pile respectivement les registres INTEL 80286+ DI, SI, BP, SP, BX, DX, CX et AX.

PMACHRIW

PMADDWD

PMAGW

PMAXSW PMAXUB PMINSW PMINUB PMOVMSKB

PMULHRIW

PMULHRW PMULHUW PMULHW PMULLW

PMVGEZB

PMVLZB

PMVNZB

PMVZB

POP POPA

18

POPAD POPCNT POPF POPFD POPFQ

Cette instruction permet de dsempiler de la pile respectivement les registres INTEL 80386+ EDI, ESI, EBP, ESP, EBX, EDX, ECX et EAX. Cette instruction permet de compter le nombre de bits 1 que possde une AMD K10 (SSE4a)+ oprande source et place le rsultat dans un registre destinataire. Cette instruction permet de dsempiler de la pile le registre 16 bits de drapeau INTEL 8086+ contenant les indicateurs d'tat. Cette instruction permet de dsempiler de la pile le registre 32 bits de drapeau INTEL 80386+ contenant les indicateurs d'tat. Cette instruction permet de dsempiler de la pile le registre 64 bits de drapeau x86-64+ (RFLAGS) contenant les indicateurs d'tat. Cette instruction permet d'effectuer un OU BINAIRE d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres INTEL Pentium MMX+ XMM. Cette instruction permet d'effectuer le chargement de l'entre d'une squence d'alignement de mmoire de 64 bits de l'adresse mmoire spcifi dans le AMD K6-2+ cache de donnes L1 du microprocesseur. Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T0 du microprocesseur. INTEL Pentium III (SSE)+ Alias de PREFETCHT0. Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T1 du microprocesseur. INTEL Pentium III (SSE)+ Alias de PREFETCHT1. Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T2 du microprocesseur. INTEL Pentium III (SSE)+ Alias de PREFETCHT2. Cette instruction permet d'effectuer le chargement de la ligne de cache de INTEL Pentium III (SSE)+ l'adresse mmoire spcifi dans le cache de donnes NTA du microprocesseur. Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T0 du microprocesseur. INTEL Pentium III (SSE)+ Alias de PREFETCH0. Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T1 du microprocesseur. INTEL Pentium III (SSE)+ Alias de PREFETCH1. Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T2 du microprocesseur. INTEL Pentium III (SSE)+ Alias de PREFETCH2. Cette instruction permet d'effectuer le chargement de l'entre d'une squence d'alignement de mmoire de 64 bits de l'adresse mmoire spcifi dans le AMD K6-2+ cache de donnes L1 du microprocesseur dans un tat de modification. Cette directive permet de dfinir une procdure (sous-programme). Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un INTEL Pentium Pro+ paquet de double mots. Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un INTEL Pentium Pro+ quadruple mot. Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un INTEL Pentium Pro+ paquet de mots. Cette instruction permet d'effectuer le dcalage arithmtique de bits vers la INTEL Pentium Pro+ droite d'un paquet de double mots. Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un INTEL Pentium Pro+ paquet de mots. Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un INTEL Pentium Pro+ paquet de double mots.

POR

PREFETCH

PREFETCH0

PREFETCH1

PREFETCH2

PREFETCHNTA

PREFETCHT0

PREFETCHT1

PREFETCHT2

PREFETCHW PROC PSLLD PSLLQ PSLLW PSRAD PSRAW PSRLD

19

PSRLQ PSRLW PSUBB PSUBD

Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un INTEL Pentium Pro+ quadruple mot. Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un INTEL Pentium Pro+ paquet de mots. Cette instruction permet d'effectuer la soustraction de la valeur de chacun des INTEL Pentium Pro+ octets d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer la soustraction de la valeur de chacun des INTEL Pentium Pro+ doubles mots d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des octets signs d'un paquet contenu dans des oprandes de INTEL Pentium Pro+ 64 bits. Cette instruction permet d'effectuer la soustraction du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit Cyrix 6x86MX (EMMX)+ le rsultat dans le registre MMX. Cette instruction permet d'effectuer la soustraction du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit INTEL Pentium Pro+ le rsultat dans l'oprande destinataire. Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des octets d'un paquet contenu dans des oprandes de 64 INTEL Pentium Pro+ bits. Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des mots d'un paquet contenu dans des oprandes de INTEL Pentium Pro+ destinations. Cette instruction permet d'effectuer la soustraction de la valeur de chacun des INTEL Pentium Pro+ mots d'un paquet contenu dans des oprandes de 64 bits. Cette instruction permet d'effectuer l'change de la partie basse de 32 bits avec la partie haute de 32 bits dans des oprandes source de 64 bits et met le 3DNow! rsultat dans une oprande 64 bits destinataire. Cette directive permet de rendre publique une expression pour des liaisons externe. Cette instruction permet de dcompacter des octets en mots dans le haut d'un INTEL Pentium Pro+ paquets de 64 bits. Cette instruction permet de dcompacter des doubles mots en quadruples INTEL Pentium Pro+ mots dans le haut d'un paquets de 64 bits. Cette instruction permet de dcompacter des mots en double mots dans le INTEL Pentium Pro+ haut d'un paquets de 64 bits. Cette instruction permet de dcompacter des octets en mots dans le bas d'un INTEL Pentium Pro+ paquets de 64 bits. Cette instruction permet de dcompacter des doubles mots en quadruples INTEL Pentium Pro+ mots dans le bas d'un paquets de 64 bits. Cette instruction permet de dcompacter des mots en double mots dans le bas INTEL Pentium Pro+ d'un paquets de 64 bits. Cette instruction permet d'empiler une mot ou un double mot dans la pile. INTEL 8086+

PSUBSB

PSUBSIW

PSUBSW

PSUBUSB

PSUBUSW

PSUBW

PSWAPD

PUBLIC PUNPCKHBW PUNPCKHDQ PUNPCKHWD PUNPCKLBW PUNPCKLDQ PUNPCKLWD PUSH PUSHA PUSHAD PUSHF PUSHFD

Cette instruction permet d'empiler respectivement les registres DI, SI, BP, SP, INTEL 80286+ BX, DX, CX et AX dans la pile. Cette instruction permet d'empiler respectivement les registres EDI, ESI, INTEL 80386+ EBP, ESP, EBX, EDX, ECX et EAX dans la pile. Cette instruction permet d'empiler respectivement le registre 16 bits de INTEL 8086+ drapeau des indicateurs d'tat dans la pile. Cette instruction permet d'empiler respectivement le registre 32 bits de INTEL 80386+ drapeau des indicateurs d'tat dans la pile.

20

PUSHFQ

Cette instruction permet d'empiler respectivement le registre 64 bits de x86-64+ drapeau (RFLAGS) des indicateurs d'tat dans la pile. Cette instruction permet d'effectuer un ou exclusif binaire d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres INTEL Pentium MMX+ XMM. Cette instruction permet d'effectuer une rotation des bits vers la gauche en rinsrant le bit dans l'indicateur de retenue (CF) ainsi que dans le bit le plus INTEL 8088+ droite libr. Cette instruction permet d'effectuer le calcul de la rciproque d'un paquet de INTEL Pentium III valeurs de rel de simple prcision. (KNI/MMX2)+ Cette instruction permet d'effectuer le calcul de la rciproque d'une valeur de INTEL Pentium III rel de simple prcision. (KNI/MMX2)+ Cette instruction permet d'effectuer une rotation des bits vers la droite en rinsrant le bit dans l'indicateur de retenue (CF) ainsi que dans le bit le plus INTEL 8088+ gauche libr. Cette instruction permet de charger le contenu du modle de registre 64-bits INTEL Pentium+ (MSR) indiquer par le registre ECX dans le couple de registre EDX:EAX. Cette instruction permet d'effectuer la lecture du compteur du moniteur de INTEL Pentium Pro+ performance. Cette instruction permet d'effectuer la lecture du registre de pointeur vers Cyrix CX6x86MX+ l'entte SMM. Cette instruction permet de charger la valeur courante du compteur de temps INTEL Pentium+ du microprocesseur dans le couple de registres EDX:EAX. Cette instruction permet de charger la valeur courante du compteur de temps du microprocesseur dans le couple de registres EDX:EAX et la valeur du x86-64+ TSC_AUX dans le registre ECX. Cette instruction est utilis comme prfixe avec d'autres instructions pour INTEL 8086+ effectuer des rptitions d'instructions tant que CX ne vaut pas 0. Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que INTEL 8086+ l'indicateur ZF = 0. Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que INTEL 8086+ l'indicateur ZF = 1. Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que INTEL 8086+ l'indicateur ZF = 1. Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que INTEL 8086+ l'indicateur ZF = 0. Cette instruction permet d'effectuer le chargement de tous les registres de AMD Am386SXLV, descripteur de cache pour les 386. Am386DXLV Cette instruction permet d'effectuer le chargement de tous les registres de AMD Am486SXLV, descripteur de cache pour les 486. Am486DXLV Cette instruction permet de quitter une procdure. INTEL 8086+

PXOR

RCL

RCPPS RCPSS

RCR

RDMSR RDPMC RDSHR RDTSC

RDTSCP

REP

REPE

REPNE

REPNZ

REPZ

RES3 RES4 RET RETF RETN ROL

Cette instruction permet de quitter une procdure ayant lieu avec un appel INTEL 8086+ long (FAR CALL). Cette instruction permet de quitter une procdure ayant lieu avec un appel INTEL 8086+ court (NEAR CALL). Cette instruction permet d'effectuer une rotation des bits vers la gauche en INTEL 8088+ rinsrant le bit dans le bit le plus droite libr.

21

ROR RSDC RSLDT

Cette instruction permet d'effectuer une rotation des bits vers la droite en INTEL 8088+ rinsrant le bit dans le bit le plus gauche libr. Cette instruction permet d'effectuer le restauration de la structure des registres Quelques 486 et des descripteurs. Cette instruction permet d'effectuer la restauration des LDTR et des Quelques 486 descripteurs. Cette instruction permet de retourner le contrle du programme du mode de gestion systme (SMM) pour le programme d'application ou la procdure du INTEL 80486+ systme d'exploitation ayant t interrompu lorsque le microprocesseur recu un signal SSM. Cette instruction permet de calculer la rciproque approximative de la racine INTEL Pentium III carr d'un paquet de simple prcision. (KNI/MMX2)+ Cette instruction permet de calculer la rciproque approximative de la racine INTEL Pentium III carr d'un scalaire de simple prcision. (KNI/MMX2)+ Cette instruction permet d'effectuer le restauration des TR et des descripteurs. Quelques 486

RSM

RSQRTPS RSQRTSS RSTS SAHF SAL SAR SBB

Cette instruction permet de copier les bits du registre AH dans l'octet de poids INTEL 8088+ faible dans le registre des drapeaux (les indicateurs d'tat). Cette instruction permet d'effectuer une rotation des bits vers la gauche en INTEL 8088+ rinsrant le bit dans l'indicateur de retenue (CF). Cette instruction permet d'effectuer une rotation des bits vers la droite en INTEL 8088+ rinsrant le bit dans l'indicateur de retenue (CF). Cette instruction permet de soustraire avec l'indicateur de retenue (CF) une INTEL 8088+ valeur une oprande. Cette instruction permet de comparer un octet, un mot ou un double mot avec la cellule mmoire l'adresse ES:[DI] et incrmente/dcrmente le registre DI INTEL 8086+ en fonction de la taille de l'oprande cible et de l'tat du drapeau de direction. Cette instruction permet de comparer le registre AL avec la cellule mmoire l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 1 en fonction de INTEL 8086+ l'tat du drapeau de direction. Cette instruction permet de comparer le registre EAX avec la cellule mmoire l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 4 en fonction INTEL 80386+ de l'tat du drapeau de direction. Cette instruction permet de comparer le registre AX avec la cellule mmoire l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 2 en fonction de INTEL 8086+ l'tat du drapeau de direction. Cette directive permet de demander la partie segment de l'adresse d'une INTEL 8086+ oprande. Ces instructions permettent de fixer la valeur d'une oprande 1 si la condition d'indicateur d'tat du registre 32 bits de drapeau est vrai sinon fixe la valeur INTEL 80386+ 0. Cette instruction permet de copier la valeur du drapeau de retenue dans le INTEL 8086+ registre AL en la multipliant par 0FFh. Cette instruction permet d'agir comme une barrire pour forcer une priorit en mmoire (srialisation) entre les instructions prcdant emmagasiner du Pentium III (SSE)+ SFENCE et les instructions suivant le SFENCE. Cette instruction permet d'entreposer le slecteur de segment dans le registre INTEL 80386+ GDTR (registre de table global de descripteur) dans l'oprande de destination. Cette instruction permet d'effectuer une rotation des bits vers la gauche en INTEL 8088+ rinsrant le bit dans l'indicateur de retenue (CF). Cette instruction permet d'effectuer une rotation des bits d'un double mot vers INTEL 80386+ la gauche en rinsrant le bit dans l'indicateur de retenue (CF).

SCAS

SCASB

SCASD

SCASW

SEG

SET

SETALC

SFENCE

SGDT SHL SHLD

22

SHR SHRD

Cette instruction permet d'effectuer une rotation des bits vers la droite en INTEL 8088+ rinsrant le bit dans l'indicateur de retenue (CF). Cette instruction permet d'effectuer une rotation des bits d'un double mot vers INTEL 80386+ la droite en rinsrant le bit dans l'indicateur de retenue (CF). Cette instruction permet de copier 4 paquets de valeurs de format rel de simple prcision dans une oprande destinataire dans la partie basse d'un INTEL Pentium III quadruple mot de celle-ci et copie 2 des 4 paquets de valeurs de format rel (KNI/MMX2)+ de simple prcision dans l'oprande source dans la partie haute d'un quadruple mot de l'oprande destinataire. Cette instruction permet d'entreposer le registre de descripteur de table INTEL 80386+ d'interruption (IDTR) dans l'oprande de destination. Cette instruction permet de rinitialiser de faon scuritaire le AMD-V microprocesseur et de dmarrer un logiciel de confiance comme un VMM. Cette instruction permet d'entreposer le slecteur de segment dans le registre INTEL 80386+ LDTR (registre de table local de descripteur) dans l'oprande de destination. Cette instruction permet de grer les interruptions systmes en mode de AMD dboguage. Am386SXLV,Am386DXLV Cette instruction permet de faire entre le microprocesseur en mode SMM P6, Cyrix (System Management Mode). Cette instruction permet de faire entre le microprocesseur en mode SMM Quelques 486 (System Management Mode). Cette instruction permet d'entreposer le mot des tats (soit les bits de 0 15 du registre de contrle CR0) partir du registre de tche (TR) dans l'oprande INTEL 80386+ cible. Cette instruction permet d'effectuer le calcul de la racine carr d'un paquet de INTEL Pentium III valeur de simple prcision rel de l'oprande source et de mettre son rsultat (KNI/MMX2)+ dans l'oprande de destination sous forme d'un rel de simple prcision. Cette instruction permet d'effectuer le calcul de la racine carr d'une valeur de INTEL Pentium III simple prcision rel de l'oprande source et de mettre son rsultat dans (KNI/MMX2)+ l'oprande de destination sous forme d'un rel de simple prcision. Ce prfixe permet d'indiquer une instruction d'utiliser le Segment de Pile INTEL 8088+ (Stack Segment) pour adresse dans l'oprande. Cette instruction permet de fixer l'indicateur de retenue (CF) la valeur 1. Cette instruction permet de fixer l'indicateur de direction (DF) la valeur 1. INTEL 8088+ INTEL 8088+

SHUFPS

SIDT SKINIT SLDT SMI SMINT SMINTOLD

SMSW

SQRTPS

SQRTSS

SS: STC STD STGI STI STMXCSR

Cette instruction permet de fixer les drapeaux global d'interruption (GIF). AMD-V Quand le GIF est 1, les interruptions externes sont ractivs. Cette instruction permet de fixer l'indicateur d'interruption (IF) la valeur 1. INTEL 8088+

Cette instruction permet de copier le MXCSR dans un emplacement mmoire INTEL Pentium III de 32 bits. (KNI/MMX2)+ Cette instruction permet de copier un octet, un mot ou un double mot dans la cellule mmoire l'adresse ES:[DI] et incrmente/dcrmente le registre DI INTEL 8086+ en fonction de la taille de l'oprande cible et de l'tat du drapeau de direction. Cette instruction permet de copier le registre AL dans la cellule mmoire l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 1 en fonction de INTEL 8086+ l'tat du drapeau de direction. Cette instruction permet de copier le registre EAX dans la cellule mmoire l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 4 en fonction de INTEL 80386+ l'tat du drapeau de direction. Cette instruction permet de copier le registre RAX dans la cellule mmoire l'adresse ES:[(R)DI] et incrmente/dcrmente le registre (R)DI de 8 en x86-64+ fonction de l'tat du drapeau de direction.

STOS

STOSB

STOSD

STOSQ

23

STOSW

Cette instruction permet de copier le registre AX dans la cellule mmoire l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 2 en fonction de INTEL 8086+ l'tat du drapeau de direction. Cette instruction permet d'entreposer le slecteur de segment partir du INTEL 80286+ registre de tche (TR) l'oprande cible Cette instruction permet de soustraire une valeur une oprande. INTEL 8088+

STR SUB

SUBPS

Cette instruction permet d'effectuer une soustraction de 4 paquets de valeurs rels de simple prcision d'une oprande source et d'une oprande destination INTEL Pentium III et entrepose le rsultat dans l'oprande de destination sous le format d'un (KNI/MMX2)+ paquet de valeurs rels de simple prcision. Cette instruction permet d'effectuer une soustraction de la partie basse d'une valeur rel de simple prcision d'une oprande source et destination et INTEL Pentium III entrepose le rsultat dans une oprande de destination de valeur rel de simple (KNI/MMX2)+ prcision. Cette instruction permet de sauvegarder le registre et le descripteur. Cette instruction permet de sauvegarder le LDTR et le descripteur. Cette instruction permet de sauvegarder le TR et le descripteur. Quelques 486 Quelques 486 Quelques 486

SUBSS

SVDC SVLDT SVTS SWAPGS SYSCALL SYSENTER SYSEXIT SYSRET TEST TPASCAL

Cette instruction permet de fournir une mthode un logiciel systme pour x86-64+ charger un pointeur sur une structure de donnes systme. Cette instruction permet d'effectuer le transfert du contrle d'un point d'entre AMD K6-2+ fixe au systme d'exploitation. Cette instruction permet d'effectuer le transfrer du contrle d'un point INTEL Pentium Pro+ d'entre au systme d'exploitation. Cette instruction permet de retourner du systme d'exploitation une INTEL Pentium Pro+ application. Cette instruction permet de retourner du systme d'exploitation une AMD K6-2+ application. Cette instruction permet d'effectuer un Et binaire sur une oprande cible INTEL 8088+ sans modifier sa valeur. Cette directive permet la configurant du modle de mmoire simplifi pour INTEL 8088+ crire des procdures appelable du TURBO PASCAL. Cette instruction permet d'effectuer une comparaison dsordonne de valeurs rels de double prcision dans la partie basse d'un double mot du premier oprande et du deuxime oprande, et fixe les drapeaux ZF, PF et FC dans le INTEL Pentium III+ registre EFLAGS selon le rsultat (non-ordonne, suprieur , infrieur ou gal) Cette instruction permet d'effectuer une comparaison dsordonne de valeurs rels de simple prcision dans la partie basse d'un double mot du premier oprande et du deuxime oprande, et fixe les drapeaux ZF, PF et FC dans le INTEL Pentium III+ registre EFLAGS selon le rsultat (non-ordonne, suprieur , infrieur ou gal) Cette instruction permet de provoquer l'excution d'un code indfinie. Cette instruction permet de provoquer l'excution d'un code indfinie. AMD Am5k86 (SSA/5, K5) INTEL Pentium Pro+

UCOMISD

UCOMISS

UD UD2 UMOV

AMD Am386SXLV, Cette instruction permet de copier un oprande source dans une emplacement Am386DXLV, 486s, IBM mmoire principal. 486SLC2 Cette instruction permet d'effectuer un dpaquetage de la partie basse d'un INTEL Pentium III+ rel de simple prcision d'une oprande source et destination et met le rsultat (KNI/MMX2) dans l'oprande de destination. Cette instruction permet de vrifier si le code ou le segment de donnes INTEL 80286+ spcifi est en mode lecture partir du niveau de privilge courant (CPL).

UNPCKLPS

VERR

24

VERW

Cette instruction permet de vrifier si le code ou le segment de donnes INTEL 80286+ spcifi est en mode criture partir du niveau de privilge courant (CPL). Cette instruction permet d'effectuer le chargement d'un sous-ensemble d'tat de microprocesseur dans un VMCB spcifi par une adresse physique contenu AMD-V dans le registre RAX. Cette instruction permet de fournir un mcanisme invit pour communiquer AMD-V explicitement avec le VMM en gnrant un #VMEXIT. Cette instruction permet de lancer l'excution d'un flux d'instructions invit. AMD-V

VMLOAD

VMMCALL VMRUN VMSAVE

Cette instruction permet d'entreposer un sous-ensemble d'tat du microprocesseur dans un VMCB spcifi par une adresse physique contenu AMD-V dans le registre RAX. Cette instruction permet de faire passer le microprocesseur en mode d'attente INTEL 8088+ jusqu' ce que la ligne de teste sur la carte mre s'active. Cette instruction permet de dsactiver et de vider le tampon interne du microINTEL 80486+ processeur. Cette instruction crit les valeurs contenues dans le MSR (Model-Specific Register) en fonction du registre d'index ECX dans la paire des registres INTEL Pentium+ EDX:EAX. Cette instruction crit les valeurs contenues dans l'oprande source dans Cyrix Cx6x86MX l'entte SMM. Cette instruction permet d'changer le premier oprande avec le deuxime INTEL 80486+ oprande, et ensuite effectue la somme des valeurs dans le premier oprande. Cette instruction permet de prendre des bits dun oprande source et de les INTEL 80386 mettres dans une oprande destinataire. Cette instruction permet d'changer la valeur de deux oprandes. INTEL 8088+

WAIT WBINVD

WRMSR

WRSHR XADD XBTS XCHG XLAT XLATB XOR

Cette instruction permet de remplacer le contenu du registre AL par un octet INTEL 8088+ de la tablesource. Cette instruction permet de remplacer le contenu du registre AL par un octet INTEL 8088+ de la tablesource sans oprande. Cette instruction permet d'effectuer un OU exclusif BINAIRE sur les 2 INTEL 8086+ oprandes spcifis. Cette instruction permet d'effectuer un ou exclusif binaire de 4 paquets de INTEL Pentium III+ valeurs rel de simple prcision dans une oprande source et destination et de (KNI/MMX2) mettre le rsultat dans l'oprande de destination.

XORPS

25

Assembleur 80x86
INTEL 8088+

AAA
Ascii Adjust after Addition

Syntaxe AAA

Description Cette instruction permet d'adapter le rsultat obtenu par l'addition de 2 valeurs en format DCB. Puisque le processeur additionne ces valeurs comme s'il s'agissait de nombres normaux, des dbordements peuvent se produire dans les sommes. Afin de remdier ce problme, la commande AAA offre de convertir le rsultat de l'addition de 2 valeurs de format DCB non compactes en une valeur de format DCB non compacte. Elle cherche la somme de l'addition dans le registre AL. Pour que cette instruction ragisse correctement, il faut qu'elle soit lance directement aprs l'addition de 2 valeurs de format DCB, tant donn que la valeur des indicateurs du micro-processeur revt une importance particulire lors de l'excution de cette commande.

Algorithme * Vaut 1 si c'est vrai retenue d'AL AL > 0F9h SI ( ( AL 0Fh > 9 ) U ( AF = 1 ) ALORS AL ( AL + 6 ) 0Fh AH AH + 1 + retenue d'AL Drapeau AF 1 Drapeau CF 1 SINON AL 0Fh Drapeau AF 0 Drapeau CF 0 FIN SI

26

Mnmonique Instruction AAA Opcode 37h Description Cette instruction permet de crer un nombre dpaquet BCD (invalide en mode 64-bits)

Cycles d'horloge
8086 8088 80186 80286 80386 i486 Pentium Cx486 SLC Cx486DX IBM 486BL3X UMC U5S

Instruction

Opcode

AAA

37h

Affectations des registres de drapeaux


Drapeau CF PF AF ZF SF TF IF DF OF IOPL NT RF WM AC VIF VIP ID Position 0 2 4 6 7 8 9 10 11 12 et 13 14 16 17 18 19 20 21 Description Fix 1 si la dcimal est retenue, sinon il est fix 0. Indfini Fix 1 si la dcimale est retenue, sinon il est fix 0. Indfini Indfini Non affect Non affect Non affect Indfini Non affect Non affect Non affect Non affect Non affect Non affect Non affect Non affect

27

Exceptions Message Mode rel Virtuel 8086 Mode protg Description Cette instruction est excute en mode 64bits

#UD(Opcode invalide)

Exemple Cet exemple permet d'effectuer une addition BCD: MOV AX,0005h MOV CL,06h ADD AL,CL AAA Ce programme retournera donc la valeur 0101h dans le registre AX.

Voir galement Instruction assembleur 80x86 - Instruction AAD Instruction assembleur 80x86 - Instruction AAM Instruction assembleur 80x86 - Instruction AAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 801 Le grand livre pour programmer en Assembleur sur PC, Holger Schakel, 1995, ISBN: 2-7429-0442-5, page 144. 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 53.

28

Assembleur 80x86 INTEL 8088+ Syntaxe AAD AAD immdiat 8

AAD Ascii Adjust ax before Division

Paramtres Nom Description

immdiat 8 Ce paramtre permet une valeur statique de 8 bits

Description Grce cette instruction, on peut convertir une valeur de format DCB non compacte se trouvant dans le registre AX (un chiffre dans le registre AH tandis que l'autre est dans le registre AL) en un nombre binaire tant place dans le registre AL. Pour la division, on utilise l'instruction IDIV en veillant auparavant ce que le registre AH soit vide.

Algorithme AL AH x immdiat 8 bits + AL AH 00h

Mnmonique Instruction AAD Opcode D5h 0Ah Description Ajuste 2 chiffres BCD dans les registres AL et AH (invalide en mode 64-bits) Ajuste 2 chiffres BCD dans les registres AL et AH (invalide en mode 64-bits)

aucun

D5h ib

29

Cycles d'horloge UM IBM 801 802 803 i4 Penti Cx486S Cx486 C 486BL 86 86 86 86 um LC DX U5 3X S 15 14 19 14 10 4 4 15 11

Instruc Opco 80 tion de 86 D5h 0Ah

80 88

AAD

60

60

Exceptions Message Mode rel Virtuel 8086 Mode protg Description Cette instruction est excute en mode 64-bits

#UD(Opcode invalide)

Voir galement Instruction assembleur 80x86 - Instruction AAA Instruction assembleur 80x86 - Instruction AAM Instruction assembleur 80x86 - Instruction AAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 801 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 54.

30

Assembleur 80x86 INTEL 8088+ Syntaxe AAM AAM immdiat 8 Paramtres Nom Description

AAM Ascii adjust AX After Multiplication

immdiat 8 Ce paramtre permet une valeur statique de 8 bits Description Cette instruction offre la possibilit de convertir le produit de la multiplication de 2 valeurs de format DCB en un format DCB. tant donn que le microprocesseur multiplie ces valeurs comme s'il s'agissait de nombres normaux, des dbordements peuvent ventuellement se produire dans les rsultats. L'instruction AAM rectifie cela. Lors de l'excution de cette commande, le contenu du registre AL est divis en 2 chiffres de format DCB nom compacts: le chiffre le plus lev est plac dans le registre AH tandis que le moins lev est mis dans le registre AL. Algorithme AH AL immdiat 8 AL AL MOD immdiat 8

Mnmonique Instruction AAM Opcode D4h 0Ah Description Cre une paire des valeurs dpaqueter BCD dans les registres AL et AH (invalide en mode 64-bits) Cre une paire des valeurs dpaqueter immdiatement dans l'octets de base (invalide en mode 64-bits)

aucun

D4h ib

31

Cycles d'horloge UM IBM 801 802 803 i4 Penti Cx486S Cx486 C 486BL 86 86 86 86 um LC DX U5 3X S 19 16 17 15 18 16 16 17 12

Instruc Opco 80 tion de 86 D4h 0Ah

80 88

AAM

83

83

Exceptions Message #DE(Division par zro) Mode rel Virtuel 8086 Mode protg Description Valeur immdiate 8 bits contient 0 Cette instruction est excute en mode 64-bits

#UD(Opcode invalide)

Voir galement Instruction assembleur 80x86 - Instruction AAA Instruction assembleur 80x86 - Instruction AAD Instruction assembleur 80x86 - Instruction AAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 802 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 55.

32

Assembleur 80x86 INTEL 8088+ Syntaxe AAS

AAS Ascii Adjust al after Subtraction

Description A l'aide de cette instruction, on peut adapter le rsultat de la soustraction de 2 nombre de format DCB. tant donn que le processeur soustrait ces valeurs comme s'il s'agissait de chiffres normales, des dbordements se produisent dans les rsultats. La commande AAS rectifie cela. Cette instruction ne peut fonctionner qu'avec des nombres sur 8 bits. Elle transforme la valeur place aprs la soustraction dans le registre AL en une valeur DCB acceptable.

Algorithme * Vaut 1 si c'est vrai AL infrieur AL < 6 SI ( AL 0Ah ) U ( AF = 1 ) ALORS AL ( AL - 6 ) 0Fh AH AH - 1 AL infrieur Drapeau CF 1 Drapeau AF 1 SINON AL AL 0Fh Drapeau CF 0 Drapeau AF 0 FIN SI

Mnmonique Instruction AAS Opcode 3Fh Description Cre un nombre dpacter BCD partir du contenu du registre AL (invalide en mode 64-bits)

33

Exceptions Message Mode rel Virtuel 8086 Mode protg Description Cette instruction est excut en mode 64-bits

#UD(Opcode invalide)

Voir galement Instruction assembleur 80x86 - Instruction AAA Instruction assembleur 80x86 - Instruction AAD Instruction assembleur 80x86 - Instruction AAM

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 802 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 56.

34

Assembleur 80x86 INTEL 8088+

ADC arithmetic Add with Carry

Syntaxe ADC Oprande Cible,Oprande Source

Paramtres Nom Oprande Cible Oprande Source Description Ce paramtre permet d'indiquer l'oprande reevant le rsultat Ce paramtre permet d'indiquer l'oprande ajouter au rsultat

Description Cette instruction, des plus indispensable, additionne 2 quantits numriques sur 8 ou 16 bits et ajoute ensuite la valeur de l'indicateur de retenue, lequel est contenu dans le drapeau CF (CARRY FLAG), la somme obtenu. Le rsultat pourra naturellement tre plac en mmoire ou dans un registre. Cette opration tient donc compte de la retenue ventuelle ainsi que de l'addition des 16 bits de poids faible pour continuer l'addition des 16 bits de poids fort.

Algorithme Oprande Cible Oprande Cible + Quantit Source + drapeau CF

Mnmonique Instruction ADC AL, imm8 ADC AX, imm16 Opcode 14h ib 15h iw Description Ajout immdiate de 8 bits AL + CF Ajout immdiate de 16 bits AX + CF

35

ADC EAX, imm32 ADC RAX, imm32 ADC reg/mem8, imm8 ADC reg/mem16, imm16 ADC reg/mem32, imm32 ADC reg/mem64, imm32 ADC reg/mem16, imm8 ADC reg/mem32, imm8 ADC reg/mem64, imm8 ADC reg/mem8, reg8 ADC reg/mem16, reg16 ADC reg/mem32, reg32 ADC reg/mem64, reg64 ADC reg8, reg/mem8 ADC reg16, reg/mem16 ADC reg32, reg/mem32 ADC reg64, reg/mem64

15h id 15h id 80h /2 ib 81h /2 iw 81h /2 id 81h /2 id 83h /2 ib 83h /2 ib 83h /2 ib 10h /r 11h /r 11h /r 11h /r 12h /r 13h /r 13h /r 13h /r

Ajout immdiate de 32 bits EAX + CF Ajout immdiate de 32 bits RAX + CF Ajout immdiate de 8 bits registre/mmoire + CF Ajout immdiate de 16 bits registre/mmoire 16 bits + CF Ajout immdiate de 32 bits registre/mmoire 32 bits + CF Ajout immdiate de 32 bits entier registre/mmoire 64 bits + CF Ajout immdiate de 8 bits entier registre/mmoire 16 bits + CF Ajout immdiate de 8 bits entier registre/mmoire 16 bits + CF Ajout immdiate de 8 bits entier registre/mmoire 64 bits + CF Ajout registre de 8 bits registre/mmoire 8 bits + CF Ajout registre de 16 bits registre/mmoire 16 bits + CF Ajout registre de 32 bits registre/mmoire 32 bits + CF Ajout registre de 64 bits registre/mmoire 64 bits + CF Ajout registre de 8 bits registre/mmoire 8 bits + CF Ajout registre de 16 bits registre/mmoire 16 bits + CF Ajout registre de 32 bits registre/mmoire 32 bits + CF Ajout registre de 64 bits registre/mmoire 64 bits + CF

36

Exceptions Message #SS(Pile noncanonique) #GP(Protection gnral) Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Exemple Cette exemple permet d'effectuer l'addition de la retenue d'une addition du registre AL sur le registre AH: MOV AX,0001h ADD AL,FFh ADC AH,00h Ce programme retournera donc la valeur 0100h dans le registre AX.

37

Voir galement Instruction assembleur 80x86 - Instruction ADD Instruction assembleur 80x86 - Instruction SBB Instruction assembleur 80x86 - Instruction SUB

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 802 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 126, 401 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 57 58.

38

Assembleur 80x86 INTEL 8088+

ADD arithmetic ADDition

Syntaxe ADD Oprande Cible, Oprande Source

Paramtres Nom Oprande Cible Oprande Source Description Ce paramtre permet d'indiquer l'oprande reevant le rsultat Ce paramtre permet d'indiquer l'oprande ajouter au rsultat

Description Cette instruction additionne 2 quantits numriques sur 8 ou 16 bits. La somme pourra tre place soit en mmoire ou encore dans un registre.

Algorithme Oprande Cible Oprande Cible + Quantit Source drapeau CF retenue

Mnmonique Instruction
ADD AL, imm8 ADD AX, imm16 ADD EAX, imm32 ADD RAX, imm32 ADD reg/mem8, imm8

Opcode
04h ib 05h iw 05h id 05h id 80h /0 ib

Description
Ajout immdiate de 8 bits AL Ajout immdiate de 16 bits AX Ajout immdiate de 32 bits EAX Ajout d'un entier immdiate de 32 bits RAX Ajout immdiate de 8 bits registre/mmoire 8 bits

39

ADD reg/mem16, imm16 ADD reg/mem32, imm32 ADD reg/mem64, imm32 ADD reg/mem16, imm8 ADD reg/mem32, imm8 ADD reg/mem64, imm8 ADD reg/mem8, reg8 ADD reg/mem16, reg16 ADD reg/mem32, reg32 ADD reg/mem64, reg64 ADD reg8, reg/mem8 ADD reg16, reg/mem16 ADD reg32, reg/mem32 ADD reg64, reg/mem64

81h /0 iw 81h /0 id 81h /0 id 83h /0 ib 83h /0 ib 83h /0 ib 00h /r 01h /r 01h /r 01h /r 02h /r 03h /r 03h /r 03h /r

Ajout immdiate de 16 bits registre/mmoire 16 bits Ajout immdiate de 32 bits registre/mmoire 32 bits Ajout entier immdiate de 32 bits registre/mmoire 64 bits Ajout entier immdiate de 8 bits registre/mmoire 16 bits Ajout entier immdiate de 8 bits registre/mmoire 32 bits Ajout entier immdiate de 8 bits registre/mmoire 64 bits Ajout registre de 8 bits registre/mmoire 8 bits Ajout registre de 16 bits registre/mmoire 16 bits Ajout registre de 32 bits registre/mmoire 32 bits Ajout registre de 64 bits registre/mmoire 64 bits Ajout registre de 8 bits registre/mmoire 8 bits Ajout registre de 16 bits registre/mmoire 16 bits Ajout registre de 32 bits registre/mmoire 32 bits Ajout registre de 64 bits registre/mmoire 64 bits

Exceptions Message Mode rel Virtuel 8086 Mode protg Description


Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la

#SS(Pile noncanonique)

#GP(Protection gnral) X

40

limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction ADC Instruction assembleur 80x86 - Instruction SBB Instruction assembleur 80x86 - Instruction SUB

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 803 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 401 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 59 60.

41

Assembleur 80x86
INTEL Pentium 4+
Syntaxe ADDPD dest,source

ADDPD
Add Packed Double-Precision FloatingPoint Values

Description Cette instruction permet d'effectuer une addition de 2 paquets de valeurs rels de double prcision d'une oprande source et d'une oprande destination et entrepose le rsultat dans l'oprande de destination sous le format d'un paquet de valeurs rels de double prcision.

Algorithme dest(0..63) dest(0..63) + source(0..63) dest(64..12) dest(64..12) + source(64..127)

Mnmonique Instruction Opcode Description


Cette instruction permet d'effectuer une addition de 2 paquets de valeurs rels de double prcision d'une oprande source et d'une oprande destination et entrepose le rsultat dans l'oprande de destination sous le format d'un paquet de valeurs rels de double prcision.

ADDPD xmm1, xmm2/m128

66h 0Fh 58h /r

42

Assembleur 80x86
INTEL Pentium III (SSE)+
Syntaxe ADDPS xmm1, xmm2/m128

ADDPS
Packed Single-Precision Floating-Point Add

Description Cette instruction permet d'effectuer une addition SIMD de 4 paquets de valeurs rels de simple prcision d'une oprande source et d'une oprande destination et entrepose le rsultat dans l'oprande de destination sous le format d'un paquet de valeurs rels de simple prcision.

Algorithme xmm1(31..0) xmm1(31..0) + xmm2/m128(31..0) xmm1(63..32) xmm1(63..32) + xmm2/m128(63..32) xmm1(95..64) xmm1(95..64) + xmm2/m128(95..64) xmm1(127..96) xmm1(127..96) + xmm2/m128(127..96)

43

Assembleur 80x86
INTEL Pentium 4+
Syntaxe ADDSD dest,source

ADDSD
Add Scalar Double-Precision FloatingPoint Values

Description Cette instruction permet d'effectuer une addition de la partie basse d'une valeur rel de double prcision dun oprande source et destination et entrepose le rsultat dans un oprande de destination de valeur rel de double prcision.

Algorithme dest(0..63) dest(0..63) + source(0..63)

Mnmonique Instruction Opcode Description


Cette instruction permet d'effectuer une addition de la partie basse d'une valeur rel de double prcision d'une oprande source et destination et entrepose le rsultat dans une oprande de destination de valeur rel de double prcision.

ADDSD xmm1, xmm2/m128

F2h 0Fh 58h /r

44

Assembleur 80x86
INTEL Pentium III (SSE)+
Syntaxe ADDSS xmm1, xmm2/m32

ADDSS
Scalar Single-Precision Floating-Point Add

Description Cette instruction permet d'effectuer une addition de la partie basse d'une valeur rel de simple prcision dun oprande source et destination et entrepose le rsultat dans un oprande de destination de valeur rel de simple prcision.

Algorithme xmm1(31..0) xmm1(31..0) + xmm2/m32(31..0)

45

Assembleur 80x86
INTEL Pentium 4 (SSE3)+
Syntaxe ADDSUBPD dest,source

ADDSUBPD
Packed Double-FP Add/Subtract

Description Cette instruction permet d'effectuer une soustraction de la partie basse d'une valeur rel de double prcision d'une oprande source et destination et entrepose le rsultat dans une oprande de destination de valeur rel de double prcision et d'effectuer une addition de la partie haute d'une valeur rel de double prcision d'une oprande source et destination et entrepose le rsultat dans un oprande de destination de valeur rel de double prcision.

Algorithme dest(0..63) dest(0..63) - source(0..63) dest(64..127) dest(64..127) + source(64..127)

Mnmonique Instruction Opcode Description


Cette instruction permet d'effectuer une soustraction de la partie basse d'une valeur rel de double prcision d'une oprande source et destination et entrepose le rsultat dans une oprande de destination de valeur rel de double prcision et d'effectuer une addition de la partie haute d'une valeur rel de double prcision d'une oprande source et destination et entrepose le rsultat dans une oprande de destination de valeur rel de double prcision.

ADDSUBPD xmm1, xmm2/m128

66h 0Fh D0h /r

46

Assembleur 80x86
INTEL Pentium 4 (SSE3)+
Syntaxe ADDSUBPS dest,source

ADDSUBPS
Packed Single-FP Add/Subtract

Description Cette instruction permet d'effectuer une soustraction de la partie basse d'un paquet de valeur rel de simple prcision d'une oprande source et destination et entrepose le rsultat dans une oprande de destination de valeur rel de simple prcision et d'effectuer une addition de la partie haute d'un paquet de valeur rel de simple prcision d'une oprande source et destination et entrepose le rsultat dans un oprande de destination de valeur rel de simple prcision.

Algorithme dest(0..31) dest(0..31) - source(0..31) dest(32..63) dest(32..63) + source(32..63) dest(64..95) dest(64..95) - source(64..95) dest(96..127) dest(96..127) + source(96..127)

Mnmonique Instruction Opcode Description


Cette instruction permet d'effectuer une soustraction de la partie basse d'un paquet de valeur rel de simple prcision d'une oprande source et destination et entrepose le rsultat dans une oprande de destination de valeur rel de simple prcision et d'effectuer une addition de la partie haute d'un paquet de valeur rel de simple prcision d'une oprande source et destination et entrepose le rsultat dans une oprande de destination de valeur rel de simple prcision.

ADDSUBPS xmm1, xmm2/m128

F2h 0Fh D0h /r

47

Assembleur 80x86 INTEL 8088+

AND AND binary

Syntaxe AND Oprande Cible, Oprande Source

Paramtres Nom
Oprande Cible

Description
Ce paramtre permet d'indiquer l'oprande reevant le rsultat

Oprande Source Ce paramtre permet d'indiquer l'oprande effectuant le masque binaire sur le rsultat

Description L'instruction AND effectue un ET BINAIRE sur les 2 oprandes spcifis, le calcul est plac dans la premire oprande, c'est--dire l'Oprande Cible. Rappelons qu'un ET BINAIRE donne le rsultat 1 si les 2 oprandes sont 1 et donne 0 dans les autres cas et cela sur chacun des bits de l'oprande. Algorithme Oprande Cible Oprande Cible Oprande Source drapeau CF 0 drapeau OF 0

Mnmonique Instruction
AND AL, imm8 AND AX, imm16

Opcode
24h ib 25h iw

Description
Et binaire sur le contenu du registre AL avec une valeur immdiate 8 bits et met le rsultat dans AL Et binaire sur le contenu du registre AX avec une valeur immdiate 16 bits et met le rsultat dans AX Et binaire sur le contenu du registre EAX avec une valeur immdiate 32 bits et met le rsultat dans EAX

AND EAX, imm32

25h iw

48

AND RAX, imm32

25h id

Et binaire sur le contenu du registre RAX avec une valeur entire immdiate 32 bits et met le rsultat dans RAX Et binaire sur le contenu du registre/mmoire 8 bits avec une valeur immdiate 8 bits Et binaire sur le contenu du registre/mmoire 16 bits avec une valeur immdiate 16 bits Et binaire sur le contenu du registre/mmoire 32 bits avec une valeur immdiate 32 bits Et binaire sur le contenu du registre/mmoire 64 bits avec une valeur entire immdiate 32 bits Et binaire sur le contenu du registre/mmoire 16 bits avec une valeur entire immdiate 8 bits Et binaire sur le contenu du registre/mmoire 32 bits avec une valeur entire immdiate 8 bits Et binaire sur le contenu du registre/mmoire 64 bits avec une valeur entire immdiate 8 bits Et binaire sur le contenu du registre/mmoire 8 bits avec un registre 8 bits Et binaire sur le contenu du registre/mmoire 16 bits avec un registre 16 bits Et binaire sur le contenu du registre/mmoire 32 bits avec un registre 32 bits Et binaire sur le contenu du registre/mmoire 64 bits avec un registre 64 bits Et binaire sur le contenu du registre 8 bits avec un registre/mmoire 8 bits Et binaire sur le contenu du registre 16 bits avec un registre/mmoire 16 bits Et binaire sur le contenu du registre 32 bits avec un registre/mmoire 32 bits Et binaire sur le contenu du registre 64 bits avec un registre/mmoire 64 bits

AND reg/mem8, imm8 AND reg/mem16, imm16 AND reg/mem32, imm32 AND reg/mem64, imm32 AND reg/mem16, imm8 AND reg/mem32, imm8 AND reg/mem64, imm8 AND reg/mem8, reg8 AND reg/mem16, reg16 AND reg/mem32, reg32 AND reg/mem64, reg64 AND reg8, reg/mem8 AND reg16, reg/mem16 AND reg32, reg/mem32 AND reg64, reg/mem64

80h /4 ib 81h /4 iw 81h /4 id 81h /4 id 83h /4 ib 83h /4 ib 83h /4 ib 20h /r 21h /r 21h /r 21h /r 22h /r 23h /r 23h /r 23h /r

Exceptions Message Mode rel Virtuel 8086 Mode protg Description


Une adresse mmoire dpasse la limite du segment de pile ou n'est pas

#SS(Pile non-canonique)

49

canonique #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction OR Instruction assembleur 80x86 - Instruction NOT Instruction assembleur 80x86 - Instruction NEG Instruction assembleur 80x86 - Instruction TEST Instruction assembleur 80x86 - Instruction XOR

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 803 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 401 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 61 62.

50

Assembleur 80x86
INTEL Pentium 4+
Syntaxe ANDNPD dest,source

ANDNPD
Bitwise Logical AND NOT of Packed Double-Precision Floating-Point Values

Description Cette instruction permet d'effectuer un ET BINAIRE sur les 2 paquets d'oprandes de valeur de format rel de double prcision et inverse chacun des bits du rsultat.

Algorithme dest dest source

Mnmonique Instruction
ANDNPD xmm1, xmm2/m128

Opcode
66h 0Fh 55h /r

Description
Cette instruction permet d'effectuer un ET BINAIRE sur les 2 paquets d'oprandes de valeur de format rel de double prcision et inverse chacun des bits du rsultat.

51

Assembleur 80x86
INTEL Pentium III+ (KNI/MMX2)
Syntaxe ANDNPS dest,source

ANDNPS
Bitwise Logical AND NOT

Description Cette instruction permet d'effectuer un ET BINAIRE sur les 2 oprandes 128 bits spcifis et inverse chacun des bits du rsultat.

Algorithme dest dest source

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer un ET BINAIRE sur les 2 oprandes 128 bits spcifis et inverse chacun des bits du rsultat.

ANDNPS xmmreg,r/m128

0Fh 55h /r

52

Assembleur 80x86
INTEL Pentium 4+
Syntaxe ANDPD dest,source

ANDPD
Bitwise Logical AND of Packed DoublePrecision Floating-Point Values

Description Cette instruction permet d'effectuer un ET BINAIRE sur les 2 paquets d'oprandes de valeur de format rel de double prcision.

Algorithme dest dest source

Mnmonique Instruction
ANDPD xmm1, xmm2/m128

Opcode
66h 0Fh 54h /r

Description
Cette instruction permet d'effectuer un ET BINAIRE sur les 2 paquets d'oprandes de valeur de format rel de double prcision.

53

Assembleur 80x86
INTEL Pentium III+ (KNI/MMX2)
Syntaxe ANDPS dest,source

ANDPS
Bitwise Logical AND

Description Cette instruction permet d'effectuer un ET BINAIRE sur les 2 oprandes 128 bits spcifis.

Algorithme dest dest source

Mnmonique Instruction
ANDPS xmmreg,r/m128

Opcode
0Fh 54h /r

Description
Cette instruction permet d'effectuer un ET BINAIRE sur les 2 oprandes 128 bits spcifis.

54

Assembleur 80x86 INTEL 80286+ (Mode protg) Syntaxe ARPL Oprande Cible, Oprande Source

ARPL Adjust RPL field of selector

Description Avec cette instruction, on pourra contrler et corriger le niveau de privilge du segment de code en mode protge.

Algorithme SI RPL bits(0,1) DE Oprande Cible < RPL bits(0,1) DE Oprande Source ALORS drapeau ZF 1 RPL bits(0,1) DE Oprande Cible RPL bits(0,1) DE Oprande Source SINON drapeau ZF 0 FIN SI

Mnmonique Instruction
ARPL reg/mem16, reg16

Opcode
63h /r

Description
Ajuste le RPL du slecteur de segment de destination au niveau infrieur du RPL du slecteur de segment spcifi dans le registre source 16 bits. Invalide en mode 64 bits.

Exceptions Message
#UD(Opcode invalide)

Mode rel

Virtuel 8086

Mode protg

Description
Cette instruction est seulement reconnu en mode protg legacy et en mode de compatibilit.

55

#SS(Pile) #GP(Protection gnral)

X X

Une adresse mmoire dpasse la limite du segment de pile. Une adresse mmoire dpasse la limite du segment de donnes L'oprande de destination n'est pas dans un segment non crivable Un slecteur de segment nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction LAR Instruction assembleur 80x86 - Instruction LSL Instruction assembleur 80x86 - Instruction VERR Instruction assembleur 80x86 - Instruction VERW

56

Assembleur 80x86 INTEL 80186+

BOUND check array index against BOUNDs

Syntaxe BOUND registre, mmoire

Description Cette instruction, ayant fait sont apparition sur un processeur mconnue du public, offre la possibilit professionnel de vrifier la validit pouvant exister entre avec un tableau et son indexation.

Algorithme SI ( Source De Gauche < [Source De Droite] ) U ( Source De Gauche > [ Source De Droite + Taille Oprande 8 ] ) ALORS Interruption 5 FIN SI

Mnmonique Instruction
BOUND reg16, mem16&mem16 BOUND reg32, mem32&mem32

Opcode
62h /r 62h /r

Description
Test avec un index de tableau 16 bits spcifi deux valeurs 16 bits (Invalide en mode 64 bits) Test avec un index de tableau 32 bits spcifi deux valeurs 32 bits (Invalide en mode 64 bits)

Exceptions Message
#BR(Dbordement de rang) #UD(Opcode invalide)

Mode rel
X X

Virtuel 8086
X X

Mode protg
X X

Description
La limite du rang est dpass. La source de

57

l'oprande est un registre Cette instruction est excut en mode 64-bits Une adresse mmoire dpasse la limite du segment de pile Une adresse mmoire dpasse la limite du segment de donnes Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#SS(Pile non-canonique)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction INT Instruction assembleur 80x86 - Instruction INTO

58

Assembleur 80x86 INTEL 80386+ Syntaxe BSF Oprande Cible, Oprande Source

BSF Bit Scan Forward

Description La combinaison binaire contenue dans l'Oprande Source est analyse de la droite vers la gauche jusqu' ce que l'on rencontre un bit gal 1. Le bit correspondant dans Oprande Cible sera alors galement mis 1 et tous les autres quivaudront 0. Les oprandes peuvent toutefois tre 2 registres ou un registre et un emplacement mmoire. Encore un dernier dtail, ils doivent naturellement avoir tous les 2 le mme type; soit 16 ou 32 bits.

Algorithme SI Oprande Source = 0 ALORS drapeau ZF 1 Oprande Cible Non dfinie SINON drapeau ZF 0 Index 0 FAIRE TANT QUE bit ( Source , Index ) = 0 Index Index + 1 Oprande Cible Index FIN FAIRE FIN SI

Mnmonique Instruction Opcode Description


Balayage de bit vers l'avant du contenu du registre/mmoire 16 bits Balayage de bit vers l'avant du contenu du registre/mmoire 32 bits Balayage de bit vers l'avant du contenu du registre/mmoire 64 bits

BSF reg16, reg/mem16 0Fh BCh /r BSF reg32, reg/mem32 0Fh BCh /r BSF reg64, reg/mem64 0Fh BCh /r

59

Exceptions Message
#SS(Pile noncanonique) #GP(Protection gnral)

Mode rel
X X

Virtuel 8086
X X

Mode protg Description


X X Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

X #PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction BSR

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 803 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 65.

60

Assembleur 80x86 INTEL 80386+

BSR Bit Scan Reverse

Syntaxe BSR Oprande Cible, Oprande Source

Description La combinaison binaire contenue dans l'Oprande Source est analyse de la gauche vers la droite jusqu' ce que l'on rencontre un bit gal 1. Le bit correspondant dans Oprande Cible sera ensuite mis 1 et tous les autres quivaudront 0. Les oprandes peuvent toutefois tre 2 registres ou un registre et un emplacement mmoire. Les 2 oprandes doivent naturellement avoir le mme type; soit 16 ou 32 bits.

Algorithme SI ( Registre Destination DANS [ AX , BX, CX , DX , SI , DI , BP , SP ] ) ALORS Dbut 15 SINON Dbut 31 FIN SI SI Source = 0 ALORS drapeau ZF 1 Destination Non dfinie SINON drapeau ZF 0 Index Dbut FAIRE TANT QUE bit ( Source , Index ) = 0 Index Index - 1 Destination Index FIN FAIRE FIN SI

61

Mnmonique Instruction Opcode Description


Balayage de bit vers l'arrire du contenu du registre/mmoire 16 bits Balayage de bit vers l'arrire du contenu du registre/mmoire 32 bits Balayage de bit vers l'arrire du contenu du registre/mmoire 64 bits

BSR reg16, reg/mem16 0Fh BDh /r BSR reg32, reg/mem32 0Fh BDh /r BSR reg64, reg/mem64 0Fh BDh /r

Exceptions Message
#SS(Pile noncanonique)

Mode rel
X

Virtuel 8086
X X

Mode protg
X X

Description
Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulles est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#GP(Protection X gnral)

X #PF(Faute de page) #AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction BSF

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 804 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 66.

62

Assembleur 80x86 INTEL 80486+

BSWAP Byte Swap

Syntaxe BSWAP Oprande

Description L'instruction tardive BSWAP inverse l'ordre des 4 octets d'un registre de taille de 32 bits. L'octet de poids le plus fort devient celui de poids le plus faible et on affecte les 2 autres octets de la mme manire en les inversant eux aussi.

Algorithme Temporaire Oprande Oprande ( 0 7 ) Temporaire ( 24 31 ) Oprande ( 8 15 ) Temporaire ( 16 23 ) Oprande ( 16 23 ) Temporaire ( 8 15 ) Oprande ( 24 31 ) Temporaire ( 0 7 )

Mnmonique Instruction
BSWAP reg32 BSWAP reg64

Opcode
0Fh C8h +rd 0Fh C8h +rq

Description
Inverse l'ordre des octets du registre 32 bits Inverse l'ordre des octets du registre 64 bits

Cycles d'horloge 8086 8088 80186 80286 80386 i486 UMC U5S IBM 486BL3 X Cx486D X Cx486S LC Pentium

Instruction

Opcode

BSWAP reg32

0Fh C8h +rd

63

Exceptions Aucune

Voir galement Instruction assembleur 80x86 - Instruction XCHG

64

Assembleur 80x86 INTEL 80386+

BT Bit Test

Syntaxe BT Oprande Source 1, Oprande Source 2

Description Cette instruction permet de transfrer de l'Oprande Source 1 vers l'indicateur de retenue, le bit spcifi par l'Oprande Source 2. Les oprandes utiliss peuvent tre soit 16 ou 32 bits.

Algorithme drapeau CF BIT [ Oprande Source 1, Oprande Source 2 ]

Remarque Processeur INTEL: Quand vous faites des accs en bits dans la mmoire, le microprocesseur fabriquer par le constructeur INTEL effectue des accs en mmoire d'adressage sous la forme suivante: Adresse Segment + ( 4 x ( Bit d'offset 32 ) ) Tandis que dans le cas d'une oprande de taille de 32 bits, ou lorsque vous fates des accs mmoire de 2 octets (16 bits), il utilise plutt la forme suivante: Adresse Segment + ( 2 x ( Bit d'offset 16 ) ) galement, lorsqu'il y a 1 octets, il faut appliquer l'opration en tenant compte du 8 bits: Adresse Segment + ( 1 x ( Bit d'offset 8 ) )

65

Il y a donc au proportionnalit de la division en fonction de la dimension de l'accs en mmoire.

Mnmonique Instruction
BT reg/mem16, reg16 BT reg/mem32, reg32 BT reg/mem64, reg64 BT reg/mem16, imm8 BT reg/mem32, imm8 BT reg/mem64, imm8

Opcode
0Fh A3h /r 0Fh A3h /r 0Fh A3h /r 0Fh BAh /4 ib 0Fh BAh /4 ib 0Fh BAh /4 ib

Description
Copie la valeur de slection de bit dans le drapeau de retenu Copie la valeur de slection de bit dans le drapeau de retenu Copie la valeur de slection de bit dans le drapeau de retenu Copie la valeur de slection de bit dans le drapeau de retenu Copie la valeur de slection de bit dans le drapeau de retenu Copie la valeur de slection de bit dans le drapeau de retenu

Cycles d'horloge 8086 8088 80186 80286 80386 i486 UMC U5S IBM 486BL3 X Cx486D X Cx486S LC Pentium

Instruction

Opcode

BT reg16, imm8 BT mem16, imm8 BT reg16, reg16 BT mem16, reg16

0Fh BAh /4 ib 0Fh BAh /4 ib 0Fh A3h /r 0Fh A3h /r

3 12 3 12

3 6 3 12

? ? ? ?

? ? ? ?

? ? ? ?

? ? ? ?

? ? ? ?

Exceptions Message
#SS(Pile noncanonique) #GP(Protection gnral)

Mode rel
X

Virtuel 8086
X

Mode protg
X

Description
Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire

66

#PF(Faute de page)

Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction BTC Instruction assembleur 80x86 - Instruction BTR Instruction assembleur 80x86 - Instruction BTS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 804 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 68 69.

67

Assembleur 80x86 INTEL 80386+ Syntaxe

BTC Bit Test and Complement

BTC Oprande Source 1, Oprande Source 2

Description Cette instruction offre la possibilit de transfrer tout d'abord de l'Oprande Source 1 vers l'indicateur de retenue les bits spcifis par l'Oprande Source 2 puis d'ensuite inverser la valeur du bit correspondant dans l'Oprande Source 1. Les oprandes utiliss peuvent tre soit sur 16 ou 32 bits. Il est possible d'associer 2 registres, un registre un emplacement mmoire, un registre ou un emplacement mmoire un registre ou une valeur immdiate. Algorithme drapeau CF BIT [ Oprande Source 1, Oprande Source 2 ] BIT [ Oprande Source 1, Oprande Source 2 ] Pas BIT [ Oprande Source 1, Oprande Source 2 ]

Remarque Processeur INTEL: Quand vous faites des accs en bits dans la mmoire, le microprocesseur fabriquer par le constructeur INTEL effectue des accs en mmoire d'adressage sous la forme suivante: Adresse Segment + ( 4 x ( Bit d'offset 32 ) ) Tandis que dans le cas dun oprande de taille de 32 bits, ou lorsque vous fates des accs mmoire de 2 octets (16 bits), il utilise plutt la forme suivante: Adresse Segment + ( 2 x ( Bit d'offset 16 ) ) galement, lorsqu'il y a 1 octets, il faut appliquer l'opration en tenant compte du 8 bits: Adresse Segment + ( 1 x ( Bit d'offset 8 ) )
68

Il y a donc au proportionnalit de la division en fonction de la dimension de l'accs en mmoire.

Mnmonique Instruction
BTC reg/mem16, reg16 BTC reg/mem32, reg32 BTC reg/mem64, reg64 BTC reg/mem16, imm8 BTC reg/mem16, imm8 BTC reg/mem32, imm8 BTC reg/mem64, imm8

Opcode
0Fh BBh /r 0Fh BBh /r 0Fh BBh /r 0Fh BBh /r 0Fh BAh /7 ib 0Fh BAh /7 ib 0Fh BAh /7 ib

Description
Copie la valeur du bit de slection dans le drapeau de retenu et complmente le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et complmente le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et complmente le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et complmente le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et complmente le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et complmente le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et complmente le bit de slection.

Exceptions Message #SS(Pile noncanonique) #GP(Protection gnral) Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire

69

#PF(Faute de page)

Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction BT Instruction assembleur 80x86 - Instruction BTR Instruction assembleur 80x86 - Instruction BTS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 805 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 70 71.

70

Assembleur 80x86 INTEL 80386+ Syntaxe BTR Oprande Source 1, Oprande Source 2

BTR Bit Test and Reset

Description Cette instruction permet de transfrer tout d'abord de l'Oprande Source 1 vers l'indicateur de retenue les bits spcifis par l'Oprande Source 2 puis met le bit correspondant de l'Oprande Source 1 0. Les oprandes utiliss peuvent tre soit sur 16 ou 32 bits. Algorithme drapeau CF BIT [ Oprande Source 1, Oprande Source 2 ] BIT [ Oprande Source 1, Oprande Source 2 ] 0

Remarque Processeur INTEL: Quand vous faites des accs en bits dans la mmoire, le microprocesseur fabriquer par le constructeur INTEL effectue des accs en mmoire d'adressage sous la forme suivante: Adresse Segment + ( 4 x ( Bit d'offset 32 ) )

Tandis que dans le cas d'une oprande de taille de 32 bits, ou lorsque vous fates des accs mmoire de 2 octets (16 bits), il utilise plutt la forme suivante: Adresse Segment + ( 2 x ( Bit d'offset 16 ) )

galement, lorsqu'il y a 1 octets, il faut appliquer l'opration en tenant compte du 8 bits: Adresse Segment + ( 1 x ( Bit d'offset 8))

Il y a donc au proportionnalit de la division en fonction de la dimension de l'accs en mmoire.

71

Mnmonique Instruction
BTR reg/mem16, reg16 BTR reg/mem32, reg32 BTR reg/mem32, reg32 BTR reg/mem64, reg64 BTR reg/mem64, reg64 BTR reg/mem16, imm8 BTR reg/mem16, imm8 BTR reg/mem32, imm8 BTR reg/mem64, imm8

Opcode
0Fh B3h /r 0Fh B3h /r 0Fh B3h /r 0Fh B3h /r 0Fh B3h /r 0Fh B3h /r 0Fh BAh /6 ib 0Fh BAh /6 ib 0Fh BAh /6 ib

Description
Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et efface le bit de slection.

Exceptions Message
#SS(Pile noncanonique) #GP(Protection gnral)

Mode rel
X

Virtuel 8086
X

Mode protg
X

Description
Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction

X #PF(Faute de page)

72

#AC(Vrifie l'alignement)

Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir galement Instruction assembleur 80x86 - Instruction BT Instruction assembleur 80x86 - Instruction BTC Instruction assembleur 80x86 - Instruction BTS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 805 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 72.

73

Assembleur 80x86 INTEL 80386+ Syntaxe BTS Oprande Source 1, Oprande Source 2

BTS Bit Test and Set

Description Cette instruction permet de transfrer tout d'abord de Oprande Source1 vers l'indicateur de retenue le bits spcifi par Oprande Source 2 puis ensuite met le bits correspondant dans Oprande Source 1 1. Les oprandes utiliss peuvent tre sur soit 16 ou 32 bits. Algorithme drapeau CF BIT ( Oprande Source 1, Oprande Source 2 ) BIT ( Oprande Source 1, Oprande Source 2 ) 1

Remarque Processeur INTEL: Quand vous faites des accs en bits dans la mmoire, le microprocesseur fabriquer par le constructeur INTEL effectue des accs en mmoire d'adressage sous la forme suivante: Adresse Segment + ( 4 x ( Bit d'offset 32 ) )

Tandis que dans le cas dun oprande de taille de 32 bits, ou lorsque vous fates des accs mmoire de 2 octets (16 bits), il utilise plutt la forme suivante: Adresse Segment + ( 2 x ( Bit d'offset 16 ) )

galement, lorsqu'il y a 1 octet, il faut appliquer l'opration en tenant compte du 8 bits: Adresse Segment + ( 1 x ( Bit d'offset 8))

Il y a donc au proportionnalit de la division en fonction de la dimension de l'accs en mmoire.


74

Mnmonique Instruction
BTS reg/mem16, reg16 BTS reg/mem32, reg32 BTS reg/mem64, reg64 BTS reg/mem16, imm8 BTS reg/mem32, imm8 BTS reg/mem64, imm8

Opcode
0Fh ABh /r 0Fh ABh /r 0Fh ABh /r 0Fh BAh /5 ib 0Fh BAh /5 ib 0Fh BAh /5 ib

Description
Copie la valeur du bit de slection dans le drapeau de retenu et fixe le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et fixe le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et fixe le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et fixe le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et fixe le bit de slection. Copie la valeur du bit de slection dans le drapeau de retenu et fixe le bit de slection.

Exceptions Message
#SS(Pile noncanonique) #GP(Protection gnral)

Mode rel
X

Virtuel 8086
X

Mode protg
X

Description
Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulles est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

X #PF(Faute de page)

#AC(Vrifie l'alignement)

75

Voir galement Instruction assembleur 80x86 - Instruction BT Instruction assembleur 80x86 - Instruction BTC Instruction assembleur 80x86 - Instruction BTR

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 805 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 72 73.

76

Assembleur 80x86 INTEL 8088+

CALL CALL

Syntaxe CALL adresse

Description Cette instruction force le microprocesseur excuter les instructions du sous-programme indiqu par l'adresse d'appel avant de continuer. Ds que la routine est termine, l'excution reprendra son cours l'instruction suivant le CALL.

Algorithme Appel long PUSH CS PUSH IP CS:IP Destination Appel court PUSH IP IP Destination

Mnmonique Instruction
CALL rel16off CALL rel32off CALL reg/mem16 CALL reg/mem32 CALL reg/mem64 CALL FAR pntr16:16 CALL FAR pntr16:32

Opcode
E8h iw E8h id FFh /2 FFh /2 FFh /2 9Ah cd 9Ah cp

Description
Appel court avec une destination spcifi par une adresse 16 bits Appel court avec une destination spcifi par une adresse 32 bits Appel court avec une destination spcifi par un registre/mmoire 16 bits Appel court avec une destination spcifi par un registre/mmoire 32 bits. Il n'y a pas de prfixe pour l'encoder en mode 64 bits. Appel court avec une destination spcifi par un registre/mmoire 64 bits Appel long direct, avec un destination spcifi par un pointeur long. Invalide en mode 64 bits. Appel long direct, avec un destination spcifi par un pointeur long.

77

Invalide en mode 64 bits. CALL FAR mem16:16 FFh /3 CALL FAR mem16:32 FFh /3 Appel long indirect, avec un destination spcifi par un pointeur long en mmoire. Appel long indirect, avec un destination spcifi par un pointeur long en mmoire.

Exceptions Message
#AC(Vrifie l'alignement) #GP(Protection gnral) X

Mode rel

Virtuel 8086 Mode protg Description


X X X X Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination dpasse la limite du segment de code ou n'est pas canonique. Un segment de donnes nulle est utilis comme rfrence mmoire Le slecteur de segment de code de destination est un slecteur nulle. Un code, d'un appel de pont, de tche de pont, ou un descripteur TSS dpasse la limite du descripteur de table. Un slecteur de segment de bit TI est fixer mais le slecteur LDT est un slecteur nulle. Le descripteur de segment spcifi par l'instruction n'est pas un segment de code, une tche de pont, un appel de pont, ou un TSS disponible en mode legacy, ou un segment de code n'tant en mode 64 bits ou un appel de pont 64 bits dans un mode long. Le RPL de slecteur de segment de code spcifi est non-conforme une instruction plus grande que le CPL, ou le DPL n'est pas gale au CPL. Le DPL du descripteur de segment de code spcifi est conforme au

X #GP(Slecteur) X

78

instruction plus grande que le CPL. Le DPL de l'appel de pont, de tche de pont, ou le descripteur TSS spcifi par l'instruction est infrieur au CPL ou RPL. Le descripteur de segment spcifi par l'appel de pont ou la tche de pont est un slecteur nulle. Le descripteur de segment spcifi par l'appel de pont n'est pas en segment de code en mode legacy pi n'est pas un segment de code 64 bits dans le mode long. Le DPL du du descripteur de segment spcifi par l'appel de pont est plus grand que le CPL. L'appel d'un pont 64 bits avec des bits d'attribues tendues n'est pas 0. Le TSS du descripteur est prsent dans le LDT. L'accs au segment de code, appel d'un pont, tche de pont, ou TSS n'est pas prsent. Une faute de page rsultat de l'excution de l'instruction Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique, et n'est pas l'change de pile spcifi. Aprs l'change de pile, un accs mmoire dpasse la limite de segment de pile ou est noncanonique. Aprs l'change de pile, le registre SS n'est pas charg avec un slecteur de segment non-nulle et le segment est marqu comme nonprsent. Lors d'une partie de l'change entre la pile, la destination du segment de la pile ou du registre RSP dans le TSS est en dehors des limites TSS.

X #NP(Segment non prsent) #PF(Faute de page) #SS(Pile noncanonique) #SS(Pile) X X X

X X

X X

#SS(Slecteur)

#TS(Slecteur TSS invalide)

79

Lors d'une partie de l'change entre la pile, la destination du segment de la pile ou du registre RSP dans le TSS est dans un slecteur nulle. Lors d'une partie de l'change entre la pile, la destination du slecteur de pile du bit TI est fix, mais le slecteur LDT n'est pas un slecteur nulle. Lors d'une partie de l'change entre la pile, la destination du slecteur de segment de pile dans le TSS est en dehors des limites de la table du descripteur GDT ou LDT. Lors d'une partie de l'change entre la pile, la destination du slecteur de segment de pile dans le TSS contient un RPL n'est pas gale au DPL. Lors d'une partie de l'change entre la pile, la destination du slecteur de segment de pile dans le TSS contient un DPL n'est pas gale au CPL du slecteur de segment de code. Lors d'une partie de l'change entre la pile, la destination du slecteur de segment de pile dans le TSS n'est pas dans un segment crivable. L'appel long indirect avec le Opcode (FFh /3) est un oprande de registre. L'appel long direct avec le Opcode (9Ah) est effectu en mode 64 bits.

#UD(Opcode invalide)

Voir galement Instruction assembleur 80x86 - Instruction RET Instruction assembleur 80x86 - Instruction RETF Instruction assembleur 80x86 - Instruction RETN

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 806 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 401 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 76 83.

80

Assembleur 80x86 INTEL 8088+

CBW Convert Byte To Word

Syntaxe CBW

Description Cette instruction permet de convertir le nombre contenu dans le registre AL en un format sur 16 bits pour se retrouver dans le registre AX en appliquant une extension du signe. L'application des signes est applique de la faon suivante: le bit de signe de AL est copi dans les 8 bits du registre AH. Cette commande est destine au conversion de valeur 8 16 bits uniquement.

Algorithme SI AL 80h > 0 ALORS AH 080h AL AL 7Fh SINON AH 0 FIN SI

Mnmonique Instruction
CBW

Opcode
98h

Description
tendre les signes de AL dans AX

Exceptions Aucune

Voir galement Instruction assembleur 80x86 - Instruction CWD Instruction assembleur 80x86 - Instruction CWDE
81

Instruction assembleur 80x86 - Instruction CDQ

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 806 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 402 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 84.

82

Assembleur 80x86 INTEL 80386+

CDQ Convert Doubleword to Quadword

Syntaxe CDQ

Description L'instruction CDQ convertit le double mot (32 bits) se trouvant dans le registre EAX en un quadruple mot, le rsultat tient sur une taille de 64 bits. Pour russir fournir la rponse en entier, on procdera comme suit: Le double mot de poids le plus fort est plac dans EDX, celui de poids le plus faible dans le registre EAX. Les 32 bits du registre EDX sont positionns la valeur du bit de poids le plus fort du registre EAX.

Algorithme EDX extension des signes de EAX

Mnmonique Instruction
CQO

Opcode
99h

Description
tendre les signes de EAX dans EDX:EAX

Exceptions Aucune

83

Assembleur 80x86 x86-64+

CDQE Convert Doubleword to Quadword Extended

Syntaxe
CDQE

Description Cette instruction permet de convertir le double mot du registre EAX en un quadruple mot RAX, le rsultat tient sur une taille de 64 bits.

Algorithme
RAX extension des signes de EAX

Mnmonique
Instruction
CDQE

Opcode
98h

Description
tendre les signes de EAX dans RAX

Exceptions Aucune

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 187 188.

84

Assembleur 80x86 INTEL 8088+

CLC Clear Carry Flag

Syntaxe
CLC

Description Cette instruction permet de mettre l'indicateur d'tat de retenu CF 0.

Algorithme
drapeau CF 0

Remarque A titre purement informatif, sachez que ce registre d'tat de retenue est toujours gal 1 lorsqu'une opration gnre une retenue arithmtique et qu'il est par consquent impossible de reprsenter le rsultat qu'avec l'aide des bits disponibles. Dans ce ventualit, l'indicateur de retenue est considr comme 17ime ou 9ime bit du rsultat. C'est surtout dans la perspective des instructions ADC et SBB que le positionnement 0 de l'indicateur de retenue s'avre utile. Dans les autres cas, l'interruption 21h du systme d'exploitation sans servira pour indiquer s'il y a eu une erreur d'excution, toutefois ce n'est pas une situation relier directement au microprocesseur mais une programmation logiciel.

Mnmonique
Instruction CLC Opcode F8h Description Efface le drapeau de retenu (CF) 0

Exceptions Aucune

85

Voir galement Instruction assembleur 80x86 - Instruction STC Instruction assembleur 80x86 - Instruction CMC

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 807 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 402 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 86. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 189 189.

86

Assembleur 80x86 INTEL 8088+

CLD Clear Direction Flag

Syntaxe
CLD

Description Cette instruction met l'indicateur d'tat DF 0. Les oprations sur les chanes de caractres, tel CMPSB, CMPSD, CMPSQ, CMPSW, LODSB, LODSD, LODSQ, LODSW, MOVSB, MOVSD, MOVSQ, MOVSW, OUTSB, OUTSD, OUTSW, STOSB, STOSD, STOSQ et STOSW par exemple, incrmenteront maintenant les registres SI et DI.

Algorithme
drapeau DF 0

Mnmonique
Instruction CLD Opcode FCh Description Efface le drapeau de direction (DF) 0

Exceptions Aucune

Voir galement Instruction assembleur 80x86 - Instruction CMPS Instruction assembleur 80x86 - Instruction INS Instruction assembleur 80x86 - Instruction LODS Instruction assembleur 80x86 - Instruction MOVS Instruction assembleur 80x86 - Instruction OUTS Instruction assembleur 80x86 - Instruction SCAS Instruction assembleur 80x86 - Instruction STD Instruction assembleur 80x86 - Instruction STOS
87

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 807 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 402 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 87. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 190 190.

88

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

CLFLUSH
Load Unaligned Integer 128 bits

Syntaxe
CLFLUSH mem8

Description Cette instruction permet de vider la ligne de cache d'une adresse linaire.

Mnmonique
Instruction
CLFLUSH mem8

Opcode
0Fh AEh /7

Description
Vide la ligne de cache contenu dans mem8.

Exceptions
Message Mode rel Virtuel 8086
X

Mode protg
X

Description
Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique, et n'est pas l'change de pile spcifi. Cette instruction n'est pas support, lequel est indiqu par le

#GP(Protection X gnral)

#PF(Faute de page) #SS(Pile) X

#UD(Opcode

89

invalide)

registre EDX, bits 19 de l'instruction CPUID, fonction 0000_0001h.

Voir galement Instruction assembleur 80x86 - Instruction INVD Instruction assembleur 80x86 - Instruction WBINVD

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 191 192.

90

Assembleur 80x86
AMD-V
Syntaxe
CLGI

CLGI
Clear Global Interrupt Flag

Description Cette instruction permet d'effacer les drapeaux global d'interruption (GIF). Quand le GIF est 0, toutes les interruptions externes sont dsactivs.

Mnmonique
Instruction CLGI Opcode 0Fh 01h DDh Description Efface le drapeau d'interruption global (GIF).

Exceptions
Message
#UD(Opcode invalide)

Mode rel
X

Virtuel 8086
X

Mode protg
X

Description
Les instructions SVM ne sont pas supports, comme indiqu par le bit 2 du registre ECX de la fonction 8000_00001h de l'instruction CPUID. La machine virtuel scuris n'est pas activ (EFER.SVME=0). Cette instruction est seulement reconnu en mode protg.

#GP(Protection X gnral)

Le CPL ne vaut pas 0.

91

Voir galement Instruction assembleur 80x86 - Instruction STGI

92

Assembleur 80x86
INTEL 8088+
Syntaxe
CLI

CLI
Clear Interrupt Flag

Description Cette instruction met l'indicateur d'tat IF 0. Aprs avoir excuter cette instruction, aucune interruption ne sera admise tant que l'instruction STI n'est pas rencontre.

Algorithme
drapeau IF 0

Mnmonique
Instruction CLI Opcode FAh Description Efface le drapeau d'interruption (IF) et le met 0.

Cycles d'horloge
8086 8088 80186 80286 80386 i486 Pentium Cx486SLC Cx486DX IBM 486BL3X UMC U5S Instructio Opcod n e

CLI

FAh

93

Exceptions
Message
#GP(Protection gnral)

Mode rel

Virtuel 8086
X

Mode protg

Description
Le CPL est suprieur au IOCPL et les extensions du mode virtuel sont dsactivs (CR4.VME=0).

Le CPL est suprieur au IOCPL et le CPL n'est pas 3 ou l'interruption du mode protg virtuel n'est pas activ (CR4.PVI=0).

Remarque Afin que les choses soit bien claire, sachez que mme si ce registre d'tat d'interruption est mit 0, le microprocesseur ne masque pas les interruptions de type NMI (Non masquable Interruption). La commande CLI vise donc faire en sorte que toutes les interruptions masquables ne soient plus excutes. Cette interdiction peut tre leve l'aide de la commande STI.

Exemple Cet exemple, destin au mode rel, permet de retourner 1 dans le registre AL si la touche ALT du clavier est enfonc ou 0 s'il ne l'est pas :
1. 2. 3. 4. 5. 6. 7. 8. XOR AX,AX MOV ES,AX CLI MOV AL,ES:[417h] STI AND AL,8 JZ @@End MOV AL,1 9. @@End:

Voir galement Instruction assembleur 80x86 - Instruction STI

94

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 807 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 402 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 255. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 193 195.

95

Assembleur 80x86 INTEL 80286+ (Mode protg)

CLTS CLear Task-Switched flags in CR0

Syntaxe
CLTS

Description Cette instruction permet d'effacer ou si vous prfrez de mettre 0 le drapeau de l'indicateur de tche (Task-Switch) du registre CR0.

Algorithme
drapeau TS 0

Mnmonique
Instruction CLTS Opcode 0Fh 06h Description Efface le drapeau d'changeur de tche (TS) du registre CR0

Cycles d'horloge 8086 Instruction Opcode 8088 80186 80286 80386 i486 Pentium Cx486SLC Cx486DX IBM 486BL3X UMC U5S

CLTS

0Fh 06h

Exceptions
Message #GP(Protection gnral) Mode rel Virtuel 8086 X Mode protg X Description Le CPL ne vaut pas 0.

96

Voir galement Instruction assembleur 80x86 - Instruction LMSW

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 196 197.

97

Assembleur 80x86 INTEL 8088+

CMC Complement Carry Flag

Syntaxe
CMC

Description Cette instruction offre la possibilit d'inverser la valeur de l'indicateur de retenue. Si ce dernier vaut 1, elle le met 0 et inversement. On utilise cette instruction surtout dans le cas des additions et des soustractions.

Algorithme
drapeau CF PAS drapeau CF

Mnmonique
Instruction CMC Opcode F5h Description Complment du drapeau de retenue (CF)

Exceptions Aucune

Voir galement Instruction assembleur 80x86 - Instruction CLC Instruction assembleur 80x86 - Instruction STC

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 807 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 90. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 198 198.

98

Assembleur 80x86 INTEL P6+

CMOV Conditionnel MOVe

Syntaxe
CMOVcc registre, valeur

Description C'est l'quivalent d'un MOV conditionnel. Cette instruction copie des donnes d'une source (valeur) une destination (registre) la condition que la condition (cc) demand soit remplie.

Algorithme
SI condition ALORS registre valeur FIN SI

Remarque Avant de lancer cette instruction, il est important que vous sachiez que cette instruction n'est pas support par tous les Pentium Pro, l'instruction CPUID retourne un indicateur confirmant ou niant que cette instruction est supporte.

Mnmonique
Instruction
CMOVO reg16, reg/mem16 CMOVO reg32, reg/mem32 CMOVO reg64, reg/mem64 CMOVNO reg16, reg/mem16 CMOVNO reg32, reg/mem32 CMOVNO reg64, reg/mem64 CMOVB reg16, reg/mem16

Opcode
0Fh 40h /r 0Fh 40h /r 0Fh 40h /r 0Fh 41h /r 0Fh 41h /r 0Fh 41h /r 0Fh 42h /r

Description
Copie si dbordement (OF = 1) Copie si dbordement (OF = 1) Copie si dbordement (OF = 1) Copie si pas de dbordement (OF = 0) Copie si pas de dbordement (OF = 0) Copie si pas de dbordement (OF = 0) Copie si retenu (CF = 1)

99

CMOVB reg32, reg/mem32 CMOVB reg64, reg/mem64 CMOVC reg16, reg/mem16 CMOVC reg32, reg/mem32 CMOVC reg64, reg/mem64 CMOVNAE reg16, reg/mem16 CMOVNAE reg32, reg/mem32 CMOVNAE reg64, reg/mem64 CMOVNB reg16,reg/mem16 CMOVNB reg32,reg/mem32 CMOVNB reg64,reg/mem64 CMOVNC reg16,reg/mem16 CMOVNC reg32,reg/mem32 CMOVNC reg64,reg/mem64 CMOVAE reg16, reg/mem16 CMOVAE reg32, reg/mem32 CMOVAE reg64, reg/mem64 CMOVZ reg16, reg/mem16 CMOVZ reg32, reg/mem32 CMOVZ reg64, reg/mem64 CMOVE reg16, reg/mem16 CMOVE reg32, reg/mem32 CMOVE reg64, reg/mem64 CMOVNZ reg16, reg/mem16 CMOVNZ reg32, reg/mem32 CMOVNZ reg64, reg/mem64 CMOVNE reg16, reg/mem16 CMOVNE reg32, reg/mem32 CMOVNE reg64, reg/mem64 CMOVBE reg16, reg/mem16 CMOVBE reg32, reg/mem32

0Fh 42h /r 0Fh 42h /r 0Fh 42h /r 0Fh 42h /r 0Fh 42h /r 0Fh 42h /r 0Fh 42h /r 0Fh 42h /r 0Fh 43h /r 0Fh 43h /r 0Fh 43h /r 0Fh 43h /r 0Fh 43h /r 0Fh 43h /r 0Fh 43h /r 0Fh 43h /r 0Fh 43h /r 0Fh 44h /r 0Fh 44h /r 0Fh 44h /r 0Fh 44h /r 0Fh 44h /r 0Fh 44h /r 0Fh 45h /r 0Fh 45h /r 0Fh 45h /r 0Fh 45h /r 0Fh 45h /r 0Fh 45h /r 0Fh 46h /r 0Fh 46h /r

Copie si retenu (CF = 1) Copie si retenu (CF = 1) Copie si retenu (CF = 1) Copie si retenu (CF = 1) Copie si retenu (CF = 1) Copie si retenu (CF = 1) Copie si retenu (CF = 1) Copie si retenu (CF = 1) Copie si pas retenu (CF = 0) Copie si pas retenu (CF = 0) Copie si pas retenu (CF = 0) Copie si pas retenu (CF = 0) Copie si pas retenu (CF = 0) Copie si pas retenu (CF = 0) Copie si pas retenu (CF = 0) Copie si pas retenu (CF = 0) Copie si pas retenu (CF = 0) Copie si drapeau du zro (ZF = 1) Copie si drapeau du zro (ZF = 1) Copie si drapeau du zro (ZF = 1) Copie si drapeau du zro (ZF = 1) Copie si drapeau du zro (ZF = 1) Copie si drapeau du zro (ZF = 1) Copie si drapeau de pas de zro (ZF = 0) Copie si drapeau de pas de zro (ZF = 0) Copie si drapeau de pas de zro (ZF = 0) Copie si drapeau de pas de zro (ZF = 0) Copie si drapeau de pas de zro (ZF = 0) Copie si drapeau de pas de zro (ZF = 0) Copie si drapeau de zro (ZF = 1) ou drapeau de retenu (CF = 1) Copie si drapeau de zro (ZF = 1) ou drapeau de retenu (CF = 1)

100

CMOVBE reg64, reg/mem64 CMOVNA reg16, reg/mem16 CMOVNA reg32, reg/mem32 CMOVNA reg64, reg/mem64 CMOVNBE reg16, reg/mem16 CMOVNBE reg32, reg/mem32 CMOVNBE reg64, reg/mem64 CMOVA reg16, reg/mem16 CMOVA reg32, reg/mem32 CMOVA reg64, reg/mem64 CMOVS reg16, reg/mem16 CMOVS reg32, reg/mem32 CMOVS reg64, reg/mem64 CMOVNS reg16, reg/mem16 CMOVNS reg32, reg/mem32 CMOVNS reg64, reg/mem64 CMOVP reg16, reg/mem16 CMOVP reg32, reg/mem32 CMOVP reg64, reg/mem64 CMOVPE reg16, reg/mem16 CMOVPE reg32, reg/mem32 CMOVPE reg64, reg/mem64 CMOVNP reg16, reg/mem16 CMOVNP reg32, reg/mem32 CMOVNP reg64, reg/mem64 CMOVPO reg16, reg/mem16

0Fh 46h /r 0Fh 46h /r 0Fh 46h /r 0Fh 46h /r 0Fh 47h /r 0Fh 47h /r 0Fh 47h /r 0Fh 47h /r 0Fh 47h /r 0Fh 47h /r 0Fh 48h /r 0Fh 48h /r 0Fh 48h /r 0Fh 49h /r 0Fh 49h /r 0Fh 49h /r 0Fh 4Ah /r 0Fh 4Ah /r 0Fh 4Ah /r 0Fh 4Ah /r 0Fh 4Ah /r 0Fh 4Ah /r 0Fh 4Bh /r 0Fh 4Bh /r 0Fh 4Bh /r 0Fh 4Bh /r

Copie si drapeau de zro (ZF = 1) ou drapeau de retenu (CF = 1) Copie si drapeau de zro (ZF = 1) ou drapeau de retenu (CF = 1) Copie si drapeau de zro (ZF = 1) ou drapeau de retenu (CF = 1) Copie si drapeau de zro (ZF = 1) ou drapeau de retenu (CF = 1) Copie si drapeau de pas de zro (ZF = 0) et drapeau de pas de retenu (CF = 0) Copie si drapeau de pas de zro (ZF = 0) et drapeau de pas de retenu (CF = 0) Copie si drapeau de pas de zro (ZF = 0) et drapeau de pas de retenu (CF = 0) Copie si drapeau de pas de zro (ZF = 0) et drapeau de pas de retenu (CF = 0) Copie si drapeau de pas de zro (ZF = 0) et drapeau de pas de retenu (CF = 0) Copie si drapeau de pas de zro (ZF = 0) et drapeau de pas de retenu (CF = 0) Copie si drapeau de signe (SF = 1) Copie si drapeau de signe (SF = 1) Copie si drapeau de signe (SF = 1) Copie si drapeau de pas de signe (SF = 0) Copie si drapeau de pas de signe (SF = 0) Copie si drapeau de pas de signe (SF = 0) Copie si drapeau de parit (PF = 1) Copie si drapeau de parit (PF = 1) Copie si drapeau de parit (PF = 1) Copie si drapeau de parit (PF = 1) Copie si drapeau de parit (PF = 1) Copie si drapeau de parit (PF = 1) Copie si drapeau de pas de parit (PF = 0) Copie si drapeau de pas de parit (PF = 0) Copie si drapeau de pas de parit (PF = 0) Copie si drapeau de pas de parit (PF = 0)

101

CMOVPO reg32, reg/mem32 CMOVPO reg64, reg/mem64 CMOVL reg16, reg/mem16 CMOVL reg32, reg/mem32 CMOVL reg64, reg/mem64 CMOVNGE reg16, reg/mem16 CMOVNGE reg32, reg/mem32 CMOVNGE reg64, reg/mem64 CMOVNL reg16, reg/mem16 CMOVNL reg32, reg/mem32 CMOVNL reg64, reg/mem64 CMOVGE reg16, reg/mem16 CMOVGE reg32, reg/mem32 CMOVGE reg64, reg/mem64 CMOVLE reg16, reg/mem16 CMOVLE reg32, reg/mem32 CMOVLE reg64, reg/mem64 CMOVNG reg16, reg/mem16 CMOVNG reg32, reg/mem32 CMOVNG reg64, reg/mem64 CMOVNLE reg16, reg/mem16 CMOVNLE reg32, reg/mem32 CMOVNLE reg64, reg/mem64 CMOVG reg16, reg/mem16 CMOVG reg32, reg/mem32 CMOVG reg64, reg/mem64

0Fh 4Bh /r 0Fh 4Bh /r 0Fh 4Ch /r 0Fh 4Ch /r 0Fh 4Ch /r 0Fh 4Ch /r 0Fh 4Ch /r 0Fh 4Ch /r 0Fh 4Dh /r 0Fh 4Dh /r 0Fh 4Dh /r 0Fh 4Dh /r 0Fh 4Dh /r 0Fh 4Dh /r 0Fh 4Eh /r 0Fh 4Eh /r 0Fh 4Eh /r 0Fh 4Eh /r 0Fh 4Eh /r 0Fh 4Eh /r 0Fh 4Fh /r 0Fh 4Fh /r 0Fh 4Fh /r 0Fh 4Fh /r 0Fh 4Fh /r 0Fh 4Fh /r

Copie si drapeau de pas de parit (PF = 0) Copie si drapeau de pas de parit (PF = 0) Copie si SF <> OF Copie si SF <> OF Copie si SF <> OF Copie si SF <> OF Copie si SF <> OF Copie si SF <> OF Copie si SF = OF Copie si SF = OF Copie si SF = OF Copie si SF = OF Copie si SF = OF Copie si SF = OF Copie si ZF = 1 ou SF <> OF Copie si ZF = 1 ou SF <> OF Copie si ZF = 1 ou SF <> OF Copie si ZF = 1 ou SF <> OF Copie si ZF = 1 ou SF <> OF Copie si ZF = 1 ou SF <> OF Copie si ZF = 0 et SF = OF Copie si ZF = 0 et SF = OF Copie si ZF = 0 et SF = OF Copie si ZF = 0 et SF = OF Copie si ZF = 0 et SF = OF Copie si ZF = 0 et SF = OF

Exceptions
Message
#UD(Opcode invalide)

Mode rel
X

Virtuel 8086
X

Mode protg
X

Description
Cette instruction n'est pas support. C'est instruction est support si l'indicateur

102

de bit 15 du registre EDX de l'instruction CPUID avec la fonction 0000_0001h ou 8000_0001h. #SS(Pile noncanonique) #GP(Protection gnral) Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction MOV

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 199 204.

103

Assembleur 80x86
INTEL 8088+
Syntaxe
CMP Oprande Cible, Oprande Source

CMP
Compare two operands

Description Cette instruction offre la possibilit essentielle de comparer 2 registres ou emplacements de mmoire. Le rsultat de la comparaison est indiqu par les indicateurs (registre drapeau du microprocesseur).

Algorithme
Drapeau oprande1 = oprande2

Mnmonique
Instruction
CMP AL, imm8 CMP AX, imm16 CMP EAX, imm32 CMP RAX, imm32 CMP reg/mem8, imm8 CMP reg/mem16, imm16 CMP reg/mem32, imm32 CMP reg/mem64, imm32

Opcode
3Ch ib 3Dh iw 3Dh iw 3Dh id 80h /7 ib 81h /7 iw 81h /7 id 81h /7 id

Description
Compare une valeur 8 bits immdiate avec le contenu du registre AL. Compare une valeur 16 bits immdiate avec le contenu du registre AX. Compare une valeur 32 bits immdiate avec le contenu du registre EAX. Compare une valeur 32 bits immdiate avec le contenu du registre RAX. Compare une valeur 8 bits immdiate avec le contenu d'une oprande mmoire ou d'un registre 8 bits. Compare une valeur 16 bits immdiate avec le contenu d'une oprande mmoire ou d'un registre 16 bits. Compare une valeur 32 bits immdiate avec le contenu d'une oprande mmoire ou d'un registre 32 bits. Compare une valeur 32 bits immdiate avec le contenu d'une oprande mmoire ou d'un registre 64 bits.

104

CMP reg/mem16, imm8 CMP reg/mem32, imm8 CMP reg/mem64, imm8 CMP reg/mem8, reg8 CMP reg/mem16, reg16 CMP reg/mem32, reg32 CMP reg/mem64, reg64 CMP reg8, reg/mem8 CMP reg16, reg/mem16 CMP reg32, reg/mem32 CMP reg64, reg/mem64

83h /7 ib 83h /7 ib 83h /7 ib 38h /r 39h /r 39h /r 39h /r 39h /r 3Bh /r 3Bh /r 3Bh /r

Compare une valeur 8 bits immdiate avec le contenu d'une oprande mmoire ou d'un registre 16 bits. Compare une valeur 8 bits immdiate avec le contenu d'une oprande mmoire ou d'un registre 32 bits. Compare une valeur 8 bits immdiate avec le contenu d'une oprande mmoire ou d'un registre 64 bits. Compare le contenu d'une oprande mmoire ou d'un registre 8 bits avec un registre 8 bits. Compare le contenu d'une oprande mmoire ou d'un registre 16 bits avec un registre 16 bits. Compare le contenu d'une oprande mmoire ou d'un registre 32 bits avec un registre 32 bits. Compare le contenu d'une oprande mmoire ou d'un registre 64 bits avec un registre 64 bits. Compare le contenu d'une oprande mmoire ou d'un registre 8 bits avec un registre 8 bits. Compare le contenu d'une oprande mmoire ou d'un registre 16 bits avec un registre 16 bits. Compare le contenu d'une oprande mmoire ou d'un registre 32 bits avec un registre 32 bits. Compare le contenu d'une oprande mmoire ou d'un registre 64 bits avec un registre 64 bits.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description
Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

105

#AC(Vrifie l'alignement)

Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Exemple L'exemple suivant permet de retourner 1 si le caractre spcifi par la variable Chr est une lettre de l'alphabet (majuscule ou minucule) ou 0 s'il ne l'est pas :
1. 2. 3. 4. 5. 6. 7. 8. XOR AL,AL MOV CL,Chr AND CL,0DFh CMP CL,'A' JB @1 CMP CL,'Z' JA @1 INC AL 9. @1:

Voir galement Instruction assembleur 80x86 - Instruction SUB Instruction assembleur 80x86 - Instruction CMPS Instruction assembleur 80x86 - Instruction SCAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 808 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 403 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 94 96. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 206 208.

106

Assembleur 80x86
INTEL Pentium 4 (SSE2)+
Syntaxe
CMPPD dest,source,immediat

CMPPD
Compare Packed Double-Precision FloatingPoint Values

Description Cette instruction permet d'effectuer une comparaison SIMD de 2 paquets de valeurs rels de double prcision d'un oprande source et d'un oprande destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

Algorithme
EVALUER CAS immediat DE CAS 0: OPERATION EQ CAS 1: OPERATION LT CAS 2: OPERATION LE CAS 3: OPERATION UNORD CAS 4: OPERATION NEQ CAS 5: OPERATION NLT CAS 6: OPERATION NLE CAS 7: OPERATION ORD FIN SI CMP0 dest(63..0) OPERATION source(63..0) CMP1 dest(127..64) OPERATION source(127..64) SI CMP0 ALORS dest(63..0) FFFFFFFFFFFFFFFFh SINON dest(63..0) 0000000000000000h FIN SI SI CMP1 ALORS dest(127..64) FFFFFFFFFFFFFFFFh SINON dest(127..64) 0000000000000000h

107

FIN SI

Mnmonique
Instruction Opcode Description
Cette instruction permet d'effectuer une comparaison SIMD de 2 paquets de valeurs rels de double prcision d'un oprande source et d'un oprande destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

CMPPD xmm1,xmm2/m128,imm8

66h 0Fh C2h /r ib

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 209 213.

108

Assembleur 80x86
INTEL Pentium III (SSE)+

CMPPS
Compare Packed Single-Precision Floating-Point Values

Syntaxe
CMPPS dest, source, imm8

Description Cette instruction permet d'effectuer une comparaison SIMD de 4 paquets de valeurs rels de simple prcision d'une oprande source et d'une oprande destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

Algorithme
EVALUER CAS (imm8) DE CAS 0: OPERATION EQ CAS 1: OPERATION LT CAS 2: OPERATION LE CAS 3: OPERATION UNORD CAS 4: OPERATION NE CAS 5: OPERATION NLT CAS 6: OPERATION NLE CAS 7: OPERATION ORD FIN EVALUER CAS CMP0 dest(31..0) OPERATION source(31..0) CMP1 dest(63..32) OPERATION source(63..32) CMP2 dest(95..64) OPERATION source(95..64) CMP3 dest(127..96) OPERATION source(127..96) SI CMP0 est vrai ALORS dest(31..0) FFFFFFFFh SINON dest(31..0) 00000000h FIN SI

109

SI CMP1 est vrai ALORS dest(63..32) FFFFFFFFh SINON dest(63..32) 00000000h FIN SI SI CMP2 est vrai ALORS dest(95..64) FFFFFFFFh SINON dest(95..64) 00000000h FIN SI SI CMP3 est vrai ALORS dest(127..96) FFFFFFFFh SINON dest(127..96) 00000000h FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une comparaison SIMD de 4 paquets de valeurs rels de simple prcision d'une oprande source et d'une oprande destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

CMPPS xmm1,xmm2/m128,imm8 0Fh C2h /r imm8

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 214 218.

110

Assembleur 80x86
INTEL 8088+

CMPS
Compare String

Syntaxe
CMPS destination,source

Description Cette instruction permet d'effectuer la comparaison d'un octet, d'un mot, double mot ou du quadruple mot spcifi avec l'oprande source et destination spcifi et fixe l'tat des drapeaux du registres EFLAGS en fonction des rsultats de la comparaison.

Algorithme
Fixe les drapeaux d'tats de (destination = source) SI (comparison d'octet) ALORS SI DF = 0 ALORS (E)SI (E)SI + 1 (E)DI (E)DI + 1 SINON (E)SI (E)SI - 1 (E)DI (E)DI - 1 FIN SI SINON SI (comparison d'un mot) ALORS SI DF = 0 ALORS (E)SI (E)SI + 2 (E)DI (E)DI + 2 SINON (E)SI (E)SI - 2 (E)DI (E)DI - 2 FIN SI SINON SI (comparaison d'un double mot) ALORS SI DF = 0 ALORS (E)SI (E)SI + 4 111

(E)DI (E)DI + 4 SINON (E)SI (E)SI - 4 (E)DI (E)DI - 4 FIN SI SINON SI (comparaison d'un quadruple mot) ALORS SI DF = 0 ALORS (E)SI (E)SI + 8 (E)DI (E)DI + 8 SINON (E)SI (E)SI - 8 (E)DI (E)DI - 8 FIN SI FIN SI

Mnmonique
Instruction Opcode Description Compare l'octet l'adresse DS:(R)SI avec l'octet l'adresses ES:(R)DI et incrmente ou dcrmente les registres (R)SI et (R)DI Compare le mot l'adresse DS:(R)SI avec le mot l'adresses ES:(R)DI et incrmente ou dcrmente les registres (R)SI et (R)DI Compare le double mot l'adresse DS:(R)SI avec le double mot l'adresses ES:(R)DI et incrmente ou dcrmente les registres (R)SI et (R)DI Compare le quadruple mot l'adresse DS:(R)SI avec le quadruple mot l'adresses ES:(R)DI et incrmente ou dcrmente les 112

CMPS mem8, mem8

A6h

CMPS mem16, mem16

A7h

CMPS mem32, mem32

A7h

CMPS mem64, mem64

A7h

registres (R)SI et (R)DI

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

113

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir galement Instruction assembleur 80x86 - Instruction CMP Instruction assembleur 80x86 - Instruction SCAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 808 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 97. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 219 224.

114

Assembleur 80x86
INTEL 8086+

CMPSB
Compare String Byte

Syntaxe
CMPSB

Description Cette instruction permet d'effectuer la comparaison d'un octet avec l'oprande source (DS:(R)SI) et destination (ES:(R)DI) et fixe l'tat des drapeaux du registres EFLAGS en fonction des rsultats de la comparaison.

Algorithme
Fixe les drapeaux d'tats de ([(E)DI] = [(E)SI]) SI DF = 0 ALORS (E)SI (E)SI + 1 (E)DI (E)DI + 1 SINON (E)SI (E)SI - 1 (E)DI (E)DI - 1 FIN SI

Mnmonique
Instruction Opcode Description Compare l'octet l'adresse DS:(R)SI avec l'octet l'adresses ES:(R)DI et incrmente ou dcrmente les registres (R)SI et (R)DI

CMPSB

A6h

115

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

116

quand une vrification d'alignement est activ

Voir galement Instruction assembleur 80x86 - Instruction CMP Instruction assembleur 80x86 - Instruction SCAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 808 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 403 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 97. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 219 224.

117

Assembleur 80x86
INTEL 80386+

CMPSD
Compare String Double Word

Syntaxe
CMPSD

Description Cette instruction permet d'effectuer la comparaison d'un double mot avec l'oprande source (DS:(R)SI) et destination (ES:(R)DI) et fixe l'tat des drapeaux du registres EFLAGS en fonction des rsultats de la comparaison.

Algorithme
Fixe les drapeaux d'tats de ([(E)DI] = [(E)SI]) SI DF = 0 ALORS (E)SI (E)SI + 4 (E)DI (E)DI + 4 SINON (E)SI (E)SI - 4 (E)DI (E)DI - 4 FIN SI

Mnmonique
Instruction Opcode Description Compare le double mot l'adresse DS:(R)SI avec le double mot l'adresses ES:(R)DI et incrmente ou dcrmente les registres (R)SI et

CMPSD

A7h

118

(R)DI

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

119

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir galement Instruction assembleur 80x86 - Instruction CMP Instruction assembleur 80x86 - Instruction SCAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 809 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 97. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 219 224.

120

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

CMPSD
Compare Scalar Double-Precision Floating-Point Values

Syntaxe
CMPSD dest,source,immediat

Description Cette instruction permet d'effectuer une comparaison de la partie basse de valeurs relles de double prcision d'un oprande source et d'un oprande destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

Algorithme
EVALUER CAS immediat DE CAS 0: OPERATION EQ CAS 1: OPERATION LT CAS 2: OPERATION LE CAS 3: OPERATION UNORD CAS 4: OPERATION NEQ CAS 5: OPERATION NLT CAS 6: OPERATION NLE CAS 7: OPERATION ORD FIN EVALUER CAS CMP0 dest(63..0) OPERATION source(63..0) SI CMP0 ALORS dest(63..0) FFFFFFFFFFFFFFFFh SINON dest(63..0) 0000000000000000h FIN SI

Mnmonique
121

Instruction

Opcode

Description Cette instruction permet d'effectuer une comparaison de la partie basse de valeurs relles de double prcision d'un oprande source et d'un oprande destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

CMPSD xmm1,xmm2/m64, imm8 F2h 0Fh C2h /r ib

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 225 228.

122

Assembleur 80x86
x86-64+

CMPSQ
Compare String Quadword

Syntaxe
CMPSQ

Description Cette instruction permet d'effectuer la comparaison d'un quadruple mot avec l'oprande source (DS:(R)SI) et destination (ES:(R)DI) et fixe l'tat des drapeaux du registres EFLAGS en fonction des rsultats de la comparaison.

Algorithme
Fixe les drapeaux d'tats de ([(E)DI] = [(E)SI]) SI DF = 0 ALORS (E)SI (E)SI + 8 (E)DI (E)DI + 8 SINON (E)SI (E)SI - 8 (E)DI (E)DI - 8 FIN SI

Mnmonique
Instruction Opcode Description Compare le quadruple mot l'adresse DS:(R)SI avec le quadruple mot l'adresses ES:(R)DI et incrmente ou dcrmente les

CMPSQ

A7h

123

registres (R)SI et (R)DI

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

124

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir galement Instruction assembleur 80x86 - Instruction CMP Instruction assembleur 80x86 - Instruction SCAS

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 219 224.

125

Assembleur 80x86
INTEL Pentium III (SSE)+

CMPSS
Compare Scalar Single-Precision Floating-Point Values

Syntaxe
CMPSS dest, source, imm8

Description Cette instruction permet d'effectuer une comparaison de la partie basse de valeurs rels de simple prcision d'une oprande source et d'une oprande destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

Algorithme
EVALUER CAS (imm8) DE CAS 0: OPERATION EQ CAS 1: OPERATION LT CAS 2: OPERATION LE CAS 3: OPERATION UNORD CAS 4: OPERATION NEQ CAS 5: OPERATION NLT CAS 6: OPERATION NLE CAS 7: OPERATION ORD FIN EVALUER CAS CMP0 dest(31..0) OPERATION source(31..0) SI CMP0 est vrai ALORS dest(31..0) FFFFFFFFh SINON dest(31..0) 00000000h FIN SI

Mnmonique
126

Instruction

Opcode

Description Cette instruction permet d'effectuer une comparaison de la partie basse de valeurs rels de simple prcision d'une oprande source et d'une oprande destination et entrepose le rsultat de la comparaison dans l'oprande de destination.

CMPSS xmm1,xmm2/m128,imm8 F3h 0Fh C2h /r imm8

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 229 232.

127

Assembleur 80x86
INTEL 8086+

CMPSW
Compare String Word

Syntaxe
CMPSW

Description Cette instruction permet d'effectuer la comparaison d'un mot avec l'oprande source (DS:(R)SI) et destination (ES:(R)DI) et fixe l'tat des drapeaux du registres EFLAGS en fonction des rsultats de la comparaison.

Algorithme
Fixe les drapeaux d'tats de ([(E)DI] = [(E)SI]) SI DF = 0 ALORS (E)SI (E)SI + 2 (E)DI (E)DI + 2 SINON (E)SI (E)SI - 2 (E)DI (E)DI - 2 FIN SI

Mnmonique
Instruction Opcode Description Compare le mot l'adresse DS:(R)SI avec le mot l'adresses ES:(R)DI et incrmente ou dcrmente les registres (R)SI et (R)DI

CMPSW

A7h

128

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

129

quand une vrification d'alignement est activ

Voir galement Instruction assembleur 80x86 - Instruction CMP Instruction assembleur 80x86 - Instruction SCAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 809 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 403 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 97. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 219 224.

130

Assembleur 80x86 INTEL 80486+

CMPXCHG CoMPare and eXCHanGe

Syntaxe
CMPXCHG Oprande Destination, Oprande Source

Description A l'aide de l'instruction CMPXCHG, on peut comparer la destination avec l'accumulateur (AL, AX ou EAX). S'ils sont gaux, l'oprande de destination reoit le contenu de l'oprande source, tandis que s'ils sont diffrents, l'accumulation (AL, AX ou EAX) reoit le contenu de l'oprande de destination.

Algorithme
SI accumulateur = Oprande Destination ALORS drapeau ZF 1 Oprande Destination Oprande Source SINON drapeau ZF 0 accumulateur Oprande Destination FIN SI

Mnmonique
Instruction Opcode Description Compare de registre AL avec un emplacement 8 bits de registre ou mmoire. S'ils sont gale, le deuxime oprande est copi dans le premire oprande. Compare de registre AX avec un emplacement 16 bits de registre ou 131

CMPXCHG reg/mem8, reg8

0Fh B0h /r

CMPXCHG reg/mem16, reg16

0Fh B1h /r

mmoire. S'ils sont gale, le deuxime oprande est copi dans le premire oprande. Compare de registre EAX avec un emplacement 32 bits de registre ou mmoire. S'ils sont gale, le deuxime oprande est copi dans le premire oprande. Compare de registre RAX avec un emplacement 64 bits de registre ou mmoire. S'ils sont gale, le deuxime oprande est copi dans le premire oprande.

CMPXCHG reg/mem32, reg32

0Fh B1h /r

CMPXCHG reg/mem64, reg64

0Fh B1h /r

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de

#SS(Pile noncanonique)

#GP(Protection gnral)

132

destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction CMPXCHG8B Instruction assembleur 80x86 - Instruction CMPXCHG16B

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 233 235.

133

Assembleur 80x86 INTEL Pentium

CMPXCHG8B CoMPare and eXCHanGe 8 Bytes

Syntaxe
CMPXCHG8B registre, mmoire

Description L'instruction CMPXCHG8B compare un nombre de 64 bits forme par le couple registre de EDX:EAX avec une valeur 64 bits se trouvant en mmoire. Si ces valeurs sont quivalente, les 64 bits se trouvant en mmoire sont remplacs par les 64 bits forms par le couple de registre ECX:EBX. Dans le cas contraire, les 64 bits forms par les registres EDX:EAX sont remplacs par les 64 bits se trouvant en mmoire.

Algorithme
SI EDX:EAX = Oprande Destination ALORS drapeau ZF 1 Oprande Destination ECX:EBX SINON drapeau ZF 0 EDX:EAX Oprande Destination FIN SI

Mnmonique
Instruction CMPXCHG8B mem64 Opcode 0Fh C7h /1 m64 Description Compare la paire de registres EDX:EAX l'emplacement mmoire de 64 bits. S'ils sont gale, alors fixe le drapeau de zro 1 et copie ECX:EBX dans l'emplacement

134

mmoire. Autrement, copie l'emplacement mmoire dans EDX:EAX et efface le drapeau de zro.

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description L'instruction CMPXCHG8B n'est pas support, lequel est indiquer par le bit 8 du registre EDX de l'instruction CPUID, fonction 0000_0001h ou 8000_0001h. L'oprande est un registre. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la

#UD(Opcode invalide) X

#SS(Pile noncanonique)

#GP(Protection gnral)

135

limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction CMPXCHG


136

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 236 238.

137

Assembleur 80x86
x86-64+

CMPXCHG16B
Compare and Exchange Sixteen Bytes

Syntaxe
CMPXCHG16B dest

Description Cette instruction permet de comparer un nombre de 128 bits et les changes si la condition est vrai.

Algorithme
SI RDX:RAX = dest ALORS ZF 1 dest RCX:RBX SINON ZF 0 RDX:RAX dest FIN SI

Mnmonique
Instruction Opcode Description Compare la paire de registres EDX:EAX l'emplacement mmoire de 128 bits. S'ils sont gale, alors fixe le drapeau de zro 1 et copie RCX:RBX dans l'emplacement mmoire. Autrement, copie l'emplacement mmoire dans

CMPXCHG16B mem128

0Fh C7h /1 m128

138

RDX:RAX et efface le drapeau de zro.

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description L'instruction CMPXCHG16B n'est pas support, lequel est indiquer par le bit 13 du registre ECX de l'instruction CPUID, fonction 0000_0001h. L'oprande est un registre. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou

#UD(Opcode invalide) X

#SS(Pile noncanonique)

#GP(Protection gnral)

139

n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire L'oprande mmoire pour l'instruction CMPXCHG16B n'est pas align avec une limite de 16 octets. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement

#PF(Faute de page)

#AC(Vrifie l'alignement)

140

est activ

Exemple Cet exemple permet de tester la valeur d'un octet de deux adresses :
1. 2. 3. 4. MOVZX RBX,Byte Ptr [RAX] MOVZX RCX,Byte Ptr [RAX] MOVZX RDX,Byte Ptr [RAX] MOVZX RAX,Byte Ptr [RDI] 5. CMPXCHG16B OWord Ptr [RAX]

Voir galement Instruction assembleur 80x86 - Instruction CMPXCHG

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 236 238.

141

Assembleur 80x86
INTEL Pentium III+

COMISD
Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS

Syntaxe
COMISD destination,source

Description Cette instruction permet de comparer deux valeurs rel de double-prcision dans la partie faible du quadruple mot de deux oprande et fixe les drapeaux de ZF, PF et FC du registre EFLAGS en fonction du rsultat (non-ordonne, suprieur , infrieur ou gal).

Algorithme
EVALUER CAS (OrderedCompare(destination(63..0) <> source(63..0))) DE CAS UNORDERED: ZF,PF,CF 111b CAS GREATER_THAN: ZF,PF,CF 000b CAS LESS_THAN: ZF,PF,CF 001b CAS EQUAL: ZF,PF,CF 100b FIN EVALUER CAS OF,AF,SF 0

Mnmonique
Instruction Opcode Description Cette instruction permet de comparer deux valeurs rel de double-prcision dans la partie faible du quadruple mot de deux oprande et fixe les drapeaux de ZF, PF et FC du

COMISD xmm1,xmm2/m64

66h 0Fh 2Fh /r

142

registre EFLAGS en fonction du rsultat (non-ordonne, suprieur , infrieur ou gal).

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 239 241.

143

Assembleur 80x86
INTEL Pentium III+

COMISS
Compare Scalar Ordered Single-Precision Floating-Point Values and Set EFLAGS

Syntaxe
COMISS destination,source

Description Cette instruction permet de comparer deux valeurs rel de simple-prcision dans la partie faible du quadruple mot de deux oprande et fixe les drapeaux de ZF, PF et FC du registre EFLAGS en fonction du rsultat (non-ordonne, suprieur , infrieur ou gal).

Algorithme
EVALUER CAS (OrderedCompare(destination(31..0) <> source(31..0))) DE CAS UNORDERED: ZF,PF,CF 111b CAS GREATER_THAN: ZF,PF,CF 000b CAS LESS_THAN: ZF,PF,CF 001b CAS EQUAL: ZF,PF,CF 100b FIN EVALUER CAS OF,AF,SF 0

Mnmonique
Instruction COMISS xmm1,xmm2/m32 Opcode 0Fh 2Fh /r Description Cette instruction permet de comparer deux valeurs rel de simple-prcision dans la partie faible du quadruple mot de deux oprande et fixe les drapeaux de ZF, PF et FC du

144

registre EFLAGS en fonction du rsultat (non-ordonne, suprieur , infrieur ou gal).

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 242 244.

145

Assembleur 80x86 INTEL Pentium

CPUID Central Processor Unit IDentificator

Syntaxe CPUID

Description

Cette instruction retourne le code d'identification du microprocesseur dans les 4 registres suivants: EAX, EBX, ECX, EDX. Tout d'abord, si EAX = 0 lors de l'appel alors EAX retourne le nombre maximal d'entre d'EAX et EBX:EDX:ECX retourne la chane de caractres "GenuineIntel" si s'est un microprocesseur du fabricant INTEL (soit EBX = "Genu", EDX = "ineI", ECX = "ntel"). Si EAX = 1 lors de l'appel alors EAX contient le drapeau de fourniture fixe si les instructions CMPXCHG8B, CMOV, FCMOV, FCMOVB sont supporte. Le bit 23 est fixe si les instructions MMX sont supports. Si EAX = 2 lors de l'appel alors les 4 registres: EAX, EBX, ECX et EDX contient les informations concernant le cache et les TLBs (Translation Lookahead Buffers).

Algorithme VALUER EAX CAS 0: EAX hv EBX chane de caractres d'identification du fabricant : Intel: 756E6547h ("Genu") AMD: 68747541h ("Auth") Cyrix: 69727943h ("Cyri") EDX chane de caractres d'identification du fabricant : Intel: 49656E69h ("ineI") AMD: 69746E65h ("enti") Cyrix: 736E4978h ("xIns") ECX chane de caractres d'identification du fabricant : Intel: 6C65746Eh ("ntel") AMD: 444D4163h ("cAMD") Cyrix: 64616574h ("tead")

146

CAS 1: EAX*0 3+ Identification de niveau SI Intel ou AMD ALORS EAX*4 7+ Modle EAX*8 11+ Famille EAX*12 31+ rserve SINON Cyrix ALORS EAX*8 15+ 6 FIN SI EBX 0 ECX Drapeau de fourniture supplmentaire : Bit*13+ Instruction CMPXCHG16B support? Bit*27+ Instruction OSXSAVE (XGETBV, XRSTOR, XSAVE, XSETBV) support? EDX Drapeau de fourniture: Bit*0+ FPU: Coprocesseur mathmatique prsent Bit*1+ CYRIX: VME: Supporte le mode Virtuel 8086 Bit*2+ DE: Point d'arrt aux Entres/Sorties Bit*3+ CYRIX: PSE: Extension de taille de page Bit*4+ TSC: Compteur "Time Stamp" Bit*5+ MSR: CPU de style Pentium Bit*6+ CYRIX: PTE: Extension d'adresse physique, INTEL: PAE: Extension d'adresse physique Bit*7+ MCE: Vrification d'exception machine Bit*8+ CX8: CMPXCHG8B supporte? Bit*9+ CYRIX: APIC Bit*11+ SEP: Fourniture de d'appel rapide systme (Pentium Pro+) Bit*12+ MTRR: CYRIX: Type de registres de rang mmoire Bit*13+ PGE: Bit global PTE Bit*14+ CYRIX: MCA: Vrification de l'architecture machine support? Bit*15+ CMOV: Les instructions CMOV, FCMOV,... sont supports? Bit*16+ PAT: Table d'attribut de page Bit*17+ PSE36: Microprocesseur support des pages de 4 Mo pour l'accs la haute mmoire 2 Go Bit*18+ SN: Support le numro de srie du microprocesseur Bit*19+ Instruction CLFLUSH support? Bit*23+ MMX: Instruction MMX support? Bit*24+ FXSR: Sauvegarde/restauration rapide du microprocesseur (IA MMX-2) Bit*25+ SIMD: Extension de flux SIMD (IA MMX-2) Bit[26+ SSE2: Instruction LFENCE, MFENCE et MOVNTI support? CAS 2: SI (Pentium III ou plus) ou (Cyrix MediaGX MMX Enhanced) ALORS 147

EAX, EBX, ECX, EDX Les 4 type de cache de l'architecture du microprocesseur: 00h: Aucun 01h: Instruction TLB, 4 Ko par page, 4 routes, 64 entres 02h: Instruction TLB, 4 Mo par page, 4 routes, 4 entres 03h: Donne TLB, 4 Ko par page, 4 routes, 64 entres 04h: Donne TLB, 4 Mo par page, 4 routes, 8 entres 06h: Cache d'instruction, 8 Ko, 4 routes, 32 octets par ligne 08h: Cache d'instruction, 16 Ko, 4 routes, 32 octets par ligne 0Ah: Cache d'instruction, 8 Ko, 2 routes, 32 octets par ligne 0Ch: Cache d'instruction, 16 Ko, 2 routes, 32 octets par ligne 40h: Pas de cache L2 41h: Cache L2 unifi, 32 octets par ligne, 4 routes, 128 Ko 42h: Cache L2 unifi, 32 octets par ligne, 4 routes, 256 Ko 43h: Cache L2 unifi, 32 octets par ligne, 4 routes, 512 Ko 44h: Cache L2 unifi, 32 octets par ligne, 4 routes, 1 Mo 45h: Cache L2 unifi, 32 octets par ligne, 4 routes, 2 Mo SI Cyrix MediaGX MMX Enhanced ALORS 70h: Entre 32 bits TLB, 4 routes, Cache de 4 Ko 80h: Cache de 4 routes associative L1, 16 octets par ligne FIN SI SINON EAX non-dfini EBX non-dfini ECX non-dfini EDX non-dfini FIN SI CAS 3: SI (Pentium III ou plus) ALORS EDX:ECX Partie basse de 64 bits du numro de srie de 96 bits du microprocesseur SINON EAX non-dfini EBX non-dfini ECX non-dfini EDX non-dfini FIN SI CAS 80000000h: SI (AMD K5 sauf SSA/5, AMD K6 ou Cyrix GXm) ou (Pentium 4 ou plus) ALORS EAX Valeur maximal de la fonction contenu dans le registre EAX reconnu par l'instruction CPUID (Exemple AMD 5k86 (K5) = 80000005h) SINON EAX non-dfini 148

FIN SI EBX non-dfini ECX non-dfini EDX non-dfini CAS 80000001h: SI (AMD K5, AMD K6, Cyrix GXm ou IDT Winchip 2) ALORS EAX Signature du microprocesseur AMD 0000051Xh: AMD 5k86 (K5 sauf SSA/5) 0000066Xh: AMD 6k86 (K6) EDX Drapeaux des fournitures tendues: Bit*0+ FPU: Coprocesseur arithmtique include dans la puce du microprocesseur Bit*1+ VME: Extension de mode Virtual prsent Bit*2+ DE: Extensions de dboguage Bit*3+ PSE: CPU support la tailles de pages de 4 Mo Bit*4+ TSC: TSC prsent (Voir l'instruction RDTSC) Bit*5+ MSR: CPU est compatible MSR du K5 ou compatibilit MSR du Cyrix Bit*6+ PAE: Extensions de page d'adresse Bit*7+ MCE: Vrification d'exception machine Bit*8+ CX8: Support l'instruction CMPXCHG8B Bit*9+ APIC: CPU a un APIC local (doit tre activ) Bit*10+ Rserv Bit*11+ Instruction SYSCALL et SYSRET Bit*12+ MTRR: Registres de type de rang mmoire (Memory Type Range Registers) Bit*13+ Extensions de pagination global (PTE-PGE) Bit*14+ MCA: Architecture de vrification machine Bit*15+ CMOV: Le CPU support les instructions CMOV Bit*16+ FCMOV: Le CPU support les instructions FCMOV Bit*17+ PSE: Extension de taille de Page Bit*21..18+ Rserv Bit*22+ MMXE: CPU Support les extensions d'instructions MMX (AMD Athlon) Bit*23+ MMX: CPU support IA MMX Bit*24+ (Cyrix) Cyrix supporte l'extension MMX Bit*24+ (AMD) Support les instructions FXSAVE/FXRSTOR Bit*29..25+ Rserv Bit*30+ CPU support les instructions tendue 3DNow! Bit*31+ Support l'AMD 3DNow! SINON EAX non-dfini EDX non-dfini FIN SI EBX non-dfini 149

ECX Drapeau de fourniture supplmentaire: Bit*0+ Instruction LAHF est support en mode 64 bits? Bit*2+ Les instructions SVM (CLGI,...) sont supports? Bit*5+ Instruction LZCNT support? Bit*8+ Instruction PREFETCH du 3DNow! Prefetch support? CAS 80000002h,80000003h,80000004h: SI (AMD K5, AMD K6 ou Cyrix GXm) ALORS EAX, EBX, ECX, EDX Nom du CPU sous forme d'une chaine de caractres (si AMD K5, en format BIG-Endian) SINON EAX non-dfini EBX non-dfini ECX non-dfini EDX non-dfini FIN SI CAS 80000008h: EAX Demande des informations sur la taille des adresses et le compteur de coeur physique: Bit*23..16+ Demande la taille maximal physique invit d'octets en bits Bit*15..8+ Demande la taille maximal linaire d'une adresse d'octets en bits Bit*7..0+ Demande la taille maximal physique d'octets en bits ECX NC: Demande le nombre de coeur que comprendre le microprocesseur - 1. AUTREMENT: EAX non-dfini EBX non-dfini ECX non-dfini EDX non-dfini FIN VALUER

Remarque

Voici la table des fournitures standard retourner par le registre EAX=1 de l'instruction CPUID en fonction des diffrents fabricants:
C C C Regi N y yr y stre o ri ix ri EDX m x 6 x 6 x G Cy rix 6x 86 M C y ri x M C y ri x G A M D C A M D C A M D K A A A A M M M M D D D D K K At K 6 6 hl IN TE L Pe nti IN TE L Pe nti IN TE L Pe nti IN TE L Pe nti IN TE L Pe nti IN TE L Pe nti

150

x 8 8 6 6 L

X X

II X 6 2 5 6 - - o m 2 III n

u m

u m M M X

u m Pr o

u m II

u m III

u m Cel er on

Bit[0 FP + + ] U V Bit[1 M ] E Bit[2 D ] E

+ +

+ + + + + + + + +

+ + + + +

+ -

+ + + + + + +

Bit[3 PS ] E Bit[4 TS ] C M Bit[5 S ] R P Bit[6 A ] E

+ + + + +

+ + + + + + + + +

+ + + + + + + + +

M Bit[7 C ] E C Bit[8 X ] 8

+ + + + + + +

+ + + + + + + + +

Bit[9

A PI

(1) (1) (1) (1) (1) (1)

151

Bit[1 re 0] s Bit[1 SE 1] P M Bit[1 T R 2] R P Bit[1 G 3] E

+ -

M Bit[1 C 4] A C Bit[1 M O 5] V P Bit[1 A 6] T

+ + -

(2) +

PS Bit[1 E3 7] 6 Bit[1 S 8] N

(2) +

Bit[2 M 3] M

+ + + + -

+ + + +

152

X FX Bit[2 S 4] R SI Bit[2 M 5] D

(2) +

(1) = Intel produit des puces avec APIC et sans APIC. (2) = Il commence supporter les coeurs Deschutes

Mnmonique
Instruction CPUID Opcode 0Fh A2h Description Retourne les informations propos du microprocesseur et sa compatiblit. Le registre EAX correspond un numro de fonction et les donnes sont retournes dans les registres EAX, EBX, ECX et EDX.

Exceptions Aucune

Exemple Cet exemple permet de tester la prsence de l'instruction CMPXCHG16B avant de l'utiliser :
1. 2. 3. MOV EAX,1 CPUID BT ECX, 13 ; CPUID.1:ECX.CMPXCHG16B[bit 13] = 1: Estce que le CMPXCHG16B est disponible et actif pour l'utilisation d'application ? 4. JNC @not_supported 5. ; Mettre quelques instructions avant ici 153

6. 7. 8. 9.

; ... CMPXCHG16B OWord Ptr [RAX] ; Mettre quelques instructions aprs ici ; ... 10. @not_supported:

Rfrences
AMD CPUID Specification, Edition Advanced Micro Devices, Revision 2.28, April 2008, Publication No. 25481. 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 103 104. The Undocumented PC: A programmer's Guide to I/O, CPUs, and Fixed Memory Areas - Second Edition, Edition Addison-Wesley, Frank van Gilluwe, 1997, ISBN: 0-201-47950-8, page 64 67. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 245 279.

154

Assembleur 80x86 x86-64+

CQO Convert Quadword to Octoword

Syntaxe
CQO

Description Cette instruction permet de convertir le quadruple mot du registre EAX en deux quadruple mot RDX:RAX, le rsultat tient sur une taille de 128 bits.

Algorithme
RDX:RAX extension des signes de RAX

Mnmonique
Instruction CQO Opcode 99h Description tendre les signes de EAX dans RAX

Exceptions Aucune

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 349 350.

155

Assembleur 80x86
Nehalem (SSE4.2)+

CRC32
Accumulate CRC32 Value

Syntaxe
CRC32 dest,source

Description Cette instruction dbute avec une valeur initiale dans l'oprande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'oprande source et enregistre le rsultat dans l'oprande de destination.

Algorithme
MODULE BIT_REFLECT64 dest(63..0) source(0..63) MODULEMODULE BIT_REFLECT32 dest(31..0) source(0..31) MODULE BIT_REFLECT16 dest(15..0) source(0..15) MODULE BIT_REFLECT8 dest(7..0) source(0..7) SI taille de l'oprande source = 64 bits ET taille de l'oprande de destination = 64 bits ALORS TEMP1(63..0) BIT_REFLECT64 (source(63..0)) TEMP2(31..0) BIT_REFLECT32 (dest(31..0)) TEMP3(95..0) TEMP1(63..0) << 32 TEMP4(95..0) TEMP2(31..0) << 64 TEMP5(95..0) TEMP3(95..0) XOR TEMP4(95..0) TEMP6(31..0) TEMP5(95..0) MOD2 11EDC6F41h DEST(31..0) BIT_REFLECT (TEMP6(31..0)) 156

DEST(63..32) 00000000h SINON SI taille de l'oprande source = 32 bits ET taille de l'oprande de destination = 32 bits ALORS TEMP1(31..0) BIT_REFLECT32 (source(31..0)) TEMP2(31..0) BIT_REFLECT32 (dest(31..0)) TEMP3(63..0) TEMP1(31..0) << 32 TEMP4(63..0) TEMP2(31..0) << 32 TEMP5(63..0) TEMP3(63..0) XOR TEMP4(63..0) TEMP6(31..0) TEMP5(63..0) MOD2 11EDC6F41h DEST(31..0) BIT_REFLECT (TEMP6(31..0)) SINON SI taille de l'oprande source = 16 bits ET taille de l'oprande de destination = 32 bits ALORS TEMP1[15-0+ BIT_REFLECT16 (source(15..0)) TEMP2[31-0+ BIT_REFLECT32 (dest(31..0)) TEMP3[47-0+ TEMP1(15..0) << 32 TEMP4[47-0] TEMP2(31..0) << 16 TEMP5[47-0+ TEMP3(47..0) XOR TEMP4(47..0) TEMP6[31-0+ TEMP5(47..0) MOD2 11EDC6F41h DEST[31-0+ BIT_REFLECT (TEMP6(31..0)) SINON SI taille de l'oprande source = 8 bits ET taille de l'oprande de destination = 64 bits ALORS TEMP1[7-0+ BIT_REFLECT8(source(7..0)) TEMP2[31-0+ BIT_REFLECT32 (dest(31..0)) TEMP3[39-0+ TEMP1(7..0) << 32 TEMP4[39-0+ TEMP2(31..0) << 8 TEMP5[39-0+ TEMP3(39..0) XOR TEMP4(39..0) TEMP6[31-0+ TEMP5(39..0) MOD2 11EDC6F41h DEST[31-0+ BIT_REFLECT (TEMP6(31..0)) DEST[63-32+ 00000000h SINON SI taille de l'oprande source = 8 bits ET taille de l'oprande de destination = 32 bits ALORS TEMP1[7-0+ BIT_REFLECT8(source(7..0)) TEMP2[31-0+ BIT_REFLECT32 (dest(31..0)) TEMP3[39-0+ TEMP1(7..0) << 32 TEMP4[39-0+ TEMP2(31..0) << 8 TEMP5[39-0+ TEMP3(39..0) XOR TEMP4(39..0) TEMP6[31-0+ TEMP5(39..0) MOD2 11EDC6F41h DEST[31-0+ BIT_REFLECT (TEMP6(31..0)) FIN SI

157

Mnmonique
Instruction Opcode Description Cette instruction dbute avec une valeur initiale dans l'oprande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'oprande source et enregistre le rsultat dans l'oprande de destination. Cette instruction dbute avec une valeur initiale dans l'oprande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'oprande source et enregistre le rsultat dans l'oprande de destination. Cette instruction dbute avec une valeur initiale dans l'oprande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'oprande source et enregistre le rsultat dans l'oprande de destination. Cette instruction dbute avec une valeur initiale dans l'oprande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'oprande source et enregistre le rsultat dans l'oprande de destination.

CRC32 r32, r/m8

F2h 0Fh 38h F0h /r

CRC32 r32, r/m8

F2h REX 0Fh 38h F0h /r

CRC32 r32, r/m16

F2h 0Fh 38h F1h /r

CRC32 r32, r/m32

F2h 0Fh 38h F1h /r

CRC32 r64, r/m8

Cette instruction dbute avec une F2h REX.W 0Fh 38h F0h /r valeur initiale dans l'oprande de destination, accumule une valeur de code CRC-32 (polynomial de 158

11EDC6F41h) dans l'oprande source et enregistre le rsultat dans l'oprande de destination. Cette instruction dbute avec une valeur initiale dans l'oprande de destination, accumule une valeur F2h REX.W 0Fh 38h F1h /r de code CRC-32 (polynomial de 11EDC6F41h) dans l'oprande source et enregistre le rsultat dans l'oprande de destination.

CRC32 r64, r/m64

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 280 283.

159

Assembleur 80x86
INTEL Pentium 4+

CVTDQ2PD
Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values

Syntaxe
CVTDQ2PD dest,source

Description Cette instruction permet d'effectuer la conversion d'un paquet de double mot entier en valeurs rel de double prcision.

Algorithme
dest(0..63) ConvertIntegerToDouble(source(0..31)) dest(64..127) ConvertIntegerToDouble(source(32..63))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'un paquet de double mot entier en valeurs rel de double prcision.

CVTDQ2PD xmm1, xmm2/m64

F3h 0Fh E6h

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 284 285.

160

Assembleur 80x86
INTEL Pentium 4+

CVTDQ2PS
Convert Packed Doubleword Integers to Packed Single-Precision Floating-Point Values

Syntaxe
CVTDQ2PS dest,source

Description Cette instruction permet d'effectuer la conversion d'un paquet de double mot entier en valeurs rel de simple prcision.

Algorithme
dest(0..31) ConvertIntegerToFloat(source(0..31)) dest(32..63) ConvertIntegerToFloat(source(32..63)) dest(64..95) ConvertIntegerToFloat(source(64..95)) dest(96..127) ConvertIntegerToFloat(source(96..127))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'un paquet de double mot entier en valeurs rel de simple prcision.

CVTDQ2PS xmm1, xmm2/m128 0Fh 5Bh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 286 288.

161

Assembleur 80x86
INTEL Pentium 4+

CVTPD2DQ
Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers

Syntaxe
CVTPD2DQ dest,source

Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de double prcision en double mot entier et fixe 0 le reste du paquet.

Algorithme
dest(0..31) ConvertDoubleToInteger(Source(0..63)) dest(32..63) ConvertDoubleToInteger(Source(64..127)) dest(64..127) 0

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de double prcision en double mot entier et fixe 0 le reste du paquet.

CVTPD2DQ xmm1, xmm2/m128 F2h 0Fh E6h

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 289 291.

162

Assembleur 80x86
INTEL Pentium 4+

CVTPD2PI
Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers

Syntaxe
CVTPD2PI dest,source

Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de double prcision en double mot entier.

Algorithme
dest(0..31) ConvertDoubleToInteger(Source(0..63)) dest(32..63) ConvertDoubleToInteger(Source(64..127))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de double prcision en double mot entier.

CVTPD2PI mm, xmm/m128

66h 0Fh 2Dh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 292 294.

163

Assembleur 80x86
INTEL Pentium 4+

CVTPD2PS
Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision FloatingPoint Values

Syntaxe
CVTPD2PS dest,source

Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de double prcision en valeurs rel de simple prcision et fixe 0 le reste du paquet.

Algorithme
dest(0..31) ConvertDoubleToFloat(Source(0..63)) dest(32..63) ConvertDoubleToFloat(Source(64..127)) dest(64..127) 0

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de double prcision en valeurs rel de simple prcision et fixe 0 le reste du paquet.

CVTPD2PS xmm1, xmm2/m128 66h 0Fh 5Ah /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 295 297.

164

Assembleur 80x86
INTEL Pentium 4+

CVTPI2PD
Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision FloatingPoint Values

Syntaxe
CVTPI2PD dest,source

Description Cette instruction permet d'effectuer la conversion d'un paquet de double mot entier en valeurs rel de double prcision compact.

Algorithme
dest(0..63) ConvertIntegerToDouble(source(0..31)) dest(64..127) ConvertIntegerToDouble(source(32..63))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'un paquet de double mot entier en valeurs rel de double prcision compact.

CVTPI2PD xmm, mm/m64

66h 0Fh 2Ah /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 297 300.

165

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

CVTPI2PS
Convert Packed Integer to Packed Single

Syntaxe
CVTPI2PS dest,source

Description Cette instruction permet de convertir un entier de format double mot en une valeur rel de simple prcision compact.

Algorithme
dest(31..0) (rel) source(31..0) dest(63..32) (rel) source(63..32)

Mnmonique
Instruction Opcode Description Cette instruction permet de convertir un entier de format double mot en une valeur rel de simple prcision compact.

CVTPI2PS xmm,mm/m64

0Fh 2Ah /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 301 302.

166

Assembleur 80x86
INTEL Pentium 4+

CVTPS2DQ
Convert Packed Single-Precision Floating-Point Values to Packed Doubleword Integers

Syntaxe
CVTPS2DQ dest,source

Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de simple prcision en paquet de double mots entiers.

Algorithme
dest(0..31) ConvertFloatToInteger(source(0..31)) dest(32..63) ConvertFloatToInteger(source(32..63)) dest(64..95) ConvertFloatToInteger(source(64..95)) dest(96..127) ConvertFloatToInteger(source(96..127))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de simple prcision en paquet de double mots entiers.

CVTPS2DQ xmm1, xmm2/m128 66h 0Fh 5Bh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 303 306.

167

Assembleur 80x86
INTEL Pentium 4+

CVTPS2PD
Convert Packed Single-Precision Floating-Point Values to Packed Double-Precision FloatingPoint Values

Syntaxe
CVTPS2PD dest,source

Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de simple prcision en paquet de valeurs rel de double prcision.

Algorithme
dest(0..63) ConvertFloatToDouble(source(0..31)) dest(64..127) ConvertFloatToDouble(source(32..63))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'un paquet de valeurs rel de simple prcision en paquet de valeurs rel de double prcision.

CVTPS2PD xmm1, xmm2/m64

0Fh 5Ah /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 307 309.

168

Assembleur 80x86
INTEL Pentium III+ (KNI/MMX2)+

CVTPS2PI
Convert Packed Single to Packed Integer

Syntaxe
CVTPS2PI dest,source

Description Cette instruction permet de convertir une valeur rel de simple prcision compact en un entier de format double mot.

Algorithme
dest(31..0) (entier) source(31..0) dest(63..32) (entier) source(63..32)

Mnmonique
Instruction
CVTPS2PI mm,xmm/m64

Opcode
0Fh 2Dh /r

Description
Cette instruction permet de convertir une valeur rel de simple prcision compact en un entier de format double mot.

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 310 312.

169

Assembleur 80x86
INTEL Pentium 4+

CVTSD2SI
Convert Scalar Double-Precision Floating-Point Value to Doubleword Integer

Syntaxe
CVTSD2SI dest,source

Description Cette instruction permet d'effectuer la conversion d'une valeur rel de simple prcision en valeur entier de double mots.

Algorithme
dest(0..31) ConvertDoubleToInteger(source(0..63))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la conversion d'une valeur rel de simple prcision en valeur entier de double mots.

CVTSD2SI r32, xmm/m64

F2h 0Fh 2Dh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 313 315.

170

Assembleur 80x86
INTEL Pentium 4+

CVTSD2SS
Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value

Syntaxe
CVTSD2SS dest,source

Description Cette instruction permet d'effectuer la conversion d'une valeur rel de double prcision en valeur rel de simple prcision.

Algorithme
dest(0..31) ConvertDoubleToFloat(source(0..63))

Mnmonique
Instruction Opcode Description
Cette instruction permet d'effectuer la conversion d'une valeur rel de double prcision en valeur rel de simple prcision.

CVTSD2SS xmm1, xmm2/m64

F2h 0Fh 5Ah /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, AM, Edition Intel, Mars 2010, Publication No. 253666-034US, page 316 318.

171

Assembleur 80x86
INTEL Pentium 4+

CVTSI2SD
Convert Doubleword Integer to Scalar DoublePrecision Floating-Point Value

Syntaxe
CVTSI2SD dest,source

Description Cette instruction permet de convertir un entier de format double mot en une valeur rel de double prcision.

Algorithme
dest(0..63) ConvertIntegerToDouble(source(0..31))

Mnmonique
Instruction CVTSI2SD xmm, r/m32 Opcode F2h 0Fh 2Ah /r Description Cette instruction permet de convertir un entier de format double mot en une valeur rel de double prcision.

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 319 321.

172

Assembleur 80x86
INTEL Pentium III+ (KNI/MMX2)

CVTSI2SS
Convert Doubleword Integer to Scalar SinglePrecision Floating-Point Value

Syntaxe
CVTSI2SS dest,source

Description Cette instruction permet de convertir un entier de format double mot en une valeur rel de simple prcision.

Algorithme
dest(31..0) (rel) source(31..0)

Mnmonique
Instruction CVTSI2SS xmm,r/m32 Opcode F3h 0Fh 2Ah /r Description Cette instruction permet de convertir un entier de format double mot en une valeur rel de simple prcision.

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 322 324.

173

Assembleur 80x86
INTEL Pentium 4+

CVTSS2SD
Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value

Syntaxe
CVTSS2SD dest,source

Description Cette instruction permet de convertir une valeur rel de simple prcision en une valeur rel de double prcision.

Algorithme
dest(0..63) ConvertFloatToDouble(source(0..31))

Mnmonique
Instruction Opcode Description Cette instruction permet de convertir une valeur rel de simple prcision en une valeur rel de double prcision.

CVTSS2SD xmm1, xmm2/m32

F3h 0Fh 5Ah /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 325 327.

174

Assembleur 80x86
INTEL Pentium III+ (KNI/MMX2)

CVTSS2SI
Convert Single-Precision Floating-Point to Scalar Integer

Syntaxe
CVTSS2SI dest,source

Description Cette instruction permet de convertir une valeur rel de simple prcision en un entier de format double mot.

Algorithme
dest(31..0) (entier) source(31..0)

Mnmonique
Instruction CVTSS2SI r32,xmm/m32 Opcode F3h 0Fh 2Dh /r Description Cette instruction permet de convertir une valeur rel de simple prcision en un entier de format double mot.

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 328 330.

175

Assembleur 80x86
INTEL Pentium 4+

CVTTPD2DQ
Convert with Truncation Packed DoublePrecision Floating-Point Values to Packed Doubleword Integers

Syntaxe
CVTTPD2DQ dest,source

Description Cette instruction permet de convertir un paquet de valeur rel de double prcision avec en un paquet d'entier de format double mot tronquer et fixe 0 le reste du paquet.

Algorithme
dest(0..31) ConvertDoubleToIntegerTruncate(source(0..63)) dest(32..63) ConvertDoubleToIntegerTruncate(source(64..127)) dest(64..127) 0

Mnmonique
Instruction Opcode Description
Cette instruction permet de convertir un paquet de valeur rel de double prcision avec en un paquet d'entier de format double mot tronquer et fixe 0 le reste du paquet.

CVTTPD2DQ xmm1, xmm2/m128

66h 0Fh E6h /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 331 333.

176

Assembleur 80x86
INTEL Pentium 4+

CVTTPD2PI
Convert with Truncation Packed DoublePrecision Floating-Point Values to Packed Doubleword Integers

Syntaxe
CVTTPD2PI dest,source

Description Cette instruction permet de convertir une valeur rel de double prcision compact avec tronquage en un entier de format double mot compact.

Algorithme
dest(0..31) ConvertDoubleToIntegerTruncate(source(0..63)) dest(32..63) ConvertDoubleToIntegerTruncate(source(64..127))

Mnmonique
Instruction Opcode Description Cette instruction permet de convertir une valeur rel de double prcision compact avec tronquage en un entier de format double mot compact.

CVTTPD2PI mm, xmm/m128

66h 0Fh 2Ch /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 334 336.

177

Assembleur 80x86
INTEL Pentium 4+

CVTTPS2DQ
Convert with Truncation Packed SinglePrecision Floating-Point Values to Packed Doubleword Integers

Syntaxe
CVTTPS2DQ dest,source

Description Cette instruction permet de convertir un paquet de valeur rel de simple prcision avec en un paquet d'entier de format double mot tronquer.

Algorithme
dest(0..31) ConvertFloatToIntegerTruncate(source(0..31)) dest(32..63) ConvertFloatToIntegerTruncate(source(32..63)) dest(64..95) ConvertFloatToIntegerTruncate(source(64..95)) dest(96..127) ConvertFloatToIntegerTruncate(source(96..127))

Mnmonique
Instruction Opcode Description Cette instruction permet de convertir un paquet de valeur rel de simple prcision avec en un paquet d'entier de format double mot tronquer.

CVTTPS2DQ xmm1, xmm2/m128 F3h 0Fh 5Bh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 337 339.

178

Assembleur 80x86
INTEL Pentium III+ (KNI/MMX2)+

CVTTPS2PI
Convert Packed Single with truncation to Packed Integer

Syntaxe
CVTTPS2PI dest,source

Description Cette instruction permet de convertir une valeur rel de simple prcision compact avec tronquage en un entier de format double mot compact.

Algorithme
dest(31..0) (entier) source(31..0) dest(63..32) (entier) source(63..32)

Mnmonique
Instruction Opcode Description Cette instruction permet de convertir une valeur rel de simple prcision compact avec tronquage en un entier de format double mot compact.

CVTTPS2PI mm,xmm/m64

0Fh 2Ch /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 340 342.

179

Assembleur 80x86
INTEL Pentium 4+

CVTTSD2SI
Convert with Truncation Scalar DoublePrecision Floating-Point Value to Signed Doubleword Integer

Syntaxe
CVTTSD2SI dest,source

Description Cette instruction permet de convertir une valeur rel de double prcision avec en un entier de format double mot tronquer.

Algorithme
dest(0..31) ConvertDoubleToIntegerTruncate(source(0..63))

Mnmonique
Instruction Opcode Description Cette instruction permet de convertir une valeur rel de double prcision avec en un entier de format double mot tronquer.

CVTTSD2SI r32, xmm/m64

F2h 0Fh 2Ch /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 343 345.

180

Assembleur 80x86
INTEL Pentium III+ (KNI/MMX2)

CVTTSS2SI
Convert Single-Precision Floating-Point with truncation to Scalar Integer

Syntaxe
CVTTSS2SI dest,source

Description Cette instruction permet de convertir un entier de format double mot avec tronquage en une valeur rel de simple prcision.

Algorithme
dest(31..0) (entier) source(31..0)

Mnmonique
Instruction Opcode Description Cette instruction permet de convertir un entier de format double mot avec tronquage en une valeur rel de simple prcision.

CVTTSS2SI r32,xmm/m32

F3h 0Fh 2Ch /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 345 348.

181

Assembleur 80x86 INTEL 8088+

CWD Convert Word to Double word

Syntaxe
CWD

Description Cette instruction est l'alternative pour convertir le mot du registre AX en un double mot contenu dans le couple de registre DX et AX par extension du signe. Le bit de signe du registre AX est recopi dans les 16 bits du registre DX. En somme, cette commande ne prsente un intrt particulier que lorsque l'on manipule des valeurs binaires signes tant donn que le signe du registre AX est conserv dans le double mot du couple de registre DX:AX.

Algorithme
SI AX < 8000h ALORS DX 00000h FIN SI SI AX >= 8000h ALORS DX 0FFFFh FIN SI

Mnmonique
Instruction CWD Opcode 99h Description tendre les signes de AX dans DX:AX

Exceptions Aucune

182

Voir galement Instruction assembleur 80x86 - Instruction CBW Instruction assembleur 80x86 - Instruction CWDE Instruction assembleur 80x86 - Instruction CDQ

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 809 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 404 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 85. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 349 350.

183

Assembleur 80x86 INTEL 80386+

CWDE Convert WorD to Extended (double word)

Syntaxe
CWDE

Description S'appuyant sur la technique utilis par son frre CWD, l'instruction CWDE permet de convertir le mot se trouvant dans AX en un double mot, le rsultat tant plac dans le registre 32 bits EAX. Les 16 bits de poids forts du registre EAX sont positionns la valeur du bit de poids le plus fort du registre AX.

Algorithme
SI EAX < 8000h ALORS EAX EAX 00000FFFFh FIN SI SI EAX >= 8000h ALORS EAX EAX U 0FFFF0000h FIN SI

Mnmonique
Instruction CWDE Opcode 66h 98h Description tendre les signes de AX dans EAX

Exceptions Aucune

184

Voir galement Instruction assembleur 80x86 - Instruction CWD Instruction assembleur 80x86 - Instruction CBW Instruction assembleur 80x86 - Instruction CDQ

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 187 188.

185

Assembleur 80x86 INTEL 8088+

DAA Decimal Adjust for Addition

Syntaxe
DAA

Description Cette instruction corrige aprs coup les retenues lors de la manipulation de valeur DCB. Pour y parvenir, la commande convertit le contenu dans le registre AL en une valeur DCB compacte (mme chose dans le registre AL).

Algorithme
SI ( ( AL 0Fh ) > 9 U AF = 1 ) ALORS AL AL + 6 drapeau AF 1 SINON drapeau AF 0 SI ( ( AL > 9Fh) U CF = 1 ) ALORS AL AL + 60h drapeau CF 1 SINON drapeau CF 0 FIN SI FIN SI

Mnmonique
Instruction Opcode Description Ajuste les dcimal du registre AL (invalide en mode 64 bits)

DAA

27h

186

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Cette instruction est excut en mode 64-bits

#UD(Opcode invalide)

Voir galement Instruction assembleur 80x86 - Instruction DAS

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 810 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 105. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 351 352.

187

Assembleur 80x86 INTEL 8088+

DAS Decimal Adjust AL After Soustraction

Syntaxe
DAS

Description Cette instruction offre l'intressante possibilit de corrige le rsultat d'une soustraction de 2 nombres de format DCB compactes. tant donn que le microprocesseur soustrait ces valeurs comme s'il s'agissait de chiffres normales, des dbordements se produisent dans les rsultats. La commande DAS convertit le rsultat de la soustraction de 2 valeurs DCB compactes en une valeur de format DCB compacte.

Algorithme
SI ( AF = 1 ) U ( AL 0Fh ) > 9 ALORS AL AL - 6 drapeau AF 1 SINON drapeau AF 0 FIN SI SI ( CF = 1 ) U ( AL > 9Fh ) ALORS AL AL - 60h drapeau CF 1 SINON drapeau CF 0 FIN SI

Mnmonique
Instruction DAS Opcode 2Fh Description Ajuste les dcimal du registre AL aprs soustraction (invalide en mode 188

64 bits)

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Cette instruction est excut en mode 64-bits

#UD(Opcode invalide)

Voir galement Instruction assembleur 80x86 - Instruction DAA

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 810 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 106. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 353 354.

189

Assembleur 80x86 INTEL 8088+

DEC Decrement

Syntaxe
DEC oprande

Description Cette instruction est un quelque sorte un raccourci de l'instruction SUB, en effet celle-ci dcrment de 1 le registre ou l'adresse mmoire spcifi, le rsultat obtenu est donc identique celui d'un SUB avec 1 comme 2ime oprande.

Algorithme
oprande oprande - 1

Mnmonique
Instruction Opcode Description Dcrmente de 1 le contenu d'un emplacement de registre ou mmoire 8 bits Dcrmente de 1 le contenu d'un emplacement de registre ou mmoire 16 bits Dcrmente de 1 le contenu d'un emplacement de registre ou mmoire 32 bits Dcrmente de 1 le contenu d'un emplacement de registre ou mmoire

DEC reg/mem8

FEh /1

DEC reg/mem16

FFh /1

DEC reg/mem32

FFh /1

DEC reg/mem64

FFh /1

190

64 bits Dcrmente de 1 le contenu d'un registre 16 bits Dcrmente de 1 le contenu d'un registre 32 bits

DEC reg16

(48h + rw)

DEC reg32

(48h +rd)

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est

#SS(Pile noncanonique)

#GP(Protection gnral)

191

utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction INC Instruction assembleur 80x86 - Instruction SUB

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 810 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 404 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 107 108. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 355 357.

192

Assembleur 80x86 INTEL 8088+

DIV Division

Syntaxe
DIV Oprande

Description L'instruction DIV permet d'effectuer une division non-signe (nombre naturel). Le dividende est implicite; il est ajuster en fonction de la taille du diviseur. Le restant est toujours plus petit que le diviseur. Le type de diviseur dtermine quel registre l'instruction utilisera:
Taille Octet Mot Dividende Diviseur AX DX:AX Quotient Restant AH DX EDX

Oprande AL Oprande AX Oprande EAX

Double mot EDX:EAX

Algorithme
SI Oprande = 0 ALORS Interruption 0 SINON SI Oprande 8 bits ALORS AL AX Oprande AH AX MOD Oprande FIN SI SI Oprande 16 bits ALORS AX ( ( DX x 65536 ) + AX ) Oprande DX ( ( DX x 65536 ) + AX ) MOD Oprande FIN SI SI Oprande 32 bits ALORS 193

EAX ( ( EDX x 65536 x 65536 ) + EAX ) Oprande EDX ( ( EDX x 65536 x 65536 ) + EAX ) MOD Oprande FIN SI FIN SI

Mnmonique
Instruction Opcode Description Division naturel de AX par le contenu d'un emplacement mmoire ou registre 8 bits et entrepose le quotient dans AL et restant dans AH. Division naturel de DX:AX par le contenu d'un emplacement mmoire ou registre 16 bits et entrepose le quotient dans AX et restant dans DX. Division naturel de EDX:EAX par le contenu d'un emplacement mmoire ou registre 32 bits et entrepose le quotient dans EAX et restant dans EDX. Division naturel de RDX:RAX par le contenu d'un emplacement mmoire ou registre 64 bits et entrepose le quotient dans RAX et restant dans RDX.

DIV reg/mem8

F6h /6

DIV reg/mem16

F7h /6

DIV reg/mem32

F7h /6

DIV reg/mem64

F7h /6

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description L'oprande de diviseur vaut

#DE(Division par zro) X

194

0. Le quotient est trop large pour le registre dsign. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie

195

l'alignement)

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir galement Instruction assembleur 80x86 - Instruction MUL Instruction assembleur 80x86 - Instruction IDIV

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 810 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 404 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 109. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 358 360.

196

Assembleur 80x86
INTEL Pentium 4+

DIVPD
Divide Packed Double-Precision Floating-Point Values

Syntaxe
DIVPD dest,source

Description Cette instruction permet d'effectuer une division de valeur rel de double prcision de registre XMM ou d'emplacement mmoire de 128 bits.

Algorithme
dest(0..63) dest(0..63) / source(0..63) dest(64..127) dest(64..127) / source(64..127)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une division de valeur rel de double prcision de registre XMM ou d'emplacement mmoire de 128 bits.

DIVPD xmm1, xmm2/m128

66h 0Fh 5Eh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 361 364.

197

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

DIVPS
Packed Single-Precision Floating-Point Divide

Syntaxe
DIVPS dest,source

Description Cette instruction permet d'effectuer une division de valeur rel de simple prcision de registre XMM ou d'emplacement mmoire de 128 bits.

Algorithme
dest(31..0) dest(31..0) / source(31..0) dest(63..32) dest(63..32) / source(63..32) dest(95..64) dest(95..64) / source(95..64) dest(127..96) dest(127..96) / source(127..96)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une division de valeur rel de simple prcision de registre XMM ou d'emplacement mmoire de 128 bits.

DIVPS xmm1,xmm2/m128

0Fh 5Eh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 365 366.

198

Assembleur 80x86
INTEL Pentium 4+

DIVSD
Divide Scalar Double-Precision Floating-Point Values

Syntaxe
DIVSD dest,source

Description Cette instruction permet d'effectuer une division scalaire de valeur rel de double prcision de registre XMM ou d'emplacement mmoire de 128 bits.

Algorithme
dest(0..63) = dest(0..63) / source(0..63)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une division scalaire de valeur rel de double prcision de registre XMM ou d'emplacement mmoire de 128 bits.

DIVSD xmm1, xmm2/m64

F2h 0Fh 5Eh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 367 370.

199

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

DIVSS
Scalar Single-Precision Floating-Point Divide

Syntaxe
DIVSS dest,source

Description Cette instruction permet d'effectuer une division scalaire de valeur rel de simple prcision de registre XMM ou d'emplacement mmoire de 128 bits.

Algorithme
dest(127..0) dest(127..0) / source(127..0)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une division scalaire de valeur rel de simple prcision de registre XMM ou d'emplacement mmoire de 128 bits.

DIVSS xmm1,xmm2/m128

F3h 0Fh 5Eh /r

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 371 372.

200

Assembleur 80x86
SSE4.1

DPPD
Dot Product of Packed Double Precision Floating-Point Values

Syntaxe
DPPD dest,source,immediat

Description Cette instruction permet d'effectuer une multiplication conditionnel d'un paquet de valeurs rel de double prcision dans l'oprande de destination avec le paquet de valeurs rel de l'oprande source et effectue un masque des bits extrait d'un oprande immdiat.

Algorithme
SI immediat(4) = 1 ALORS Temp1(63..0) dest(63..0) x source(63..0) SINON Temp1(63..0) +0,0 FIN SI SI immediat(5) = 1 ALORS Temp1(127..64) dest(127..64) x source(127..64) SINON Temp1(127..64) +0,0 FIN SI Temp2(63..0) Temp1(63..0) + Temp1(127..64) SI immediat(0) = 1 ALORS dest(63..0) Temp2(63..0) SINON dest(63..0) +0,0 FIN SI SI immediat(1) = 1 ALORS dest(127..64) Temp2(63..0) SINON

201

dest(127..64) +0,0 FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une multiplication conditionnel d'un paquet de valeurs rel de double prcision dans l'oprande de destination avec le paquet de valeurs rel de l'oprande source et effectue un masque des bits extrait d'un oprande immdiat.

DPPD xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 41h /r ib

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 374 377.

202

Assembleur 80x86
SSE4.1

DPPS
Dot Product of Packed Single Precision FloatingPoint Values

Syntaxe
DPPS dest,source,immediat

Description Cette instruction permet d'effectuer une multiplication conditionnel d'un paquet de valeurs rel de simple prcision dans l'oprande de destination avec le paquet de valeurs rel de l'oprande source et effectue un masque des bits extrait d'un oprande immdiat.

Algorithme
SI immediat(4) = 1 ALORS Temp1(31..0) dest(31..0) x source(31..0) SINON Temp1(31..0) +0.0 FIN SI SI immediat(5) = 1 ALORS Temp1(63..32) dest(63..32) x source(63..32) SINON Temp1(63..32) +0.0 FIN SI SI immediat(6) = 1 ALORS Temp1(95..64) dest(95..64) x source(95..64) SINON Temp1(95..64) +0.0 FIN SI SI immediat(7) = 1 ALORS Temp1(127..96) dest(127..96) x source(127..96) SINON Temp1(127..96) +0.0 FIN SI Temp2(31..0) Temp1(31..0) + Temp1(63..32) Temp3(31..0) Temp1(95..64) + Temp1(127..96) Temp4(31..0) Temp2(31..0) + Temp3(31..0) 203

SI immediat(0) = 1 ALORS dest(31..0) Temp4(31..0) SINON dest(31..0) +0.0 FIN SI SI immediat(1) = 1 ALORS dest(63..32) Temp4(31..0) SINON dest(63..32) +0.0 FIN SI SI immediat(2) = 1 ALORS dest(95..64) Temp4(31..0) SINON dest(95..64) +0.0 FIN SI SI immediat(3) = 1 ALORS dest(127..96) Temp4(31..0) SINON dest(127..96) +0.0 FIN SI

Mnmonique
Instruction Opcode Description
Cette instruction permet d'effectuer une multiplication conditionnel d'un paquet de valeurs rel de simple prcision dans l'oprande de destination avec le paquet de valeurs rel de l'oprande source et effectue un masque des bits extrait d'un oprande immdiat.

DPPS xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 40h /r ib

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 378 380.

204

Assembleur 80x86 INTEL Pentium-MMX

EMMS Empty MMX State

Syntaxe
EMMS

Description Cette instruction fixe les mots marqus du MPU (soit les registres virgule flottante disponible) de chacun un. Naturellement, ceci rclame que tous les registres du MPU soit disponible cette usage. Il devrait tre utilis avant l'excution les instructions MMX et par consquent les oprations virgule flottante.

Algorithme
FloatPointTagWord FFFFh

Mnmonique
Instruction EMMS Opcode 0Fh 77h Description Cette instruction permet de fixer les mots marqus du MPU de chacun un.

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 381 383.

205

Assembleur 80x86 INTEL 80186+

ENTER Enter

Syntaxe
ENTER taille,niveau

Description Cette instruction permet de grer des langages de programmation de haut niveau. La commande ENTER permet de crer les structures de paramtres ncessaires aux procdures des langages de haut niveau. taille indique le nombre d'octet devant tre rserves dans la pile pour la procdure. niveau indique le nombre niveau d'imbrication de la procdure, c'est--dire que le nombre de structures de paramtres devant tre imbriques dans la pile. Cette commande n'est disponible qu' partir des microprocesseurs 80186 ou postrieur.

Algorithme
NestingLevel NestingLevel 1Fh SI StackSize = 32 ALORS PUSH EBP FrameTemp ESP SINON PUSH BP FrameTemp SP FIN SI SI NestingLevel > 0 ALORS BOUCLE POUR i 1 JUSQU'A (NestingLevel - 1) FAIRE SI OperandSize = 32 ALORS SI StackSize 32 ALORS EBP EBP - 4 PUSH [EBP] SINON BP BP - 4 PUSH [BP] FIN SI SINON 206

SI StackSize = 32 ALORS EBP EBP - 2 PUSH [EBP] SINON BP BP - 2 PUSH [BP] FIN SI FIN SI FIN BOUCLE POUR SI OperandSize = 32 ALORS PUSH FrameTemp SINON PUSH FrameTemp FIN SI FIN SI SI StackSize = 32 ALORS EBP FrameTemp ESP EBP - Size SINON BP FrameTemp SP BP - Size FIN SI

Mnmonique
Instruction
ENTER imm16, 0 ENTER imm16, 1 ENTER imm16, imm8

Opcode
C8h iw 00h C8h iw 01h C8h iw ib

Description
Cre une procdure de cadre de pile Cre un cadre de pile pour une procdure Cre un cadre de pile pour une procdure

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la

#SS(Pile)

207

limite du segment de pile ou n'est pas canonique Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir galement Instruction assembleur 80x86 - Instruction LEAVE

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 811 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 111 112. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 384 390.

208

Assembleur 80x86 INTEL 8088 au 80386 et quelque hybride 80486

ESC ESCape

Syntaxe
ESC Code Opration,Adresse

Description Cette instruction active le coprocesseur, lequel se permettra d'utiliser les mthodes d'adressage du processeur principal (CPU). Le microprocesseur effectue un accs mmoire sur le coprocesseur et place les informations sur le bus de donnes. La technique dont le coprocesseur fait preuve pour traiter la commande Code Opration dpend ensuite de sa conception interne.

Mnmonique
Instruction ESC [xxyy],imm8 Opcode D8h 06h yyh xxh imm8 Description Cette instruction active le coprocesseur, lequel se permettra d'utiliser les mthodes d'adressage du processeur principal (CPU).

Cycles d'horloge
8086 8088 80186 80286 80386 i486 Pentium Cx486SLC UMC U5S IBM 486BL3X Cx486DX

Instruction

Opcode

ESC [xxyy],imm8

D8h 06h yyh xxh

8/12+EA 8/12+EA

920

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 811

209

Assembleur 80x86 INTEL MPU 8087+

F2XM Float TO eXposant Multiplication

Syntaxe
F2XM

Description Cette instruction s'applique calculer 2 puissance le registre mathmatique ST(0) moins 1 et enregistre son produit dans le registre mathmatique ST(0).

Algorithme
ST(0) 2 ST(0) - 1

Remarque L'utilisation de cette instruction est dconseille, il est prfrable d'utiliser plutt F2XM1 car cette instruction est trs peu support par les compilateurs.

Mnmonique
Instruction F2XM Opcode D9h F0h Description Cette instruction permet de remplacer ST(0) avec 2 la (ST(0) - 1).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 841

210

Assembleur 80x86 INTEL MPU 8087+

F2XM1 Float TO eXposant Multiplication - 1

Syntaxe
F2XM1

Description Cette instruction s'applique calculer 2 puissance le registre mathmatique ST(0) moins 1 et enregistre son produit dans le registre mathmatique ST(0).

Algorithme
ST(0) 2 ST(0) - 1

Mnmonique
Instruction Opcode Description Cette instruction permet de remplacer ST(0) avec 2 la (ST(0) - 1).

F2XM1

D9h F0h

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 391 392.

211

Assembleur 80x86 INTEL MPU 8087+

FABS Float ABSolute

Syntaxe
FABS

Description Cette instruction permet de convertir le nombre rel contenu dans le registre mathmatique ST(0) en sa valeur absolue.

Algorithme
ST(0) | ST(0) |

Mnmonique
Instruction FABS Opcode D9h E1h Description Cette instruction permet de convertir le nombre rel contenu dans le registre mathmatique ST(0) en sa valeur absolue.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 841 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 393 394.

212

Assembleur 80x86 INTEL MPU 8087+

FADD Float ADDition

Syntaxe
FADD source, cible

Description Cette instruction offre l'essentiel possibilit d'ajouter le nombre rel de valeur positive source cible et enregistre la somme dans cible. Si cible n'est pas dfini, le registre mathmatique ST(0) est sera utilis par dfaut. Si source et cible ne sont pas spcifis, le couple de registre mathmatique ST(1) et ST(0) seront exploits.

Algorithme
Cible Cible + Source

Mnmonique
Instruction FADD mem32 Opcode D8h /0 Description Cette instruction permet d'ajouter le nombre rel de valeur positive source cible et enregistre la somme dans cible. Cette instruction permet d'ajouter le nombre rel de valeur positive source cible et enregistre la somme dans cible. Cette instruction permet d'ajouter le nombre rel de valeur positive source cible et enregistre la somme dans cible. Cette instruction permet d'ajouter le nombre rel de valeur positive source cible et enregistre la 213

FADD mem64

DCh /0

FADD fpureg

D8h (C0h+r)

FADD ST0,fpureg

D8h (C0+r)

somme dans cible. FADD TO fpureg DCh (C0h+r) Cette instruction permet d'ajouter le nombre rel de valeur positive source cible et enregistre la somme dans cible. Cette instruction permet d'ajouter le nombre rel de valeur positive source cible et enregistre la somme dans cible.

FADD fpureg,ST0

DCh (C0h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 841 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 395 398.

214

Assembleur 80x86 INTEL MPU 8087+

FADDP Float ADDition and Pop

Syntaxe
FADDP source, cible

Description Cette instruction complmentaire ajoute le nombre rel source au nombre rel cible et enregistrer la somme dans cible puis prendre le registre mathmatique ST(0) et le dpile. Si cible n'est pas dfini, le registre mathmatique ST(0) est utilis par dfaut. Si source et cible ne sont pas spcifis, le couple de registre mathmatique ST(1) et ST(0) sont exploite.

Algorithme
Cible Cible + Source POP ST

Mnmonique
Instruction
FADDP fpureg

Opcode
DEh (C0h+r)

Description
Cette instruction complmentaire ajoute le nombre rel source au nombre rel cible et enregistrer la somme dans cible puis prendre le registre mathmatique ST(0) et le dpile. Cette instruction complmentaire ajoute le nombre rel source au nombre rel cible et enregistrer la somme dans cible puis prendre le registre mathmatique ST(0) et le dpile.

FADDP fpureg,ST0

DEh (C0h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 842 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 395 398.

215

Assembleur 80x86 INTEL MPU 8087+

FBLD Float dcB Load

Syntaxe
FBLD source

Description Cette instruction charge la valeur de format DCB compacte aprs le registre mathmatique ST(0).

Algorithme
Dcrmentation du pointeur de pile FPU ST(0) Source

Mnmonique
Instruction FBLD mem80 Opcode DFh /4 Description Cette instruction charge la valeur de format DCB compacte aprs le registre mathmatique ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 842 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 399 400.

216

Assembleur 80x86 INTEL MPU 8087+

FBSTP Float dcB load ST Pop st

Syntaxe
FBSTP cible

Description Cette instruction extrait la valeur de format DCB compacte du registre mathmatique ST(0), l'enregistrer dans cible et prendre le registre mathmatique ST(0) et sort de la pile.

Algorithme
cible ST(0) POP ST

Mnmonique
Instruction FBSTP mem80 Opcode DFh /6 Description Cette instruction extrait la valeur de format DCB compacte du registre mathmatique ST(0), l'enregistrer dans cible et prendre le registre mathmatique ST(0) et sort de la pile.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 842 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 401 403.

217

Assembleur 80x86 INTEL MPU 8087+

FCHS Float CHange Signed

Syntaxe
FCHS

Description Cette instruction inverse tout simplement le signe du registre mathmatique ST(0). S'il est positive il deviendra ngatif et s'il est ngatif et deviendra positif.

Algorithme
ST(0) -ST(0)

Mnmonique
Instruction FCHS Opcode D9h E0h Description Cette instruction permet d'inverser le signe du registre mathmatique ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 842 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 404 405.

218

Assembleur 80x86 INTEL MPU 8087+

FCLEX Float CLear EXecption

Syntaxe
FCLEX

Description Cette instruction efface toutes les exceptions contenu dans les drapeaux de registres du coprocesseur mathmatique.

Algorithme
SW(bit 0 7) 0 SW(bit 15) 0

Mnmonique
Instruction FCLEX Opcode 9Bh DBh E2h Description Cette instruction permet d'effacer toutes les exceptions contenu dans les drapeaux de registres du coprocesseur mathmatique.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 842 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 406 407.

219

Assembleur 80x86 INTEL P6+

FCMOV Float Conditionnel Move

Syntaxe
FCMOVB registre FCMOVB ST(0),registre FCMOVBE registre FCMOVBE ST(0),registre FCMOVE registre FCMOVE ST(0),registre FCMOVNB registre FCMOVNB ST(0),registre FCMOVNBE registre FCMOVNBE ST(0),registre FCMOVNE registre FCMOVNE ST(0),registre FCMOVNU registre FCMOVNU ST(0),registre FCMOVU registre FCMOVU ST(0),registre

220

Description Cette instruction permet de dplac des nombres rel (virgule flottante) si la condition en question est satisfaite.

Algorithme SI condition est vrai ALORS ST(0) ST(i) FIN SI

Mnmonique
Instruction
FCMOVB ST,STi FCMOVE ST,STi FCMOVBE ST,STi FCMOVU ST,STi FCMOVNB ST,STi FCMOVNE ST,STi FCMOVNBE ST,STi FCMOVNU ST,STi

Opcode
DAh (C0h+i) DAh (C8h+i) DAh (D0h+i) DAh (D8h+i) DBh (C0h+i) DBh (C8h+i) DBh (D0h+i) DBh (D8h+i)

Description
Cette instruction permet de dplac des nombres rel si infrieur. Cette instruction permet de dplac des nombres rel si gale. Cette instruction permet de dplac des nombres rel si infrieur ou gale. Cette instruction permet de dplac des nombres rel si dsordonn. Cette instruction permet de dplac des nombres rel si pas infrieur. Cette instruction permet de dplac des nombres rel si pas gale. Cette instruction permet de dplac des nombres rel si pas infrieur ou gale. Cette instruction permet de dplac des nombres rel si pas dsordonn.

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 408 409.

221

Assembleur 80x86 INTEL MPU 8087+

FCOM Float Compare

Syntaxe
FCOM source

Description Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1.

Algorithme
EVALUER CAS (relation de l'operande) DE CAS ST > source: C3 0 C2 0 C0 0 CAS ST < source: C3 0 C2 0 C0 1 CAS ST = source: C3 1 C2 0 C0 0 FIN EVALUER CAS SI ST(0) ou source = NaN OU format non support ALORS EXCEPTION #IA SI FPUControlWord.IM = 1 ALORS C3 1 C2 1 C0 1 FIN SI FIN SI

222

Mnmonique
Instruction FCOM mem32 Opcode D8h /2 Description Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1. Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1. Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1. Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1.

FCOM mem64

DCh /2

FCOM fpureg

D8h D0h+r

FCOM ST0,fpureg

D8h D0h+r

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 842 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 410 413.

223

Assembleur 80x86
INTEL Pentium III+
Syntaxe
FCOMI ST, ST(i)

FCOMI
Compare Real and Set EFLAGS

Description Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des rsultats.

Algorithme
EVALUER CAS (relation de l'oprande) DE CAS ST(0) > ST(i): ZF 0 PF 0 CF 0 CAS ST(0) < ST(i): ZF 0 PF 0 CF 1 CAS ST(0) ST(i): ZF 1 PF 0 CF 0 FIN EVALUER CAS SI ST(0) OU ST(i) NaN OU format non support ALORS EXCEPTION #IA SI FPUControlWord.IM = 1 ALORS ZF 1 PF 1 CF 1 FIN SI 224

FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des rsultats.

FCOMI ST0,STi

DBh (F0h+i)

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 414 416.

225

Assembleur 80x86
INTEL Pentium III+

FCOMIP
Compare Real and Set EFLAGS

Syntaxe
FCOMIP ST, ST(i)

Description Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des rsultats et dsempile de la pile la valeur dans le registre.

Algorithme EVALUER CAS (relation de l'oprande) DE CAS ST(0) > ST(i): ZF 0 PF 0 CF 0 CAS ST(0) < ST(i): ZF 0 PF 0 CF 1 CAS ST(0) ST(i): ZF 1 PF 0 CF 0 FIN EVALUER CAS SI ST(0) OU ST(i) NaN OU format non support ALORS EXCEPTION #IA SI FPUControlWord.IM = 1 ALORS ZF 1 PF 1 CF 1 FIN SI FIN SI

226

Mnmonique
Instruction
FCOMIP ST0,STi

Opcode
DFh (F0h+i)

Description
Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des rsultats et dsempile de la pile la valeur dans le registre.

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 414 416.

227

Assembleur 80x86 INTEL MPU 8087+

FCOMP Float Compare Pop st(0)

Syntaxe
FCOMP source

Description Cette instruction compare le nombre rel de valeur positive source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres.

Algorithme
EVALUER CAS (relation de l'operande) DE CAS ST > source: C3 0 C2 0 C0 0 CAS ST < source: C3 0 C2 0 C0 1 CAS ST = source: C3 1 C2 0 C0 0 FIN EVALUER CAS SI ST(0) ou source = NaN OU format non support ALORS EXCEPTION #IA SI FPUControlWord.IM = 1 ALORS C3 1 C2 1 C0 1 FIN SI FIN SI

228

PopRegisterStack

Mnmonique
Instruction
FCOMP mem32

Opcode
D8h /3

Description
Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres. Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres. Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres. Cette instruction permet de comparer le nombre rel de valeur positive source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres.

FCOMP mem64

DCh /3

FCOMP fpureg

D8h D8h+r

FCOMP ST0,fpureg

D8h D8h+r

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 842 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 410 413.

229

Assembleur 80x86 INTEL MPU 8087+

FCOMPP Float Compare Pop Pop

Syntaxe
FCOMPP

Description Cette instruction permet de comparer les nombres rels du registre mathmatique ST(1) avec le registre mathmatique ST(0), ensuite de mettre les indicateurs d'tat C0 C3 la valeur 1 et prendre le couple de registre mathmatique ST(1) et ST(0) dans la pile de registres (2 dpilages).

Algorithme
EVALUER CAS (relation de l'operande) DE CAS ST > source: C3 0 C2 0 C0 0 CAS ST < source: C3 0 C2 0 C0 1 CAS ST = source: C3 1 C2 0 C0 0 FIN EVALUER CAS SI ST(0) ou source = NaN OU format non support ALORS EXCEPTION #IA SI FPUControlWord.IM = 1 ALORS C3 1 C2 1 C0 1 FIN SI FIN SI 230

PopRegisterStack PopRegisterStack

Mnmonique
Instruction FCOMPP Opcode DEh D9h Description Cette instruction permet de comparer les nombres rels du registre mathmatique ST(1) avec le registre mathmatique ST(0), ensuite de mettre les indicateurs d'tat C0 C3 la valeur 1 et prendre le couple de registre mathmatique ST(1) et ST(0) dans la pile de registres (2 dpilages).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 843 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 410 413.

231

Assembleur 80x86

FCOS

INTEL MPU 80387+ Float COSinus

Syntaxe
FCOS

Description Cette instruction calcule le cosinus du registre mathmatique ST(0) et l'enregistrer dans le registre mathmatique ST(1); ensuite met dans le registre mathmatique ST(0) la valeur 1,0. Attention, cette commande est disponible uniquement sur les 80387 ou postrieur.

Algorithme
SI oprande dans le rang ALORS C2 0 ST COS(ST) SINON C2 1 FIN SI

Mnmonique
Instruction
FCOS

Opcode
D9h FFh

Description
Cette instruction permet de calculer le cosinus du registre mathmatique ST(0) et l'enregistrer dans le registre mathmatique ST(1); ensuite met dans le registre mathmatique ST(0) la valeur 1,0.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 843 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 417 418.

232

Assembleur 80x86 INTEL MPU 8087+

FDECSTP Float Decrement STack Position

Syntaxe
FDECSTP

Description Cette instruction permet de dcrmenter le pointeur de pile de registres.

Algorithme
SI TOP = 0 ALORS TOP 7 SINON TOP TOP - 1 FIN SI

Mnmonique
Instruction FDECSTP Opcode D9h F6h Description Cette instruction permet de dcrmenter le pointeur de pile de registres.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 843 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 419 421.

233

Assembleur 80x86 INTEL MPU 8087

FDISI Float Desactive Interrupt Set Internal?

Syntaxe
FDISI

Description Cette instruction permettait de dsactiver les interruptions; toutefois cette commande n'est disponible que sur le coprocesseur mathmatique 8087. Elle n'a pas t de retour dans les coprocesseur suivant.

Algorithme
IF 0

Mnmonique
Instruction FDISI Opcode 9Bh DBh E1h Description Cette instruction permet de dsactiver les interruptions.

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 843

234

Assembleur 80x86 INTEL MPU 8087+

FDIV Float Division

Syntaxe
FDIV source, cible

Description Cette instruction offre la possibilit d'effectuer des divisions de nombre rel de valeur positive source par cible et enregistrer le rsultat dans cible. Si cible n'est pas spcifi, le registre mathmatique ST(0) est inutilis. Si source et cible ne sont pas dfini, le couple de registre mathmatique ST(1) et ST(0) sont utiliss.

Algorithme
source source cible

Mnmonique
Instruction FDIV mem32 Opcode D8h /6 Description Cette instruction permet d'effectuer des divisions de nombre rel de valeur positive source par cible et enregistrer le rsultat dans cible. Cette instruction permet d'effectuer des divisions de nombre rel de valeur positive source par cible et enregistrer le rsultat dans cible. Cette instruction permet d'effectuer des divisions de nombre rel de valeur positive source par cible et

FDIV mem64

DCh /6

FDIV fpureg

D8h (F0h+r)

235

enregistrer le rsultat dans cible. FDIV ST0,fpureg D8h (F0h+r) Cette instruction permet d'effectuer des divisions de nombre rel de valeur positive source par cible et enregistrer le rsultat dans cible. Cette instruction permet d'effectuer des divisions de nombre rel de valeur positive source par cible et enregistrer le rsultat dans cible. Cette instruction permet d'effectuer des divisions de nombre rel de valeur positive source par cible et enregistrer le rsultat dans cible.

FDIV TO fpureg

DCh (F8h+r)

FDIV fpureg,ST0

DCh (F8h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 843 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 422 424.

236

Assembleur 80x86 INTEL MPU 8087+

FDIVP Float Division & Position

Syntaxe
FDIVP source, cible

Description Cette instruction offre la possibilit d'effectuer des division de nombre rel et place ST(0) dans la pile.

Algorithme
source source cible POP ST

Mnmonique
Instruction FDIVP fpureg Opcode DEh (F8h+r) Description Cette instruction permet d'effectuer des division de nombre rel et place ST(0) dans la pile. Cette instruction permet d'effectuer des division de nombre rel et place ST(0) dans la pile.

FDIVP fpureg,ST0

DEh (F8h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 843 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 422 424.

237

Assembleur 80x86 INTEL MPU 8087+

FDIVR Float Division Reverse

Syntaxe
FDIVR cible, source

Description Cette instruction offre la possibilit d'effectuer des division de nombre rel de valeur positive avec les registres inverss cible par source.

Algorithme
source source cible

Mnmonique
Instruction FDIVR mem32 Opcode D8h /7 Description Cette instruction permet d'effectuer des division de nombre rel de valeur positive avec les registres inverss cible par source. Cette instruction permet d'effectuer des division de nombre rel de valeur positive avec les registres inverss cible par source. Cette instruction permet d'effectuer des division de nombre rel de valeur positive avec les registres inverss cible par source.

FDIVR mem64

DCh /7

FDIVR fpureg

D8h (F8h+r)

238

FDIVR ST0,fpureg

D8h (F8h+r)

Cette instruction permet d'effectuer des division de nombre rel de valeur positive avec les registres inverss cible par source. Cette instruction permet d'effectuer des division de nombre rel de valeur positive avec les registres inverss cible par source. Cette instruction permet d'effectuer des division de nombre rel de valeur positive avec les registres inverss cible par source.

FDIVR TO fpureg

DCh (F0h+r)

FDIVR fpureg,ST0

DCh (F0h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 843 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 425 428.

239

Assembleur 80x86 INTEL MPU 8087+

FDIVRP Float Division Reverse & Position

Syntaxe
FDIVRP cible, source

Description Cette instruction offre la possibilit d'effectuer des divisions de nombre rel avec les registres inverss cible par source et place ST(0) dans la pile.

Algorithme
source source cible POP ST

Mnmonique
Instruction FDIVRP fpureg Opcode DEh (F0h+r) Description Cette instruction permet d'effectuer des divisions de nombre rel avec les registres inverss cible par source et place ST(0) dans la pile. Cette instruction permet d'effectuer des divisions de nombre rel avec les registres inverss cible par source et place ST(0) dans la pile. Cette instruction permet d'effectuer des division de nombre rel de valeur 240

FDIVRP fpureg,ST0

DEh (F0h+r)

FDIVRP

DEh F1h

positive avec les registres inverss cible par source.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 844 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 425 428.

241

Assembleur 80x86
AMD 3DNow!+
Syntaxe FEMMS

FEMMS
Faster EMMS

Description Cette instruction permet d'effacer les tats MMX aprs le passage d'instructions MMX.

Algorithme FPU.TAG FFFFh

Mnmonique Instruction FEMMS Opcode 0Fh 0Eh Description Cette instruction permet d'effacer les tats MMX aprs le passage d'instructions MMX.

242

Assembleur 80x86 INTEL MPU 8087

FENI Float Enable Numeric Interrupt

Syntaxe
FENI

Description Cette instruction permet d'autoriser les interruptions.

Algorithme
IF 1

Mnmonique
Instruction FENI Opcode 9Bh DBh E0h Description Cette instruction permet d'autoriser les interruptions.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 844

243

Assembleur 80x86 INTEL MPU 8087+

FFREE Float Free

Syntaxe
FFREE cible

Description Cette instruction permet de librer le registre cible devant reprsent un des registres de la pile.

Algorithme
TAG(cible) 11b

Mnmonique
Instruction FFREE fpureg Opcode DDh (C0h+r) Description Cette instruction permet de librer le registre cible devant reprsent un des registres de la pile.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 844 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 429 429.

244

Assembleur 80x86 INTEL MPU 8087+

FFREEP Float Free and Pop

Syntaxe FFREEP cible

Description Cette instruction permet de librer un des registres de la pile et d'ensuite de dsempiler le registre de la pile.

Algorithme TAG(cible) 11b POP ST

Mnmonique Instruction FFREEP fpureg Opcode DFh (C0h+r) Description Cette instruction permet de librer un des registres de la pile et d'ensuite de dsempiler le registre de la pile.

245

Assembleur 80x86 INTEL MPU 8087+

FIADD Float Integer ADDition

Syntaxe
FIADD source,cible

Description Cette instruction offre l'essentiel possibilit d'ajouter le nombre rel source cible et enregistre la somme dans cible. Si cible n'est pas dfini, le registre mathmatique ST(0) est sera utilis par dfaut. Si source et cible ne sont pas spcifis, le couple de registre mathmatique ST(1) et ST(0) seront exploits.

Algorithme
cible cible + source

Mnmonique
Instruction FIADD mem16 Opcode DEh /0 Description Cette instruction permet d'ajouter le nombre rel source cible et enregistre la somme dans cible. Cette instruction permet d'ajouter le nombre rel source cible et enregistre la somme dans cible.

FIADD mem32

DAh /0

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 844 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 395 398.

246

Assembleur 80x86 INTEL MPU 8087+

FICOM Float Integer COMpare

Syntaxe
FICOM source

Description Cette instruction permet de comparer le nombre rel source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1.

Algorithme
EVALUER CAS relation de l'oprande CAS non comparable: C3 1 C2 1 C0 1 CAS ST > source: C3 0 C2 0 C0 0 CAS ST < source: C3 0 C2 0 C0 1 CAS ST = source: C3 1 C2 0 C0 0 FIN EVALUER CAS

Mnmonique

247

Instruction FICOM mem16

Opcode DEh /2

Description Cette instruction permet de comparer le nombre rel source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1. Cette instruction permet de comparer le nombre rel source avec le registre mathmatique ST(0) et mettre les indicateurs d'tat C0 C3 avec la valeur 1.

FICOM mem32

DAh /2

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 844 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 430 431.

248

Assembleur 80x86 INTEL MPU 8087+

FICOMP Float Integer COMpare & Position

Syntaxe
FICOMP source

Description Cette instruction compare le nombre rel source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres.

Algorithme
EVALUER CAS relation de l'oprande CAS non comparable: C3 1 C2 1 C0 1 CAS ST > source: C3 0 C2 0 C0 0 CAS ST < source: C3 0 C2 0 C0 1 CAS ST = source: C3 1 C2 0 C0 0 FIN EVALUER CAS POP ST

Mnmonique
249

Instruction FICOMP mem16

Opcode DEh /3

Description Cette instruction compare le nombre rel source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres. Cette instruction compare le nombre rel source avec le registre mathmatique ST(0), mettre les indicateurs d'tat C0 C3 avec la valeur 1 et dpile le registre mathmatique ST(0) de la pile de registres.

FICOMP mem32

DAh /3

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 844 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 430 431.

250

Assembleur 80x86 INTEL MPU 8087+

FIDIV Float Integer Division

Syntaxe
FIDIV source,cible

Description Cette instruction offre la possibilit d'effectuer des divisions de nombre rel source par cible et enregistrer le rsultat dans cible. Si cible n'est pas spcifi, le registre mathmatique ST(0) est inutilis. Si source et cible ne sont pas dfini, le couple de registre mathmatique ST(1) et ST(0) sont utiliss.

Algorithme
source source cible

Mnmonique
Instruction FIDIV mem16 FIDIV mem32 Opcode DEh /6 DAh /6 Description Cette instruction permet d'effectuer des divisions de nombre rel source par cible et enregistrer le rsultat dans cible. Cette instruction permet d'effectuer des divisions de nombre rel source par cible et enregistrer le rsultat dans cible.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 844 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 422 424.

251

Assembleur 80x86 INTEL MPU 8087+

FIDIVR Float Integer Divsion Reverse

Syntaxe
FIDIVR source,cible

Description Cette instruction offre la possibilit d'effectuer des division de nombre rel avec les registres inverss cible par source.

Algorithme
source source cible

Mnmonique
Instruction FIDIVR mem16 FIDIVR mem32 Opcode DEh /7 DAh /7 Description Cette instruction offre la possibilit d'effectuer des division de nombre rel avec les registres inverss cible par source. Cette instruction offre la possibilit d'effectuer des division de nombre rel avec les registres inverss cible par source.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 845 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 425 428.

252

Assembleur 80x86 INTEL MPU 8087+

FILD Float Integer LoaD

Syntaxe
FILD source

Description Cette instruction permet de charger le nombre entier auprs du registre ST(0).

Algorithme
Dcrmentation de la pile FPU ST(0) source

Mnmonique
Instruction FILD mem16 Opcode DFh /0 Description Cette instruction permet de charger le nombre entier auprs du registre ST(0). Cette instruction permet de charger le nombre entier auprs du registre ST(0). Cette instruction permet de charger le nombre entier auprs du registre ST(0).

FILD mem32

DBh /0

FILD mem64

DFh /5

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 845 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 432 434.

253

Assembleur 80x86 INTEL MPU 8087+

FIMUL Float Integer Multplication

Syntaxe
FIMUL source,cible

Description Cette instruction permet de multiplier le nombre rel source par cible et sauvegarde le rsultat dans cible. Si la cible n'est pas dfinit, le registre ST(0) est utilis. Si source et cible ne sont pas dfinit, les registres ST(1) et ST(0) sont utiliss.

Algorithme
source source x cible

Mnmonique
Instruction
FIMUL mem16

Opcode
DEh /1

Description
Cette instruction permet de multiplier le nombre rel source par cible et sauvegarde le rsultat dans cible. Si la cible n'est pas dfinit, le registre ST(0) est utilis. Si source et cible ne sont pas dfinit, les registres ST(1) et ST(0) sont utiliss. Cette instruction permet de multiplier le nombre rel source par cible et sauvegarde le rsultat dans cible. Si la cible n'est pas dfinit, le registre ST(0) est utilis. Si source et cible ne sont pas dfinit, les registres ST(1) et ST(0) sont utiliss.

FIMUL mem32

DAh /1

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 845 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 455 459.

254

Assembleur 80x86 INTEL MPU 8087+

FINCSTP Float Increment STack Pointer

Syntaxe
FINCSTP

Description Cette instruction permet d'incrmenter le pointeur de pile de registres.

Algorithme
SI TOP = 7 ALORS TOP 0 SINON TOP TOP + 1 FIN SI

Mnmonique
Instruction FINCSTP Opcode D9h F7h Description Cette instruction permet d'incrmenter le pointeur de pile de registres.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 845 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 435 436.

255

Assembleur 80x86 INTEL MPU 8087+

FINIT Float Initialize

Syntaxe
FINIT

Description Cette instruction permet d'effectuer l'initialisation du coprocesseur mathmatique.

Algorithme
CW 37Fh SW 0 TW 0FFFFh FEA 0 FDS 0 FIP 0 FOP 0 FCS 0

Mnmonique
Instruction FINIT Opcode 9Bh DBh E3h Description Cette instruction permet d'effectuer l'initialisation du coprocesseur mathmatique.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 845 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 437 437.

256

Assembleur 80x86 INTEL MPU 8087+

FIST Float Integer in ST

Syntaxe
FISTP cible

Description Cette instruction permet de sauvegarder le nombre du registre ST(0) dans cible.

Algorithme
cible ST(0)

Mnmonique
Instruction FIST mem16 Opcode DFh /2 Description Cette instruction permet de sauvegarder le nombre du registre ST(0) dans cible. Cette instruction permet de sauvegarder le nombre du registre ST(0) dans cible.

FIST mem32

DBh /2

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 845 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 438 442.

257

Assembleur 80x86 INTEL MPU 8087+

FISTP Float Integer in ST & Pop

Syntaxe
FISTP cible

Description Cette instruction permet de sauvegarder le nombre du registre ST(0) dans cible et prendre le registre ST(0) de la pile du registres.

Algorithme
cible ST(0) POP ST

Mnmonique
Instruction
FISTP mem16 FISTP mem32 FISTP mem64

Opcode
DFh /3 DBh /3 DFh /7

Description
Cette instruction permet de sauvegarder le nombre du registre ST(0) dans cible et prendre le registre ST(0) de la pile du registres. Cette instruction permet de sauvegarder le nombre du registre ST(0) dans cible et prendre le registre ST(0) de la pile du registres. Cette instruction permet de sauvegarder le nombre du registre ST(0) dans cible et prendre le registre ST(0) de la pile du registres.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 845 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 438 442.

258

Assembleur 80x86
SSE3

FISTTP
Store Integer with Truncation

Syntaxe
FISTTP dest

Description Cette instruction permet de convertir la valeur contenu dans le registre ST dans un entier en utilisant on tronquage, de type chop, lequel est un mode d'arrondissement, et transfert le rsultat dans la destination et ensuite effectuer un dsempilage de ST.

Algorithme
dest ST pop ST

Mnmonique
Instruction Opcode Description Cette instruction permet de convertir la valeur contenu dans le registre ST dans un entier en utilisant on tronquage, de type chop, lequel est un mode d'arrondissement, et transfert le rsultat dans la destination et ensuite effectuer un dsempilage de ST. Cette instruction permet de convertir la valeur contenu dans le registre ST 259

FISTTP m16int

DFh /1

FISTTP m32int

DBh /1

dans un entier en utilisant on tronquage, de type chop, lequel est un mode d'arrondissement, et transfert le rsultat dans la destination et ensuite effectuer un dsempilage de ST. Cette instruction permet de convertir la valeur contenu dans le registre ST dans un entier en utilisant on tronquage, de type chop, lequel est un mode d'arrondissement, et transfert le rsultat dans la destination et ensuite effectuer un dsempilage de ST.

FISTTP m64int

DDh /1

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 443 444.

260

Assembleur 80x86 INTEL MPU 8087+

FISUB Float Integer Subtract

Syntaxe
FISUB source

Description Cette instruction offre l'essentielle posibilit de soustraire le nombre source du registre ST(0).

Algorithme
ST ST - source

Mnmonique
Instruction FISUB mem16 Opcode DEh /4 Description Cette instruction permet de soustraire le nombre source du registre ST(0). Cette instruction permet de soustraire le nombre source du registre ST(0).

FISUB mem32

DAh /4

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 845 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 503 506.

261

Assembleur 80x86 INTEL MPU 8087+

FISUBR Float Integer Subtract Reverse

Syntaxe
FISUBR source

Description Cette instruction offre l'essentielle possibilit de soustraire le nombre du registre ST(0) de source.

Algorithme
source source - ST

Mnmonique
Instruction FISUBR mem16 Opcode DEh /5 Description Cette instruction permet de soustraire le nombre du registre ST(0) de source. Cette instruction permet de soustraire le nombre du registre ST(0) de source.

FISUBR mem32

DAh /5

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 507 510.

262

Assembleur 80x86 INTEL MPU 8087+

FLD Float LoaD

Syntaxe
FLD source

Description Cette instruction permet de charger le nombre rel du registre ST(0) dans la pile.

Algorithme
Dcrmentation de la pile du FPU ST(0) source

Mnmonique
Instruction Opcode
FLD mem32 FLD mem64 FLD mem80 FLD fpureg D9h /0 DDh /0 DBh /5 D9h (C0h+r)

Description
Cette instruction permet de charger le nombre rel du registre ST(0) dans la pile. Cette instruction permet de charger le nombre rel du registre ST(0) dans la pile. Cette instruction permet de charger le nombre rel du registre ST(0) dans la pile. Cette instruction permet de charger le nombre rel du registre ST(0) dans la pile.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 446 448.

263

Assembleur 80x86 INTEL MPU 8087+

FLD1 Float LoaD 1

Syntaxe
FLD1

Description Cette instruction permet de charger la constante 1,0 du registre ST(0) dans la pile.

Algorithme
Dcrmentation de la pile du FPU ST(0) 1

Mnmonique
Instruction FLD1 Opcode D9h E8h Description Cette instruction permet de charger la constante 1,0 du registre ST(0) dans la pile.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 449 450.

264

Assembleur 80x86
INTEL MPU 8087+

FLDCW
Float Load Control Word

Syntaxe
FLDCW source

Description Cette instruction permet de charger le mot de contrle avec source.

Algorithme
CW source

Mnmonique
Instruction
FLDCW mem16

Opcode
D9h /5

Description
Cette instruction permet de charger le mot de contrle avec source.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 451 452.

265

Assembleur 80x86 INTEL MPU 8087+

FLDENV Float LoaD ENVironment

Syntaxe
FLDENV source

Description Cette instruction permet de charger l'environnement partir de source.

Algorithme
environnement FPU source

Mnmonique
Instruction FLDENV mem Opcode D9h /4 Description Cette instruction permet de charger l'environnement partir de source.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 453 454.

266

Assembleur 80x86 INTEL MPU 8087+

FLDL2E Float LoaD Logarithmic 2 in E

Syntaxe
FLDL2E

Description Cette instruction permet de mettre le rsultat du logarithme de e de la base 2 dans ST(0).

Algorithme
Dcrmentation de la pile du FPU ST(0) 2e

Mnmonique
Instruction FLDL2E Opcode D9h EAh Description Cette instruction permet de mettre le rsultat du logarithme de e de la base 2 dans ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 449 450.

267

Assembleur 80x86 INTEL MPU 8087+

FLDL2T

Syntaxe
FLDL2T

Description Cette instruction permet de mettre le rsultat du logarithme de 10 de la base 2 dans ST(0).

Algorithme
Dcrmentation de la pile du FPU ST(0) 10e

Mnmonique
Instruction FLDL2T Opcode D9h E9h Description Cette instruction permet de mettre le rsultat du logarithme de 10 de la base 2 dans ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 449 450.

268

Assembleur 80x86 INTEL MPU 8087+

FLDLG2 Float LoaD LoGarithmic 2

Syntaxe
FLDLG2

Description Cette instruction permet de mettre le rsultat du logarithme de 2 de la base 10 dans ST(0).

Algorithme
Dcrmentation de la pile du FPU ST(0) LOG 210

Mnmonique
Instruction FLDLG2 Opcode D9h ECh Description Cette instruction permet de mettre le rsultat du logarithme de 2 de la base 10 dans ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 449 450.

269

Assembleur 80x86 INTEL MPU 8087+

FLDLN2 Float Load Logarithmic Natural 2

Syntaxe
FLDLN2

Description Cette instruction permet de mettre le rsultat du logarithme de e de la base 10 dans ST(0).

Mnmonique
Instruction FLDLN2 Opcode D9h EDh Description Cette instruction permet de mettre le rsultat du logarithme de e de la base 10 dans ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 846 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 449 450.

270

Assembleur 80x86 INTEL MPU 8087+

FLDPI Float LoaD PI

Syntaxe
FLDPI

Description Cette instruction permet de mettre le rsultat de la constante PI () dans le registre ST(0).

Algorithme
ST(0)

Mnmonique
Instruction FLDPI Opcode D9h EBh Description Cette instruction permet de mettre le rsultat de la constante PI () dans le registre ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 847 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 449 450.

271

Assembleur 80x86 INTEL MPU 8087+

FLDZ Float LoaD Zero

Syntaxe
FLDZ

Description Cette instruction permet de mettre le rsultat de la constante 0,0 dans le registre ST(0).

Algorithme
ST(0) 0,0

Mnmonique
Instruction FLDZ Opcode D9h EEh Description Cette instruction permet de mettre le rsultat de la constante 0,0 dans le registre ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 847 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 449 450.

272

Assembleur 80x86 INTEL MPU 8087+

FMUL Float MULtiplication

Syntaxe
FMUL source,cible

Description Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible. Si la cible n'est pas dfinit, le registre ST(0) est utilis. Si source et cible ne sont pas dfinit, les registres ST(1) et ST(0) sont utiliss.

Algorithme
source source x cible

Mnmonique
Instruction FMUL mem32 Opcode D8h /1 Description Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible. Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible. Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et

FMUL mem64

DCh /1

FMUL fpureg

D8h (C8h+r)

273

sauvegarde le rsultat dans cible. FMUL ST0,fpureg D8h (C8h+r) Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible. Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible. Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible.

FMUL TO fpureg

DCh (C8h+r)

FMUL fpureg,ST0

DCh (C8h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 847 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 455 459.

274

Assembleur 80x86
INTEL MPU 8087+

FMULP
Float MULtiplication in Pointer

Syntaxe
FMULP source,cible

Description Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible et prend ensuite ST(0) dans la pile de registres. Si source et cible ne sont pas dfinit, les registres ST(1) et ST(0) sont utiliss.

Algorithme
source source x cible POP ST(0)

Mnmonique
Instruction
FMULP fpureg

Opcode
DEh (C8h+r)

Description
Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible et prend ensuite ST(0) dans la pile de registres. Cette instruction permet de multiplier le nombre rel de valeur positive source par cible et sauvegarde le rsultat dans cible et prend ensuite ST(0) dans la pile de registres.

FMULP fpureg,ST0

DEh (C8h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 847 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 455 459.

275

Assembleur 80x86
INTEL MPU 8087+

FNCLEX
Float Numeric CLear EXecption

Syntaxe
FNCLEX

Description Cette instruction permet d'liminer et de grer les exceptions non masques.

Algorithme
FPUStatusWord(0..7) 0 FPUStatusWord(15) 0

Mnmonique
Instruction FNCLEX Opcode DBh E2h Description Cette instruction permet d'liminer et de grer les exceptions non masques.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 847 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 406 407.

276

Assembleur 80x86 INTEL MPU 8087

FNDISI

Syntaxe
FNDISI

Description Cette instruction permet de dsactiver les interruptions et de grer les exceptions non masques.

Mnmonique
Instruction FNDISI Opcode DBh E1h Description Cette instruction permet de dsactiver les interruptions et de grer les exceptions non masques.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 847

277

Assembleur 80x86 INTEL MPU 8087+

FNENI

Syntaxe
FNENI

Description Cette instruction permet d'activer les interruptions et de grer les exceptions non masques.

Mnmonique
Instruction FNENI Opcode DBh E0h Description Cette instruction permet d'activer les interruptions et de grer les exceptions non masques.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 847

278

Assembleur 80x86
INTEL MPU 8087+

FNINIT
Float & Numeric Initialize

Syntaxe
FNINIT

Description Cette instruction permet d'initialiser le coprocesseur mathmatique et de grer les exceptions non masques.

Algorithme
FPUControlWord 037Fh FPUStatusWord 0 FPUTagWord FFFFh FPUDataPointer 0 FPUInstructionPointer 0 FPULastInstructionOpcode 0

Mnmonique
Instruction FNINIT Opcode DBh E3h Description Cette instruction permet d'initialiser le coprocesseur mathmatique et de grer les exceptions non masques.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 848 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 437 437.

279

Assembleur 80x86 INTEL MPU 8087+

FNOP Float No OPeration

Syntaxe
FNOP

Description Cette instruction permet de ne rien faire et de simplement passer l'instruction suivante.

Mnmonique
Instruction FNOP Opcode D9h D0h Description Cette instruction permet de ne rien faire et de simplement passer l'instruction suivante.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 848 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 460 460.

280

Assembleur 80x86
INTEL MPU 8087+

FNSAVE

Syntaxe
FNSAVE source

Description Cette instruction permet de sauvegarder l'tat courant du coprocesseur mathmatique dans l'emplacement mmoire partir de source et grer les exceptions numriques non masques.

Algorithme
source*FPUControlWord+ FPUControlWord source*FPUStatusWord+ FPUStatusWord source*FPUTagWord+ FPUTagWord source*FPUDataPointer) FPUDataPointer source*FPUInstructionPointer+ FPUInstructionPointer source*FPULastInstructionOpcode) FPULastInstructionOpcode source*ST(0)+ ST(0) source*ST(1)+ ST(1) source*ST(2)+ ST(2) source*ST(3)+ ST(3) source*ST(4)+ ST(4) source*ST(5)+ ST(5) source*ST(6)+ ST(6) source*ST(7)+ ST(7) FPUControlWord 037Fh FPUStatusWord 0 FPUTagWord FFFFh FPUDataPointer 0 FPUInstructionPointer 0 FPULastInstructionOpcode 0

281

Mnmonique
Instruction
FNSAVE mem

Opcode
DDh /6

Description
Cette instruction permet de sauvegarder l'tat courant du coprocesseur mathmatique dans l'emplacement mmoire partir de source et grer les exceptions numriques non masques.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 848 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 478 481.

282

Assembleur 80x86 INTEL MPU 8087+

FNSTCW

Syntaxe
FNSTCW cible

Description Cette instruction permet de sauvegarder le mot de contrle dans cible et grer les exceptions numriques non masques.

Algorithme
cible FPUControlWord

Mnmonique
Instruction FNSTCW mem16 Opcode D9h /7 Description Cette instruction permet de sauvegarder le mot de contrle dans cible et grer les exceptions numriques non masques.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 848 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 494 496.

283

Assembleur 80x86
INTEL MPU 8087+

FNSTENV
Float Not Waiting ST in ENVironment

Syntaxe
FNSTENV cible

Description Cette instruction permet de copier l'environnement du coprocesseur mathmatique vers une cible mais sans toutefois attendre que l'exception de nombre rel (virgule flottante) soit effac.

Algorithme
cible(FPUControlWord) FPUControlWord cible(FPUStatusWord) FPUStatusWord cible(FPUTagWord) FPUTagWord cible(FPUDataPointer) FPUDataPointer cible(FPUInstructionPointer) FPUInstructionPointer cible(FPULastInstructionOpcode) FPULastInstructionOpcode

Mnmonique
Instruction FNSTENV mem Opcode D9h /6 Description Cette instruction permet de copier l'environnement du coprocesseur mathmatique vers une cible mais sans toutefois attendre que l'exception de nombre rel (virgule flottante) soit effac.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 848 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 497 499.

284

Assembleur 80x86 INTEL MPU 8087+

FNSTSW

Syntaxe
FNSTSW cible

Description Cette instruction permet de copier le mot d'tat du coprocesseur mathmatique vers une cible mais sans toutefois attendre que l'exception de nombre rel (virgule flottante) soit effac.

Algorithme
cible FPUStatusWord

Mnmonique
Instruction FNSTSW mem16 Opcode DDh /7 Description Prrequis

Cette instruction INTEL 8087+ permet de copier le mot d'tat du coprocesseur mathmatique vers une cible mais sans toutefois attendre que l'exception de nombre rel (virgule flottante) soit effac. Cette instruction permet de copier le 285 INTEL 80287+

FNSTSW AX

DFh E0h

mot d'tat du coprocesseur mathmatique vers le registre AX mais sans toutefois attendre que l'exception de nombre rel (virgule flottante) soit effac.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 848 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 500 502.

286

Assembleur 80x86 INTEL MPU 8087+

FPATAN

Syntaxe
FPATAN

Description Cette instruction permet de calculer le rsultat de l'arc tangente de ST(1) par ST(0) et de mettre le rsultat dans le registre ST(0).

Algorithme
ST(1) ARCTAN(ST(1) / ST(0)) Dsempile la register de pile FPU

Mnmonique
Instruction FPATAN Opcode D9h F3h Description Cette instruction permet de calculer le rsultat de l'arc tangente de ST(1) par ST(0) et de mettre le rsultat dans le registre ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 848 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 461 463.

287

Assembleur 80x86
INTEL MPU 8087+

FPREM

Syntaxe
FPREM

Description Cette instruction permet de diviser le registre ST(0) par le registre ST(1) et enregistre le reste dans registre ST(0).

Algorithme
D exponent(ST(0)) - exponent(ST(1)) SI D < 64 ALORS Q * TruncateTowardZero(ST(0) / ST(1)) + ST(0) ST(0) - (ST(1) * Q) C2 0 C0, C3, C1 LeastSignificantBits(Q) SINON C2 1 N un implmentation d'un nombre indpendant entre 32 et 63 QQ * Tronque autour de zro((ST(0) / ST(1)) / 2(D-N))) ] ST(0) ST(0) - (ST(1) * QQ * 2(D-N)) FIN SI

Mnmonique
Instruction
FPREM

Opcode
D9h F8h

Description
Cette instruction permet de diviser le registre ST(0) par le registre ST(1) et enregistre le reste dans registre ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 849 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 464 466.

288

Assembleur 80x86 INTEL MPU 80387+

FPREM1

Syntaxe
FPREM1

Description Cette instruction permet de diviser le registre ST(0) par le registre ST(1) et enregistre le reste IEEE dans registre ST(0).

Mnmonique
Instruction FPREM1 Opcode D9h F5h Description Cette instruction permet de diviser le registre ST(0) par le registre ST(1) et enregistre le reste IEEE dans registre ST(0).

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 467 469.

289

Assembleur 80x86
INTEL MPU 8087+

FPTAN

Syntaxe
FPTAN

Description Cette instruction permet de diviser le registre ST(0) par le registre ST(1) et enregistre le reste dans registre ST(0).

Algorithme
SI ST(0) < 263 ALORS C2 0 ST(0) TAN(ST(0)) TOP TOP - 1 ST(0) 1.0 SINON C2 1 FIN SI

Mnmonique
Instruction
FPTAN

Opcode
D9h F2h

Description
Cette instruction permet de diviser le registre ST(0) par le registre ST(1) et enregistre le reste dans registre ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 849 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 470 472.

290

Assembleur 80x86
Cyrix 486 avec FPU
Syntaxe FRICHOP

FRICHOP
FPU: Round to Integer chop

Description Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 dcimal selon la mthode CHOP.

Algorithme ST arrondissement( ST,CHOP )

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 dcimal selon la mthode CHOP.

FRICHOP

DDh FCh

291

Assembleur 80x86
Cyrix 486 avec FPU
Syntaxe FRINEAR

FRINEAR
FPU: Round to Integer Near

Description Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 dcimal selon la mthode du plus proche.

Algorithme ST arrondissement( ST,NEAREST )

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 dcimal selon la mthode du plus proche.

FRINEAR

DFh FCh

292

Assembleur 80x86
Cyrix 486 avec FPU
Syntaxe FRINT2

FRINT2
FPU: Round to Integer Near

Description Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 dcimal selon la mthode du plus proche et si le nombre est exactement la moiti, alors l'instruction arrondit au signe de l'infini.

Algorithme SI exactement la moiti ALORS ST SIGN(ST) x arrondissement( | ST | + 0,5 ; NEAREST) SINON ST arrondissement( ST,NEAREST ) FIN SI

Mnmonique Instruction FRINT2 Opcode DBh FCh Description Cette instruction permet d'effectuer le calcul de l'arrondissement de ST avec 0 dcimal selon la mthode du plus proche et si le nombre est exactement la moiti, alors l'instruction arrondit au signe de l'infini.

293

Assembleur 80x86 INTEL MPU 8087+

FRNDINT Float RouND INTeger

Syntaxe
FRNDINT

Description Cette instruction permet d'arrondir le registre ST(0) l'entier le plus proche et enregistre son rsultat dans le registre ST(0).

Algorithme
ST(0) * ST(0) +

Mnmonique
Instruction FRNDINT Opcode D9h FCh Description Cette instruction permet d'arrondir le registre ST(0) l'entier le plus proche et enregistre son rsultat dans le registre ST(0).

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 473 474.

294

Assembleur 80x86
INTEL MPU 8087+

FRSTOR
Float ReSTORe

Syntaxe
FRSTOR source

Description Cette instruction permet de restituer l'tat du coprocesseur prcdamment sauvegard dans l'emplacement mmoire spcifi par source.

Algorithme
FPUControlWord source[FPUControlWord) FPUStatusWord source[FPUStatusWord) FPUTagWord source[FPUTagWord) FPUDataPointer source[FPUDataPointer) FPUInstructionPointer source[FPUInstructionPointer) FPULastInstructionOpcode source[FPULastInstructionOpcode) ST(0) source[ST(0)] ST(1) source[ST(1)] ST(2) source[ST(2)] ST(3) source[ST(3)] ST(4) source[ST(4)] ST(5) source[ST(5)] ST(6) source[ST(6)] ST(7) source[ST(7)]

Mnmonique
Instruction
FRSTOR mem

Opcode
DDh /4

Description
Cette instruction permet de restituer l'tat du coprocesseur prcdamment sauvegard dans l'emplacement mmoire spcifi par source.

295

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 849 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 475 477.

296

Assembleur 80x86
INTEL MPU 8087+

FSAVE
Float Save

Syntaxe
FSAVE source

Description Cette instruction permet de sauvegarder l'tat courant du coprocesseur dans l'emplacement mmoire spcifi par source.

Algorithme
source(FPUControlWord) FPUControlWord source(FPUStatusWord) FPUStatusWord source(FPUTagWord) FPUTagWord source(FPUDataPointer) FPUDataPointer source(FPUInstructionPointer) FPUInstructionPointer source(FPULastInstructionOpcode) FPULastInstructionOpcode source(ST(0)) ST(0) source(ST(1)) ST(1) source(ST(2)) ST(2) source(ST(3)) ST(3) source(ST(4)) ST(4) source(ST(5)) ST(5) source(ST(6)) ST(6) source(ST(7)) ST(7) FPUControlWord 037Fh FPUStatusWord 0 FPUTagWord FFFFh FPUDataPointer 0 FPUInstructionPointer 0 FPULastInstructionOpcode 0

Mnmonique
Instruction
FSAVE mem

Opcode
9Bh DDh /6

Description
Cette instruction permet de sauvegarder l'tat courant du

297

coprocesseur dans l'emplacement mmoire spcifi par source.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 849 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 478 481.

298

Assembleur 80x86 INTEL MPU 8087+

FSCALE Float Scale

Syntaxe
FSCALE

Description Cette instruction permet d'effectuer la multiplication du registre ST(0) par 2 puissance le registre ST(1) et sauvegarde le rsultat dans le registre ST(0).

Algorithme
ST(0) ST(0) x 2ST(1)

Mnmonique
Instruction FSCALE Opcode D9h FDh Description Cette instruction permet d'effectuer la multiplication du registre ST(0) par 2 puissance le registre ST(1) et sauvegarde le rsultat dans le registre ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 849 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 482 483.

299

Assembleur 80x86 INTEL MPU 80287

FSETPM Float SETting Protected Mode

Syntaxe
FSETPM

Description Cette instruction permet de faire passer le coprocesseur mathmatique en mode protg.

Mnmonique
Instruction Opcode Description Cette instruction permet de faire passer le coprocesseur mathmatique en mode protg.

FSETPM

DBh E4h

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 849

300

Assembleur 80x86
INTEL MPU 80387+

FSIN
Float SINus

Syntaxe
FSIN

Description Cette instruction permet d'effectuer le calcule de la fonction trigonomtrique du sinus du registre ST(0) et le copie dans le registre ST(1), le registre ST(0) prend la valeur 1,0.

Algorithme
SI ST(0) < 263 ALORS C2 0 ST(0) sin(ST(0)) SINON C2 1 FIN SI

Mnmonique
Instruction
FSIN

Opcode
D9h FEh

Description
Cette instruction permet d'effectuer le calcule de la fonction trigonomtrique du sinus du registre ST(0) et le copie dans le registre ST(1), le registre ST(0) prend la valeur 1,0.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 850 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 484 485.

301

Assembleur 80x86
INTEL MPU 8087+

FSINCOS
Float SINus COSinus

Syntaxe
FSINCOS

Description Cette instruction permet d'effectuer le calcule de la fonction trigonomtrique du sinus et du cosinus du registre ST(0) puis copie le rsultat du sinus dans le registre ST(0) et le cosinus dans le registre ST(1).

Algorithme
SI ST(0) < 263 ALORS C2 0 TEMP COS(ST(0)) ST(0) SIN(ST(0)) TOP TOP - 1 ST(0) TEMP SINON C2 1 FIN SI

Mnmonique
Instruction
FSINCOS

Opcode
D9h FBh

Description
Cette instruction permet d'effectuer le calcule de la fonction trigonomtrique du sinus et du cosinus du registre ST(0) puis copie le rsultat du sinus dans le registre ST(0) et le cosinus dans le registre ST(1).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 850 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 486 489.

302

Assembleur 80x86 INTEL MPU 8087+

FSQRT Float SQuaRed rooT

Syntaxe
FSQRT

Description Cette instruction permet d'extraire la racine carre du registre ST(0) et de copier son rsultat dans le registre ST(0).

Algorithme
ST(0) (ST(0))

Mnmonique
Instruction FSQRT Opcode D9h FAh Description Cette instruction permet d'extraire la racine carre du registre ST(0) et de copier son rsultat dans le registre ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 850 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 489 490.

303

Assembleur 80x86 INTEL MPU 8087+

FST Float in ST(0)

Syntaxe
FST cible

Description Cette instruction permet de copier la valeur rel contenu le registre ST(0) vers une cible.

Algorithme
cible ST(0)

Mnmonique
Instruction
FST mem32 FST mem64 FST fpureg

Opcode
D9h /2 DDh /2 DDh (D0h+r)

Description
Cette instruction permet de copier la valeur rel contenu le registre ST(0) vers une cible. Cette instruction permet de copier la valeur rel contenu le registre ST(0) vers une cible. Cette instruction permet de copier la valeur rel contenu le registre ST(0) vers une cible.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 850 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 491 493.

304

Assembleur 80x86
INTEL MPU 8087+

FSTCW
Float ST in Control Word

Syntaxe
FSTCW cible

Paramtres
Nom Description cible Ce paramtre permet d'indiquer l'oprande reevant le rsultat du mot de contrle CW

Description Cette instruction permet de copier le mot de contrle CW vers une cible.

Algorithme
cible FPUControlWord

Mnmonique
Instruction
FSTCW mem16

Opcode
9Bh D9h /7

Description
Cette instruction permet de copier le mot de contrle CW vers une cible.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 850 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 494 496.

305

Assembleur 80x86 INTEL MPU 8087+

FSTENV Float ST in ENVironment

Syntaxe
FSTENV cible

Description Cette instruction permet de copier l'environnement du coprocesseur mathmatique vers une cible.

Algorithme
cible(FPUControlWord) FPUControlWord cible(FPUStatusWord) FPUStatusWord cible(FPUTagWord) FPUTagWord cible(FPUDataPointer) FPUDataPointer cible(FPUInstructionPointer) FPUInstructionPointer cible(FPULastInstructionOpcode) FPULastInstructionOpcode

Mnmonique
Instruction
FSTENV mem

Opcode
9Bh D9h /6

Description
Cette instruction permet de copier l'environnement du coprocesseur mathmatique vers une cible.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 850 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 497 499.

306

Assembleur 80x86 INTEL MPU 8087+

FSTP Float in ST & Position

Syntaxe
FSTP cible

Description Cette instruction permet de copier un nombre entier et prendre le contenu du registre ST(0) dans la pile de registres (dpilage).

Algorithme
cible ST(0) Desempile le registre de pile

Mnmonique
Instruction
FSTP mem32 FSTP mem64 FSTP mem80 FSTP fpureg

Opcode
D9h /3 DDh /3 DBh /7 DDh (D8h+r)

Description
Cette instruction permet de copier un nombre entier et prendre le contenu du registre ST(0) dans la pile de registres (dpilage). Cette instruction permet de copier un nombre entier et prendre le contenu du registre ST(0) dans la pile de registres (dpilage). Cette instruction permet de copier un nombre entier et prendre le contenu du registre ST(0) dans la pile de registres (dpilage). Cette instruction permet de copier un nombre entier et prendre le contenu du registre ST(0) dans la pile de registres (dpilage).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 850 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 491 493.

307

Assembleur 80x86 INTEL MPU 8087+

FSTSW

Syntaxe
FSTSW cible

Description Cette instruction permet de copier le mot d'tat du coprocesseur mathmatique vers une cible.

Algorithme
cible FPUStatusWord

Mnmonique
Instruction
FSTSW mem16 FSTSW AX

Opcode
9Bh DDh /7 9Bh DFh E0h

Description

Prrequis

Cette instruction permet de copier le mot d'tat INTEL 8087+ du coprocesseur mathmatique vers une cible. Cette instruction permet de copier le mot d'tat INTEL 80287+ du coprocesseur mathmatique vers le registre AX.

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 851 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 500 502.

308

Assembleur 80x86 INTEL MPU 8087+

FSUB Float Subtract

Syntaxe
FSUB source

Description Cette instruction permet de soustraire un nombre entier du registre ST(0).

Algorithme
ST ST - source

Mnmonique
Instruction FSUB mem32 Opcode D8h /4 Description Cette instruction permet de soustraire un nombre entier du registre ST(0). Cette instruction permet de soustraire un nombre entier du registre ST(0). Cette instruction permet de soustraire un nombre entier du registre ST(0). Cette instruction permet de soustraire un nombre entier du

FSUB mem64

DCh /4

FSUB fpureg

D8h (E0h+r)

FSUB ST0,fpureg

D8h (E0h+r)

309

registre ST(0). FSUB TO fpureg DCh (E8h+r) Cette instruction permet de soustraire un nombre entier du registre ST(0). Cette instruction permet de soustraire un nombre entier du registre ST(0).

FSUB fpureg,ST0

DCh (E8h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 851 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 503 506.

310

Assembleur 80x86 INTEL MPU 8087+

FSUBP Float Subtract & Pointer

Syntaxe
FSUBP source

Description Cette instruction permet de soustraire un nombre entier du registre ST(0) et copie le registre ST(0) dans la pile de registres.

Algorithme
ST ST - source Dsempile le registre de pile

Mnmonique
Instruction
FSUBP fpureg FSUBP fpureg,ST0

Opcode
DEh (E8h+r) DEh (E8h+r)

Description
Cette instruction permet de soustraire un nombre entier du registre ST(0) et copie le registre ST(0) dans la pile de registres. Cette instruction permet de soustraire un nombre entier du registre ST(0) et copie le registre ST(0) dans la pile de registres.

Rfrences
Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 503 506.

311

Assembleur 80x86 INTEL MPU 8087+

FSUBPP

Syntaxe
FSUBPP source

Description Cette instruction permet de soustraire un nombre entier du registre ST(0) et copie le registre ST(0) dans la pile de registres.

Remarque L'utilisation de cette instruction est dconseille, il est prfrable d'utiliser plutt FSUBP car cette instruction est trs peu supporte par les compilateurs.

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 851

312

Assembleur 80x86
INTEL MPU 8087+

FSUBR

Syntaxe
FSUBR source

Description Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0).

Algorithme
ST source - ST

Mnmonique
Instruction
FSUBR mem32 FSUBR mem64 FSUBR fpureg FSUBR ST0,fpureg FSUBR TO fpureg FSUBR fpureg,ST0

Opcode
D8h /5 DCh /5 D8h (E8h+r) D8h (E8h+r) DCh (E0h+r) DCh (E0h+r)

Description
Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0). Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0). Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0). Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0). Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0). Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0).

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 851 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 507 510.

313

Assembleur 80x86 INTEL MPU 8087+

FSUBRP

Syntaxe
FSUBRP source

Description Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0) et copie le registre ST(0) dans la pile de registres.

Algorithme
ST source - ST Dsempile le registre de pile

Mnmonique
Instruction
FSUBRP fpureg

Opcode
DEh (E0h+r)

Description
Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0) et copie le registre ST(0) dans la pile de registres. Cette instruction permet de soustraire le registre ST(0) du nombre entier et place le rsultat dans le registre ST(0) et copie le registre ST(0) dans la pile de registres.

FSUBRP fpureg,ST0

DEh (E0h+r)

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 851 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 507 510.

314

Assembleur 80x86
INTEL MPU 8087+ Syntaxe FTST

FTST
Float TeST

Description Cette instruction permet de comparer le sommet de la pile avec la valeur 0,0 et dfinit les indicateurs d'tats C0 et C3 de faon appropri.

Algorithme
EVALUER CAS relation de l'oprande DE CAS Pas comparable: C3 1 C2 1 C0 1 CAS ST(0) > 0.0: C3 0 C2 0 C0 0 CAS ST(0) < 0.0: C3 0 C2 0 C0 1 CAS ST(0) 0.0: C3 1 C2 0 C0 0 FIN EVALUER CAS

Mnmonique
Instruction FTST Opcode D9h E4h Description Cette instruction permet de comparer le sommet de la pile avec la valeur 0,0 et dfinit les indicateurs d'tats C0 et C3 de faon appropri.

315

Rfrences
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 851 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 511 512.

316

Assembleur 80x86 INTEL MPU 80387+

FUCOM Float Unordered Compare

Syntaxe
FUCOM fpureg FUCOM ST0,fpureg

Description Cette instruction compare le registre ST0 avec un oprande et fixe les drapeaux de faon appropri.

Algorithme
EVALUER CAS (relation de l'oprande) DE CAS ST(0) > ST(i): ZF 0 PF 0 CF 0 CAS ST(0) < ST(i): ZF 0 PF 0 CF 1 CAS ST(0) = ST(i): ZF 1 PF 0 CF 0 FIN EVALUER CAS

Mnmonique

317

Instruction FUCOM fpureg

Opcode DDh (E0h+r)

Description Cette instruction compare le registre ST0 avec un oprande et fixe les drapeaux de faon appropri. Cette instruction compare le registre ST0 avec un oprande et fixe les drapeaux de faon appropri.

FUCOM ST0,fpureg

DDh (E0h+r)

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 513 515.

318

Assembleur 80x86
INTEL Pentium III+

FUCOMI
Compare Real and Set EFLAGS

Syntaxe
FUCOMI ST, ST(i)

Description Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et vrifie l'ordre des valeurs et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des rsultats.

Mnmonique
Instruction FUCOMI ST0,STi Opcode DBh (E8h+i) Description Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et vrifie l'ordre des valeurs et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des rsultats.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 414 416.

319

Assembleur 80x86
INTEL Pentium III+

FUCOMIP
Compare Real and Set EFLAGS

Syntaxe
FUCOMIP ST, ST(i)

Description Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et vrifie l'ordre des valeurs et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des rsultats et dsempile de la pile la valeur dans le registre.

Mnmonique
Instruction FUCOMIP ST0,STi Opcode DFh (E8h+i) Description Cette instruction permet d'effectuer la comparaison de ST(0) avec ST(i) et vrifie l'ordre des valeurs et fixe la valeur drapeaux ZF, PF et CF du registre EFLAGS en fonction des rsultats et dsempile de la pile la valeur dans le registre.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 414 416.

320

Assembleur 80x86 INTEL MPU 80387+

FUCOMP Float Unordered Compare Pop Stack

Syntaxe
FUCOMP fpureg FUCOMP ST0,fpureg

Description Cette instruction compare le registre ST0 avec un oprande et fixe les drapeaux de faon appropri et dsempile la pile.

Mnmonique
Instruction FUCOMP fpureg Opcode DDh (E8h+r) Description Cette instruction compare le registre ST0 avec un oprande et fixe les drapeaux de faon appropri et dsempile la pile. Cette instruction compare le registre ST0 avec un oprande et fixe les drapeaux de faon appropri et dsempile la pile.

FUCOMP ST0,fpureg

DDh (E8h+r)

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 513 515.

321

Assembleur 80x86 INTEL MPU 80387+

FUCOMPP Float Unordered Compare Pop & Pop Stack

Syntaxe
FUCOMPP

Description Cette instruction compare le registre ST0 avec le registre ST1 et fixe les drapeaux de faon appropri et dsempile les registres ST0 et ST1 de la pile.

Mnmonique
Instruction FUCOMPP Opcode DAh E9h Description Cette instruction compare le registre ST0 avec le registre ST1 et fixe les drapeaux de faon appropri et dsempile les registres ST0 et ST1 de la pile.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 513 515.

322

Assembleur 80x86 INTEL MPU 8087+

FWAIT Float WAIT

Syntaxe
FWAIT

Description Cette instruction permet d'attendre la fin de l'excution d'une commande avant de poursuivre.

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 851

323

Assembleur 80x86 INTEL MPU 8087+

FXAM Float eXAMine

Syntaxe
FXAM

Description Cette instruction permet d'examiner le sommet de la pile et dfinit les indicateurs d'tat C0 et C3 de faon appropri.

Algorithme
C1 signe du bit de ST * 0 pour positif, 1 pour ngatif EVALUER CAS (valeur de la classe ou nombre dans ST(0)) DE CAS Non support: C3 0 C2 0 C0 0 CAS NaN: C3 0 C2 0 C0 1 CAS Normal: C3 0 C2 1 C0 0 CAS Infini: C3 0 C2 1 C0 1 CAS Zro: C3 1 C2 0 C0 0 324

CAS Vide: C3 1 C2 0 C0 1 CAS Anormal: C3 1 C2 1 C0 0 FIN EVALUER CAS

Mnmonique
Instruction FXAM Opcode D9h E5h Description Cette instruction permet d'examiner le sommet de la pile et dfinit les indicateurs d'tat C0 et C3 de faon appropri.

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 852 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 516 517.

325

Assembleur 80x86 INTEL MPU 8087+

FXCH Float eXchange

Syntaxe
FXCH FXCH fpureg FXCH fpureg,ST0 FXCH ST0,fpureg

Description Cette instruction permet d'changer le contenu d'une expression avec celle du registre ST(0) s'il est omis.

Algorithme
SI nombre d'oprande est 1 ALORS temp ST(0) ST(0) fpureg fpureg temp SINON temp ST(0) ST(0) ST(1) ST(1) temp FIN SI

Mnmonique
Instruction Opcode Description

326

FXCH

D9h C9h

Cette instruction permet d'changer le contenu d'une expression avec celle du registre ST(0) s'il est omis. Cette instruction permet d'changer le contenu d'une expression avec celle du registre ST(0) s'il est omis. Cette instruction permet d'changer le contenu d'une expression avec celle du registre ST(0) s'il est omis. Cette instruction permet d'changer le contenu d'une expression avec celle du registre ST(0) s'il est omis. Cette instruction permet d'changer le contenu d'une expression avec celle du registre ST(0) s'il est omis.

FXCH fpureg

D9h (C8h+r)

FXCH fpureg

D9h C9h

FXCH fpureg,ST0

D9h (C8h+r)

FXCH ST0,fpureg

D9h C8h+r

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 852 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 518 519.

327

Assembleur 80x86
INTEL MMX-2+

FXRSTOR
Fast Restore

Syntaxe
FXRSTOR source

Description Cette instruction permet de restituer rapidement 94 (en mode 16 bits) ou 108 (en mode 32 bits) octets d'un contexte de coprocesseur mathmatique vers la mmoire.

Mnmonique
Instruction Opcode Description Cette instruction permet de restituer rapidement 94 (en mode 16 bits) ou 108 (en mode 32 bits) octets d'un contexte de coprocesseur mathmatique vers la mmoire.

FXRSTOR mem512byte

0Fh AEh mm001mmm

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 520 523.

328

Assembleur 80x86
INTEL MMX-2+

FXSAVE
Fast Save

Syntaxe
FXSAVE source

Description Cette instruction permet de sauvegarder rapidement 94 (en mode 16 bits) ou 108 (en mode 32 bits) octets d'un contexte de coprocesseur mathmatique de la mmoire.

Mnmonique
Instruction Opcode Description Cette instruction permet de sauvegarder rapidement 94 (en mode 16 bits) ou 108 (en mode 32 bits) octets d'un contexte de coprocesseur mathmatique de la mmoire.

FXSAVE mem512byte

0Fh AEh mm000mmm

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 524 534.

329

Assembleur 80x86 INTEL MPU 8087+

FXTRACT

Syntaxe
FXTRACT

Description Cette instruction permet de copier l'exposant du registre ST(0) dans le registre ST(1) comme nombre entier puis copie la mantisse dans le registre ST(0) comme nombre entier.

Algorithme
TEMP Signification(ST(0)) ST(0) Exponent(ST(0)) TOP TOP - 1 ST(0) TEMP

Mnmonique
Instruction FXTRACT Opcode D9h F4h Description Cette instruction permet de copier l'exposant du registre ST(0) dans le registre ST(1) comme nombre entier puis copie la mantisse dans la registre ST(0) comme nombre entier.

Rfrences 330

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 852 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 535 536.

331

Assembleur 80x86 INTEL MPU 8087+

FYL2X

Syntaxe
FYL2X

Description Cette instruction permet de calculer la multiplication du registre ST(1) par le logarithme du registre ST(0) dans la base 2 et copie le rsultat dans le registre ST(0).

Algorithme
LOG bx (LOG 2b)-1 * LOG 2x

Mnmonique
Instruction FYL2X Opcode D9h F1h Description Cette instruction permet de calculer la multiplication du registre ST(1) par le logarithme du registre ST(0) dans la base 2 et copie le rsultat dans le registre ST(0).

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 852 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 537 538.

332

Assembleur 80x86 INTEL MPU 8087+

FYL2XP1

Syntaxe
FYL2XP1

Description Cette instruction permet de calculer la multiplication du registre ST(1) par le logarithme du registre ST(0) plus 1 dans la base 2 et copie le rsultat dans le registre ST(0).

Algorithme
ST(1) ST(1) x log 2ST(0) Dsempile le registre de pile

Mnmonique
Instruction FYL2XP1 Opcode D9h F9h Description Cette instruction permet de calculer la multiplication du registre ST(1) par le logarithme du registre ST(0) plus 1 dans la base 2 et copie le rsultat dans le registre ST(0).

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 852 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 539 540.

333

Assembleur 80x86
SSE4.1

HADDPD
Packed Double-FP Horizontal Add

Syntaxe
HADDPD dest,source

Description Cette instruction permet d'effectuer l'addition horizontale de paquet de nombre rel de double prcision des deux oprandes.

Algorithme
dest(63..0) dest(63..0) + dest(127..64) dest(127..64) source(63..0) + source(127..64)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer l'addition horizontal de paquet de nombre rel de double prcision des deux oprandes.

HADDPD xmm1,xmm2/m128

66h 0Fh 7Ch /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 541 544.

334

Assembleur 80x86
SSE4.1

HADDPS
Packed Single-FP Horizontal Add

Syntaxe
HADDPS dest,source

Description Cette instruction permet d'effectuer l'addition horizontale de paquet de nombre rel de simple prcision des deux oprandes.

Algorithme
dest(31..0) dest(31..0) + dest(63..32) dest(63..32) dest(95..64) + dest(127..96) dest(95..64) source(31..0) + source(63..32) dest(127..96) source(95..64) + source(127..96)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer l'addition horizontale de paquet de nombre rel de simple prcision des deux oprandes.

HADDPS xmm1,xmm2/m128

F2h 0Fh 7Ch /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction
335

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 545 548.

336

Assembleur 80x86 INTEL 8088+

HLT HaLT

Syntaxe
HLT

Description Cette instruction permet de faire passer le microprocesseur en mode d'arrt. Toutefois, le processeur peut quitter cet tat lorsqu'une ligne matrielle RESET ou lorsqu'une interruption non-masquable (NMI) reoit un signal.

Mnmonique
Instruction HLT Opcode F4h Description Excute l'instruction d'arrt

Exceptions
Message #GP(Protection gnral) Mode rel Virtuel 8086 X Mode protg X Description Le CPL ne vaut pas 0.

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement STI CLI

Rfrences
337

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 811 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 258. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 549 550.

338

Assembleur 80x86
INTEL Pentium 4 (SSE3)+

HSUBPD
Packed Double-FP Horizontal Subtract

Syntaxe
HSUBPD destination, source

Description Cette instruction permet d'effectuer la soustraction horizontale de paquet de nombre rel de double prcision des deux oprandes.

Algorithme
destination(0..63) destination(0..63) - destination(64..127) destination(64..127) source(0..63) - source(64..127)

Mnmonique
Instruction Opcode Description Cette instruction permet de soustraire horizontalement les paquets de simple prcisions de xmm2/m128 xmm1

HSUBPD xmm1, xmm2/m128

66h 0Fh 7Dh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 551 555.

339

Assembleur 80x86
INTEL Pentium 4 (SSE3)+

HSUBPS
Packed Single-FP Horizontal Subtract

Syntaxe
HSUBPS destination, source

Description Cette instruction permet d'effectuer la soustraction horizontale de paquet de nombre rel de double prcision des deux oprandes.

Algorithme
destination(0..31) destination(0..31) - destination(32..63) destination(32..63) destination(64..95) - destination(96..127) destination(64..95) source(0..31) - source(32..63) destination(96..127) source(64..95) - source(96..127)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la soustraction horizontal de paquet de nombre rel de double prcision des deux oprandes.

HSUBPS xmm1, xmm2/m128

F2h 0Fh 7Dh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction
340

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 555 558.

341

Assembleur 80x86 INTEL 80386+

IBTS Insert Bit String

Syntaxe IBTS valeur,reg16 IBTS valeur,reg32

Description Cette instruction permet de faire un tableau de bits du deuxime oprand et le met dans le premier.

Mnmonique Instruction IBTS r/m16,reg16 Opcode 0Fh A7h /r Description Cette instruction permet de faire un tableau de bits du deuxime oprand et le met dans le premier. Cette instruction permet de faire un tableau de bits du deuxime oprand et le met dans le premier.

IBTS r/m32,reg32

66h 0Fh A7h /r

342

Assembleur 80x86
INTEL 80386 au Pentium Pro
Syntaxe ICEBP

ICEBP
In-Circuit Emulator

Description Cette instruction permet de passer en mode d'instruction ICE (In-Circuit Emulator) si le bit 12 du registre DR7 vaut 1 sinon il excute l'interruption 1.

Algorithme SI DR7(12) = 1 ALORS passe au mode d'instruction ICE SINON INT 1 FIN SI

Mnmonique Instruction Opcode Description Cette instruction permet de passer en mode d'instruction ICE (InCircuit Emulator) si le bit 12 du registre DR7 vaut 1 sinon il excute l'interruption 1.

ICEBP

F1h

343

Assembleur 80x86 INTEL 8088+

IDIV Division entire

Syntaxe
IDIV Oprande

Description Cette instruction permet d'effectuer une division signe (nombre entier). Le dividende est implicite; il est ajuster en fonction de la taille du diviseur. Le restant est toujours plus petit que le diviseur. Le type de diviseur dtermine quel registre l'instruction utilisera:
Taille Octet Mot Dividende Diviseur AX DX:AX Quotient Restant AH DX EDX

Oprande AL Oprande AX Oprande EAX

Double mot EDX:EAX

Algorithme
SI Oprande = 0 ALORS Interruption 0 SINON SI Oprande 8 bits ALORS AL AX Oprande AH AX MOD Oprande FIN SI SI Oprande 16 bits ALORS AX ( ( DX x 65536 ) + AX ) Oprande DX ( ( DX x 65536 ) + AX ) MOD Oprande FIN SI SI Oprande 32 bits ALORS EAX ( ( EDX x 65536 x 65536 ) + EAX ) Oprande 344

EDX ( ( EDX x 65536 x 65536 ) + EAX ) MOD Oprande FIN SI FIN SI

Mnmonique
Instruction Opcode Description Division entire de AX par le contenu d'un emplacement mmoire ou registre 8 bits et entrepose le quotient dans AL et restant dans AH. Division entire de DX:AX par le contenu d'un emplacement mmoire ou registre 16 bits et entrepose le quotient dans AX et restant dans DX. Division entire de EDX:EAX par le contenu d'un emplacement mmoire ou registre 32 bits et entrepose le quotient dans EAX et restant dans EDX. Division entire de RDX:RAX par le contenu d'un emplacement mmoire ou registre 64 bits et entrepose le quotient dans RAX et restant dans RDX.

IDIV reg/mem8

F6h /7

IDIV reg/mem16

F7h /7

IDIV reg/mem32

F7h /7

IDIV reg/mem64

F7h /7

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description L'oprande de diviseur vaut

#DE(Division par zro) X

345

0. Le quotient est trop large pour le registre dsign. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie

346

l'alignement)

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement IMUL DIV

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 811 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 404 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 113 114. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 559 562.

347

Assembleur 80x86 INTEL 8088+

IMUL Multiplication entire

Syntaxe
IMUL Oprande IMUL dest, src INTEL 8088+ INTEL 80286+

IMUL dest, src, imm INTEL 80386+

Description Cette instruction permet d'effectuer une multiplication signe (nombre entier). Le multiplicateur est implicite; il est ajuster en fonction de la taille de la base. Le produit est toujours plus grand que le multiplicateur. Le type de multiplication dtermine quel registre l'instruction utilisera:
Taille Octet Mot Base Multiplicateur Rsultat AL AX Oprande Oprande Oprande AX DX:AX EDX:EAX

Double mot EAX

Algorithme
SI Nombre d'oprande = 1 ALORS SI Taille de l'oprande en bits = 8 ALORS AX AL x Oprande SI (AH = 00h) OU (AH = FFh) ALORS CF 0 OF 0 SINON CF 1 348

OF 1 FIN SI SINON SI Taille de l'oprande en bits = 16 ALORS DX:AX AX x Oprande SI (DX = 0000h) OU (DX = FFFFh) ALORS CF 0 OF 0 SINON CF 1 OF 1 FIN SI SINON EDX:EAX EAX x Oprande SI ((EDX = 00000000h) OU (EDX = FFFFFFFFh)) ALORS CF 0 OF 0 SINON CF 1 OF 1 FIN SI FIN SI SINON SI Nombre d'oprande = 2 ALORS temp dest x src dest dest x src SI temp = dest ALORS CF 1 OF 1 SINON CF 0 OF 0 FIN SI SINON temp dest x src dest dest x src SI temp = dest ALORS CF 1 OF 1 SINON CF 0 OF 0 FIN SI 349

FIN SI FIN SI

Mnmonique
Instruction Opcode Description Multiplie le contenu du registre AL avec une oprande mmoire ou registre de 8 bits et met le rsultat entier dans le registre AX. Multiplie le contenu du registre AX avec une oprande mmoire ou registre de 16 bits et met le rsultat entier dans le registre DX:AX. Multiplie le contenu du registre EAX avec une oprande mmoire ou registre de 32 bits et met le rsultat entier dans le registre EDX:EAX. Multiplie le contenu du registre RAX avec une oprande mmoire ou registre de 64 bits et met le rsultat entier dans le registre RDX:RAX. Multiplie le contenu d'un registre de destination 16 bits avec une oprande mmoire ou registre de 16 bits et met le rsultat entier dans le registre de destination 16 bits. Multiplie le contenu d'un registre de destination 32 bits avec une oprande mmoire ou registre de 32 bits et met le rsultat entier dans le registre de destination 32 bits.

IMUL reg/mem8

F6h /5

IMUL reg/mem16

F7h /5

IMUL reg/mem32

F7h /5

IMUL reg/mem64

F7h /5

IMUL reg16, reg/mem16

0Fh AFh /r

IMUL reg32, reg/mem32

0Fh AFh /r

350

IMUL reg64, reg/mem64

0Fh AFh /r

Multiplie le contenu d'un registre de destination 64 bits avec une oprande mmoire ou registre de 64 bits et met le rsultat entier dans le registre de destination 64 bits. Multiplie le contenu d'une oprande mmoire ou registre de 16 bits par une valeur entire immdiate de 8 bits et met le rsultat entier dans le registre 16 bits. Multiplie le contenu d'une oprande mmoire ou registre de 32 bits par une valeur entire immdiate de 8 bits et met le rsultat entier dans le registre 32 bits. Multiplie le contenu d'une oprande mmoire ou registre de 64 bits par une valeur entire immdiate de 8 bits et met le rsultat entier dans le registre 64 bits. Multiplie le contenu d'une oprande mmoire ou registre de 16 bits par une valeur entire immdiate de 16 bits et met le rsultat entier dans le registre 16 bits. Multiplie le contenu d'une oprande mmoire ou registre de 32 bits par une valeur entire immdiate de 32 bits et met le rsultat entier dans le registre 32 bits. Multiplie le contenu d'une oprande mmoire ou registre de 64 bits par une valeur entire immdiate de 32 bits et met le rsultat entier dans le

IMUL reg16, reg/mem16, imm8 6Bh /r ib

IMUL reg32, reg/mem32, imm8 6Bh /r ib

IMUL reg64, reg/mem64, imm8 6Bh /r ib

IMUL reg16, reg/mem16,imm16 69h /r iw

IMUL reg32, reg/mem32,imm32 69h /r id

IMUL reg64, reg/mem64,imm32 69h /r id

351

registre 64 bits.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction

#AC(Vrifie l'alignement)

#GP(Protection gnral)

#PF(Faute de page)

352

#SS(Pile noncanonique)

Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement IDIV MUL

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 812 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 405 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 115. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 563 567.

353

Assembleur 80x86 INTEL 8088+

IN INput

Syntaxe
IN accumulateur,imm IN accumulateur,DX

Description Cette instruction permet de demander un octet ou un mot provenant du port d'entre/sortie et le retourne dans le registre accumulateur (AL, AX, EAX).

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON accumulateur Port(adresse) FIN SI SINON accumulateur Port(adresse) FIN SI

Mnmonique
Instruction Opcode Description

354

IN AL, imm8

E4h ib

Lit un octet dans un port d'entre/sortie l'adresse spcifi par l'imm8 et met le rsultat dans le registre AL. Lit un mot dans un port d'entre/sortie l'adresse spcifi par l'imm8 et met le rsultat dans le registre AX. Lit un double mot dans un port d'entre/sortie l'adresse spcifi par l'imm8 et met le rsultat dans le registre EAX. Lit un octet dans un port d'entre/sortie l'adresse spcifi par le registre DX et met le rsultat dans le registre AL. Lit un mot dans un port d'entre/sortie l'adresse spcifi par le registre DX et met le rsultat dans le registre AX. Lit un mot dans un port d'entre/sortie l'adresse spcifi par le registre DX et met le rsultat dans le registre EAX.

IN AX, imm8

E5h ib

IN EAX, imm8

E5h ib

IN AL, DX

ECh

IN AX, DX

EDh

IN EAX, DX

EDh

Exceptions
Message #GP(Protection gnral) Mode rel Virtuel 8086 X Mode protg Description Un ou plusieurs bits de permission d'entre/sortie

355

sont fixer par le TSS pour un accs au port. Le CPL est plus grand que le IOPL et une ou plusieurs bits de permission sont fixer par le TSS pour un accs au port. Une faute de page rsultat de l'excution de l'instruction

#PF(Faute de page)

Voir Rfrence Instruction des assembleur ports 80x86 d'entre/sortie Instruction

galement 80x86 OUT

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 812 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 117. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 568 569.

356

Assembleur 80x86 INTEL 8088+

INC Increment

Syntaxe
INC registre INC mmoire

Description Cette instruction permet d'incrmenter un registre ou un emplacement mmoire.

Algorithme
operande operande + 1

Mnmonique
Instruction Opcode Description Incrmente le contenu d'un emplacement registre ou mmoire de 8 bits de 1. Incrmente le contenu d'un emplacement registre ou mmoire de 16 bits de 1. Incrmente le contenu d'un emplacement registre ou mmoire de 32 bits de 1.

INC reg/mem8

FEh /0

INC reg/mem16

FFh /0

INC reg/mem32

FFh /0

357

INC reg/mem64

FFh /0

Incrmente le contenu d'un emplacement registre ou mmoire de 64 bits de 1. Incrmente le contenu d'un registre 16 bits de 1. Incrmente le contenu d'un registre 32 bits de 1.

INC reg16

40h +rw

INC reg32

40h +rd

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment

#SS(Pile noncanonique)

#GP(Protection gnral)

358

de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement ADD DEC

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 812 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 405 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 118. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 570 572.

359

Assembleur 80x86 INTEL 80286+

INS INput String

Syntaxe
INS oprande_cible,DX

Description Cette instruction permet de demander un octet, un mot ou un double mot du port d'entre/sortie et retourne le rsultat dans l'adresse ES:[DI] et incrmente/dcrmente le registre DI en fonction de la taille de l'oprande cible et de l'tat du drapeau de direction. L'adresse du port est contenue obligatoirement dans le registre DX.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON accumulateur Port(adresse) FIN SI SINON accumulateur Port(adresse) FIN SI SI (taille de l'oprande_cible = octet) ALORS SI DF = 0 ALORS (E)DI (E)DI + 1 SINON (E)DI (E)DI - 1 FIN SI SINON SI (taille de l'oprande_cible = mot) ALORS SI DF = 0 ALORS 360

(E)DI (E)DI + 2 SINON (E)DI (E)DI - 2 FIN SI SINON SI DF = 0 ALORS (E)DI (E)DI + 4 SINON (E)DI (E)DI - 4 FIN SI FIN SI

Mnmonique
Instruction Opcode Description Lecture d'un octet dans le port spcifi par le registre DX, et met le rsultat dans l'emplacement mmoire spcifi par ES:(R)DI. Enfin, incrmente et dcrmente le registre (R)DI. Lecture d'un mot dans le port spcifi par le registre DX, et met le rsultat dans l'emplacement mmoire spcifi par ES:(R)DI. Enfin, incrmente et dcrmente le registre (R)DI. Lecture d'un double mot dans le port spcifi par le registre DX, et met le rsultat dans l'emplacement mmoire spcifi par ES:(R)DI. Enfin, incrmente et dcrmente le registre (R)DI.

INS mem8, DX

6Ch

INS mem16, DX

6Dh

INS mem32, DX

6Dh

361

Exceptions
Message #GP(Protection gnral) Mode rel X Virtuel 8086 X Mode protg X Description Un ou plusieurs bits de permission d'entre/sortie sont fix par le TSS pour un accs au port. Une ou plusieurs permissions bit d'entre/sortie sont fixes dans le TSS d'un accs de port. Le CPL est plus grand que le IOPL et une ou plusieurs bits de permission sont fixer par le TSS pour un accs au port. L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulles est utilis

362

comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est active

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Rfrence Instruction des assembleur ports 80x86 d'entre/sortie Instruction

galement 80x86 OUT

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 813 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 120. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 573 577.

363

Assembleur 80x86 INTEL 80286+

INSB INput String Byte

Syntaxe
INSB

Description Cette instruction permet de demander un octet du port d'entre/sortie et retourne le rsultat dans l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 1 en fonction de l'tat du drapeau de direction. L'adresse du port est contenue obligatoirement dans le registre DX.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON accumulateur Port(adresse) FIN SI SINON accumulateur Port(adresse) FIN SI SI DF = 0 ALORS (E)DI (E)DI + 1 SINON (E)DI (E)DI - 1 FIN SI

Mnmonique

364

Instruction

Opcode

Description Lecture d'un octet dans le port spcifi par le registre DX, et met le rsultat dans l'emplacement mmoire spcifi par ES:(R)DI. Enfin, incrmente et dcrmente le registre (R)DI.

INSB

6Ch

Exceptions
Message #GP(Protection gnral) Mode rel X Virtuel 8086 X Mode protg X Description Un ou plusieurs bits de permission d'entre/sortie sont fix par le TSS pour un accs au port. Une ou plusieurs permissions bit d'entre/sortie sont fixes dans le TSS d'un accs de port. Le CPL est plus grand que lIOPL et une ou plusieurs bits de permission sont fixs par le TSS pour un

365

accs au port. L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulles est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Rfrence Instruction des assembleur ports 80x86 d'entre/sortie Instruction

galement 80x86 OUT

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 813 AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System
366

Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 120. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 573 577.

367

Assembleur 80x86 INTEL 80386+

INSD INput String Double word

Syntaxe
INSD

Description Cette instruction permet de demander un double mot du port d'entre/sortie et retourne le rsultat dans l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 4 en fonction de l'tat du drapeau de direction. L'adresse du port est contenue obligatoirement dans le registre DX.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON accumulateur Port(adresse) FIN SI SINON accumulateur Port(adresse) FIN SI SI DF = 0 ALORS (E)DI (E)DI + 4 SINON (E)DI (E)DI - 4 FIN SI

Mnmonique

368

Instruction INSD

Opcode 6Dh

Description Lecture d'un double mot dans le port spcifi par le registre DX, et met le rsultat dans l'emplacement mmoire spcifi par ES:(R)DI. Enfin, incrmente et dcrmente le registre (R)DI.

Exceptions
Message #GP(Protection gnral) Mode rel X Virtuel 8086 X Mode protg X Description Un ou plusieurs bits de permission d'entre/sortie sont fix par le TSS pour un accs au port. Une ou plusieurs permission bit d'entre/sortie sont fixer dans le TSS d'un accs de port. Le CPL est plus grand que lIOPL et une ou plusieurs bits de permission sont fix par le TSS pour un accs au port.

369

L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulles est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Rfrence Instruction des assembleur ports 80x86 d'entre/sortie Instruction

galement 80x86 OUT

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 814 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 120.
370

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 573 577.

371

Assembleur 80x86
SSE4.1

INSERTPS
Insert Packed Single Precision Floating-Point Value

Syntaxe
INSERTPS dest,source,immediat

Description Cette instruction permet d'insrer une valeur rel de simple prcision d'un oprande source dans l'emplacement d'un registre d'oprande de destination et met des 0 dans les donnes en dehors du masque de destination.

Algorithme
SI source est un registre ALORS COUNT_S immediat(7..6) SINON COUNT_S 0 FIN SI COUNT_D immediat(5..4) ZMASK immediat(3..0) EVALUER CAS COUNT_S DE CAS 0: TMP source(31..0) CAS 1: TMP source(63..32) CAS 2: TMP source(95..64) CAS 3: TMP source(127..96) FIN EVALUER CAS EVALUER CAS COUNT_D DE CAS 0: TMP2(31..0) TMP TMP2(127..32) dest(127..32) CAS 1: TMP2(63..32) TMP

372

TMP2(31..0) dest(31..0) TMP2(127..64) dest(127..64) CAS 2: TMP2(95..64) TMP TMP2(63..0) dest(63..0) TMP2(127..96) dest(127..96) CAS 3: TMP2(127..96) TMP TMP2(95..0) dest(95..0) FIN EVALUER CAS SI ZMASK(0) = 1 ALORS dest(31..0) 00000000h SINON dest(31..0) TMP2(31..0) SI ZMASK(1) = 1 ALORS dest(63..32) 00000000h SINON dest(63..32) TMP2(63..32) SI ZMASK[2] = 1 ALORS dest(95..64) 00000000h SINON dest(95..64) TMP2(95..64) SI ZMASK[3] = 1 ALORS dest(127..96) 00000000h SINON dest(127..96) TMP2(127..96) FIN SI FIN SI FIN SI FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'insrer une valeur rel de simple prcision d'un oprande source dans l'emplacement d'un registre

INSERTPS xmm1,xmm2/m32,imm8 66h 0Fh 3Ah 21h /r ib

373

d'oprande de destination et met des 0 dans les donnes en dehors du masque de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 578 580.

374

Assembleur 80x86 INTEL 80286+

INSW INput String Word

Syntaxe
INSW

Description Cette instruction permet de demander un mot du port d'entre/sortie et retourne le rsultat dans l'adresse ES:[DI] et incrmente/dcrmente le registre DI de 2 en fonction de l'tat du drapeau de direction. L'adresse du port est contenu obligatoirement dans le registre DX.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON accumulateur Port(adresse) FIN SI SINON accumulateur Port(adresse) FIN SI SI DF = 0 ALORS (E)DI (E)DI + 2 SINON (E)DI (E)DI - 2 FIN SI

Mnmonique

375

Instruction

Opcode

Description Lecture d'un mot dans le port spcifi par le registre DX, et met le rsultat dans l'emplacement mmoire spcifi par ES:(R)DI. Enfin, incrmente et dcrmente le registre (R)DI.

INSW

6Dh

Exceptions
Message #GP(Protection gnral) Mode rel X Virtuel 8086 X Mode protg X Description Un ou plusieurs bits de permission d'entre/sortie sont fixer par le TSS pour un accs au port. Une ou plusieurs permission bit d'entre/sortie sont fixer dans le TSS d'un accs de port. Le CPL est plus grand que le IOPL et une ou plusieurs bits de permission sont fixer par le TSS pour un accs au port.

376

L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Rfrence Instruction des assembleur ports 80x86 d'entre/sortie Instruction

galement 80x86 OUT

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 813 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 120.
377

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 573 577.

378

Assembleur 80x86
INTEL 8088+

INT
Interrupt

Syntaxe
INT numro

Description Cette instruction permet d'excuter l'interruption avec le numro spcifi.

Algorithme
drapeaux prserv SP SP - 2 drapeau IF 0 drapeau TF 0 CS prserv SP SP - 2 IP prserv CS Donne l'adresse mmoire (numro x 4 + 2) IP Donne l'adresse mmoire (numro x 4)

Mnmonique
Instruction Opcode Description Cette instruction permet d'excuter l'interruption avec le numro 03h. Appel une routine de service d'interruption spcifi par le vecteur

INT 03h

CCh

INT imm8

CDh ib

379

imm8.

Exceptions
Message #TS(Slecteur) Mode rel Virtuel 8086 X Mode protg X Description Une partie de l'changeur de pile, la destination du slecteur de segment de pile ou le registre (R)SP dans le TSS est en dehors des limites du TSS. Une partie de l'changeur de pile, la destination du slecteur de segment de pile ou le registre (R)SP dans le TSS a slecteur nulle. Une partie de l'changeur de pile, la destination du slecteur du bit TS est fix, mais le slecteur LDT a un slecteur

380

nulle. Une partie de l'changeur de pile, la destination du slecteur du TSS est en dehors des limites des tables de descripteur GDT ou LDT. Une partie de l'changeur de pile, la destination du slecteur du TSS contient un RPL n'tant pas gale au DPL. Une partie de l'changeur de pile, la destination du slecteur du TSS contient un DPL n'tant pas gale au CPL du slecteur de code segment. Une partie de l'changeur de pile, la destination du

381

slecteur du TSS n'est pas dans un segment crivable. L'accs au segment de code, le pont d'interruption, le pont de la trappe, le pont de la tche ou le TSS ne sont pas prsent. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Aprs un change de pile, une adresse mmoire dpasse les limites du segment de pile ou est noncanonique. Aprs un change de pile, le

#NP(Segment non prsent)

#SS(Pile)

#SS(Slecteur)

382

registre SS est charg dans un slecteur de segment non-nulle et le segment est marqu comme non prsent. #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique La destination de dplacement dpasse la limite du segment de code ou n'est pas canonique. Le IOPL est infrieur 3 et le CR4.VME vaut 0. Le IOPL est infrieur 3, le CR4.VME vaut 1 et le bit correspondant la

383

redirection de la cartographie d'interruption VME vaut 1. #GP(Slecteur) X X X Le vecteur d'interruption est en dehors des limites du IDT. Le descripteur d'IDT n'est pas une interruption, une trappe ou une tche de pont dans un mode legacy ou n'est pas une interruption 64 bits ou un pont de trappe pour un mode long. Le DPL de l'interruption, de la trappe, du descripteur de pont de tche est infrieur au CPL. Le slecteur de segment

384

spcifi par l'interruption ou la trappe du pont est un bit TI fix, mais le slecteur LDT a un slecteur nulle. X X Le slecteur de segment spcifi par l'interruption ou la trappe du pont dpasse la limite de la table de descripteur ou a un slecteur nulle. Le descripteur de segment spcifi par l'interruption ou le pont de la trappe n'est pas un segment de code dans un mode legacy, ou un segment de code 64 bits dans un mode long. Le segment de

385

DPL spcifi par l'interruption ou le pont de la trappe est suprieur au CPL. X Le segment de DPL spcifi par l'interruption ou le pont ne pointe pas sur 0 ou est dans un segment conforme. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Exemples L'exemple suivant permet d'afficher un message Bonjour sur la console du systme d'exploitation DOS :
386

1. 2. 3. 4.

Message DB 'Bonjour$' ; Place des instructions ici MOV AH,09h MOV DX,Offset Message 5. INT 21h

On obtiendra le rsultat suivant :


Bonjour

Voir Liste Instruction Instruction des 80x86 80x86

galement interruptions Instruction INTO Instruction IRET

assembleur assembleur

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 814 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 405 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 122 128. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 581 595.

387

Assembleur 80x86 INTEL 8086+

INTO Interrupt Overflow

Syntaxe
INTO

Description Cette instruction permet d'excuter l'interruption numro 4 si le drapeau de dbordement (OF) est fix sur 1. Parcontre, si le drapeau de dbordement (OF) est gal 0, l'excution se poursuit tout simplement l'instruction suivante.

Algorithme
SI OF = 1 ALORS SP SP - 2 Les drapeaux sont prserv SP SP - 2 CS est prserv SP SP - 2 IP est prserv CS Donne la position mmoire 12h IP Donne la position mmoire 10h FIN SI

Mnmonique
Instruction Opcode Description Appel une exception de dbordement si le drapeau de dbordement vaut 1. Invalide en

INTO

CEh

388

mode 64 bits.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Cette instruction est excut avec OF fix 1. Cette instruction est excut en mode 64-bits

#OF(Dbordement)

#UD(Opcode invalide)

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement INT BOUND

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 814 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 129. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 581 595.

389

Assembleur 80x86 INTEL 80486+

INVD Invalidate Internal Cache

Syntaxe
INVD

Description Cette instruction permet de dsactiver et de vider le tampon interne du micro-processeur.

Algorithme
Vide le cache interne ( Cela signifie que toutes les lignes de caches internes sont dfinit comme invalide ) Envoi un signal au cache externe vider

Mnmonique
Instruction Opcode Description Invalide le cache interne et les dclencheurs de cache externe invalide

INVD

0Fh 08h

Exceptions
Message #GP(Protection gnral) Mode rel Virtuel 8086 X Mode protg X Description Le CPL ne vaut pas 0.

390

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement WBINVD CLFLUSH

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 596 597.

391

Assembleur 80x86
INTEL VMX (Virtualisation)

INVEPT
Invalidate Translations Derived from EPT

Syntaxe
INVEPT destination, source

Description Cette instruction permet d'invalider la cartographie dans translation des tampons (TLB) et des caches de pagination structur driv des tables de pages tendue (EPT).

Algorithme
SI (pas dans opration VMX ) ou (RFLAGS.VM = 1) ou (IA32_EFER.LMA = 1 et CS.L = 0) ALORS EXCEPTION #UD SINON SI dans VMX mais pas l'opration racine ALORS quitte le VM SINON SI CPL > 0 ALORS EXCEPTION #GP(0) SINON INVEPT_TYPE valeur de l'oprande de registre SI IA32_VMX_EPT_VPID_CAP MSR inqieue que le processus ne support pas INVEPT_TYPE ALORS VMfail(Opration invalide INVEPT/INVVPID) SINON INVEPT_DESC valeur d'oprande mmoire EPTP INVEPT_DESC(63..0) EVALUER CAS INVEPT_TYPE CAS 1: SI entre VM avec l'active EPT VM contrle d'excution fix 1 en chec cause de la valeur EPTP ALORS VMfail(Oprande invalide INVEPT/INVVPID) SINON Cartographie invalide associ avec EPTP(51..12) 392

succs VM FIN SI CAS 2: Cartographie invalide associ avec tous les EPTPs succs VM FIN EVALUER CAS FIN SI FIN SI

Mnmonique
Instruction INVEPT r64, m128 Opcode 66h 0Fh 38h 80h Description Cette instruction permet d'invalider la cartographie dans translation des tampons (TLB) et des caches de pagination structur driv des tables de pages tendue (EPT). Cette instruction permet d'invalider la cartographie dans translation des tampons (TLB) et des caches de pagination structur driv des tables de pages tendue (EPT).

INVEPT r32, m128

66h 0Fh 38h 80h

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 570 572.

393

Assembleur 80x86 INTEL 80486+

INVLPG Invalidate TLB Entry

Syntaxe
INVLPG

Description Cette instruction permet d'invalider les transferts du TLB (Translation Lookaside Buffer) du micro-processeur.

Mnmonique
Instruction Opcode Description Invalide l'entre TLB pour la page contenant en emplacement mmoire spcifi.

INVLPG mem8

0Fh 01h /7

Exceptions
Message #GP(Protection gnral) Mode rel Virtuel 8086 X Mode protg X Description Le CPL ne vaut pas 0.

Voir Instruction assembleur 80x86 Instruction

galement INVLPGA

Rfrences
394

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 598 599.

395

Assembleur 80x86
x86-64+

INVLPGA
Invalidate TLB Entry in a Specified ASID

Syntaxe
INVLPGA RAX, ECX

Description Cette instruction permet d'invalider la cartographie TLB (Translation Lookaside Buffer) pour une page virtual et un ASID spcifi.

Mnmonique
Instruction Opcode Description Cette instruction invalide le cartographie TLB pour la page virtuel spcifi dans le registre RAX et l'ASID spcifi par le registre ECX.

INVLPGA RAX, ECX

0Fh 01h DFh

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description Les instructions SVM ne sont pas supports, comme indiqu par le bit 2 du registre ECX de la fonction

#UD(Opcode invalide) X

396

8000_00001h de l'instruction CPUID. X La machine virtuel scuris n'est pas activ (EFER.SVME=0). Cette instruction est seulement reconnu en mode protg. X Le CPL ne vaut pas 0.

#GP(Protection gnral)

Voir Instruction assembleur 80x86 - Instruction INVLPG

galement

397

Assembleur 80x86
INTEL VMX (Virtualisation)

INVVPID
Invalidate Translations Based on VPID

Syntaxe
INVVPID destination, source

Description Cette instruction permet d'invalider la cartographie dans translation des tampons (TLB) et des caches de pagination structur bas sur l'identificateur de processeur virtuel (VPID).

Algorithme
SI (pas dans opration VMX ) ou (RFLAGS.VM = 1) ou (IA32_EFER.LMA = 1 et CS.L = 0) ALORS EXCEPTION #UD SINON mais pas l'opration racine ALORS quitte VM SINON CPL > 0 ALORS EXCEPTION #GP(0) SINON INVVPID_TYPE valeur de l'oprande registre SI IA32_VMX_EPT_VPID_CAP MSR indique que le processeur ne support pas INVVPID_TYPE ALORS VMfail(Opration invalide INVEPT/INVVPID) SINON INVVPID_DESC valeur de l'oprande mmoire SI INVVPID_DESC(63..16) 0 ALORS VMfail(Opration invalide INVEPT/INVVPID) SINON EVALUER CAS INVVPID_TYPE CAS 0: VPID INVVPID_DESC(15..0) SI VPID = 0 ALORS VMfail(Opration invalide INVEPT/INVVPID) 398

SINON GL_ADDR INVVPID_DESC(127..64) SI GL_ADDR n'a pas une forme canonique ALORS VMfail(Opration invalide INVEPT/INVVPID) SINON Cartographie invalide pour la balise GL_ADDR avec VPID succs VM FIN SI FIN SI CAS 1: VPID_CTX INVVPID_DESC(15..0) SI VPID = 0 ALORS VMfail(Opration invalide INVEPT/INVVPID) SINON Toute la cartographie avec VPID succs VM FIN SI CAS 2: Toute la cartographie invalide avec tous les VPID non zros succs VM CAS 3: VPID INVVPID_DESC(15..0) SI VPID = 0 ALORS VMfail(Opration invalide INVEPT/INVVPID) SINON Toute la cartographique invalide avec une exception VPID de translation global succs VM FIN SI FIN EVALUER CAS FIN SI FIN SI FIN SI

Mnmonique
Instruction INVVPID r64, m128 Opcode 66h 0Fh 38h 81h Description Cette instruction permet d'invalider la cartographie dans translation des

399

tampons (TLB) et des caches de pagination structur bas sur l'identificateur de processeur virtuel (VPID). INVVPID r32, m128 66h 0Fh 38h 81h Cette instruction permet d'invalider la cartographie dans translation des tampons (TLB) et des caches de pagination structur bas sur l'identificateur de processeur virtuel (VPID).

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 573 576.

400

Assembleur 80x86 INTEL 8086+

IRET Interrupt Return

Syntaxe
IRET

Description Cette instruction permet d'effectuer un retour prcdemment provoquer par une interruption.

Algorithme
IP est retir de la pile SP SP + 2 CS est retir de la pile SP SP + 2 Les drapeaux sont retir de la pile SP SP + 2

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer un retour prcdemment provoquer par une interruption.

IRET

CFh

Voir Instruction Instruction assembleur assembleur 80x86 80x86


401

galement Instruction Instruction INT INTO

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 814 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 405 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 129. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 600 610.

402

Assembleur 80x86
INTEL 80386+

IRETD
Interrupt Return Doubleword

Syntaxe
IRETD

Description Cette instruction permet d'effectuer un retour 32-bits prcdemment provoquer par une interruption.

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer un retour 32-bits prcdemment provoquer par une interruption.

IRETD

66h CFh

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement INT INTO

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 600 610.

403

Assembleur 80x86
x86-64+

IRETQ
Interrupt Return Quadword

Syntaxe
IRETQ

Description Cette instruction permet d'effectuer un retour 64-bits prcdemment provoquer par une interruption.

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer un retour 64-bits prcdemment provoquer par une interruption.

IRETQ

CFh

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement INT INTO

Rfrences 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 265.

404

Assembleur 80x86 INTEL 8086+

J?? Jump if ??

Syntaxe
J?? destination

Description Cette instruction permet d'effectuer un branchement conditionnel un emplacement mmoire spcifi. Il est a noter que les combinaisons de lettres permettant de reprsenter la condition sont indiques dans le tableau suivant:
Instruction Condition Description JA JAE JB JBE JC JCXZ JE JECXZ A AE B BE C CXZ E ECXZ Suprieur Suprieur ou gal Infrieur Infrieur ou gal Indicateur de retenue gal 1 Si CX = 0 Zro (Egal) Si ECX = 0 CPU/MPU INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 80386+ INTEL 8086+

JG

Suprieur

405

JGE JL JLE JNA JNAE JNB JNC JNE JNG JNGE JNL JNLE JNO

GE L LE NA NAE NB NC NE NG NGE NL NLE NO

Suprieur ou gal Infrieur Infrieur ou gal Pas suprieur Ni suprieur ni gal Pas infrieur Indicateur de retenue gal 0 Pas gal (Zro) Pas suprieur Ni suprieur ni gal Pas infrieur Ni infrieur ni gal Pas de dbordement (indicateur de dbordement gal 0) Pas de parit Pas de signe Pas zro Dbordement (indicateur de dbordement gal 1) Parit Parit paire

INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+

JNP JNS JNZ JO JP JPE

NP NS NZ O P PE

INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+ INTEL 8086+

406

JPO JRCXZ JS JZ

PO RCXZ S Z

Parit impaire Si RCX = 0 Signe Zro

INTEL 8086+ x86-64+ INTEL 8086+ INTEL 8086+

Algorithme
SI condition ALORS EIP EIP + SignExtend(destination) SI taille de l'oprande = 16 bits ALORS EIP EIP 0000FFFFh FIN SI FIN SI

Mnmonique
Instruction Opcode Description Saut si drapeau de dbordement vaut 1 (OF = 1). Saut si drapeau de dbordement vaut 1 (OF = 1). Saut si drapeau de dbordement vaut 1 (OF = 1). Saut si drapeau de dbordement vaut 0 (OF = 0). Saut si drapeau de dbordement vaut 0 (OF = 0).

JO rel8off

70h cb

JO rel16off

0Fh 80h cw

JO rel32off

0Fh 80h cd

JNO rel8off

71h cb

JNO rel16off

0Fh 81h cw

407

JNO rel32off

0Fh 81h cd

Saut si drapeau de dbordement vaut 0 (OF = 0). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 1 (CF = 1). Saut si drapeau de retenue vaut 0 (CF = 0). Saut si drapeau de retenue vaut 0 (CF = 0). Saut si drapeau de retenue vaut 0 (CF = 0).

JB rel8off

72h cb

JB rel16off

0Fh 82h cw

JB rel32off

0Fh 82h cd

JC rel8off

72h cb

JC rel16off

0Fh 82h cw

JC rel32off

0Fh 82h cd

JNAE rel8off

72h cb

JNAE rel16off

0Fh 82h cw

JNAE rel32off

0Fh 82h cd

JNB rel8off

73h cb

JNB rel16off

0Fh 83h cw

JNB rel32off

0Fh 83h cd

408

JNC rel8off

73h cb

Saut si drapeau de retenue vaut 0 (CF = 0). Saut si drapeau de retenue vaut 0 (CF = 0). Saut si drapeau de retenue vaut 0 (CF = 0). Saut si drapeau de retenue vaut 0 (CF = 0). Saut si drapeau de retenue vaut 0 (CF = 0). Saut si drapeau de retenue vaut 0 (CF = 0). Saut si drapeau du zro vaut 1 (ZF = 1). Saut si drapeau du zro vaut 1 (ZF = 1). Saut si drapeau du zro vaut 1 (ZF = 1). Saut si drapeau du zro vaut 1 (ZF = 1). Saut si drapeau du zro vaut 1 (ZF = 1). Saut si drapeau du zro vaut 1 (ZF = 1). Saut si drapeau du zro vaut 0 (ZF = 0).

JNC rel16off

0Fh 83h cw

JNC rel32off

0Fh 83h cd

JAE rel8off

73h cb

JAE rel16off

0Fh 83h cw

JAE rel32off

0Fh 83h cd

JZ rel8off

74h cb

JZ rel16off

0Fh 84h cw

JZ rel32off

0Fh 84h cd

JE rel8off

74h cb

JE rel16off

0Fh 84h cw

JE rel32off

0Fh 84h cd

JNZ rel8off

75h cb

409

JNZ rel16off

0Fh 85h cw

Saut si drapeau du zro vaut 0 (ZF = 0). Saut si drapeau du zro vaut 0 (ZF = 0). Saut si drapeau du zro vaut 0 (ZF = 0). Saut si drapeau du zro vaut 0 (ZF = 0). Saut si drapeau du zro vaut 0 (ZF = 0). Saut si drapeau du zro vaut 1 ou drapeau de retenue vaut 1 (CF = 1 ou ZF = 1). Saut si drapeau du zro vaut 1 ou drapeau de retenue vaut 1 (CF = 1 ou ZF = 1). Saut si drapeau du zro vaut 1 ou drapeau de retenue vaut 1 (CF = 1 ou ZF = 1). Saut si drapeau du zro vaut 1 ou drapeau de retenue vaut 1 (CF = 1 ou ZF = 1). Saut si drapeau du zro vaut 1 ou drapeau de retenue vaut 1 (CF = 1 ou ZF = 1). Saut si drapeau du zro vaut 1 ou drapeau de retenue vaut 1 (CF = 1 ou ZF = 1).

JNZ rel32off

0Fh 85h cd

JNE rel8off

75h cb

JNE rel16off

0Fh 85h cw

JNE rel32off

0Fh 85h cd

JBE rel8off

76h cb

JBE rel16off

0Fh 86h cw

JBE rel32off

0Fh 86h cd

JNA rel8off

76h cb

JNA rel16off

0Fh 86h cw

JNA rel32off

0Fh 86h cd

410

JNBE rel8off

77h cb

Saut si drapeau du zro vaut 0 et drapeau de retenue vaut 0 (CF = 0 et ZF = 0). Saut si drapeau du zro vaut 0 et drapeau de retenue vaut 0 (CF = 0 et ZF = 0). Saut si drapeau du zro vaut 0 et drapeau de retenue vaut 0 (CF = 0 et ZF = 0). Saut si drapeau du zro vaut 0 et drapeau de retenue vaut 0 (CF = 0 et ZF = 0). Saut si drapeau du zro vaut 0 et drapeau de retenue vaut 0 (CF = 0 et ZF = 0). Saut si drapeau du zro vaut 0 et drapeau de retenue vaut 0 (CF = 0 et ZF = 0). Saut si drapeau de signe vaut 1 (SF = 1). Saut si drapeau de signe vaut 1 (SF = 1). Saut si drapeau de signe vaut 1 (SF = 1). Saut si drapeau de signe vaut 0 (SF = 0). Saut si drapeau de signe vaut 0 (SF = 0).

JNBE rel16off

0Fh 87h cw

JNBE rel32off

0Fh 87h cd

JA rel8off

77h cb

JA rel16off

0Fh 87h cw

JA rel32off

0Fh 87h cd

JS rel8off

78h cb

JS rel16off

0Fh 88h cw

JS rel32off

0Fh 88h cd

JNS rel8off

79h cb

JNS rel16off

0Fh 89h cw

411

JNS rel32off

0Fh 89h cd

Saut si drapeau de signe vaut 0 (SF = 0). Saut si drapeau de parit vaut 1 (PF = 1). Saut si drapeau de parit vaut 1 (PF = 1). Saut si drapeau de parit vaut 1 (PF = 1). Saut si drapeau de parit vaut 1 (PF = 1). Saut si drapeau de parit vaut 1 (PF = 1). Saut si drapeau de parit vaut 1 (PF = 1). Saut si drapeau de parit vaut 0 (PF = 0). Saut si drapeau de parit vaut 0 (PF = 0). Saut si drapeau de parit vaut 0 (PF = 0). Saut si drapeau de parit vaut 0 (PF = 0). Saut si drapeau de parit vaut 0 (PF = 0). Saut si drapeau de parit vaut 0 (PF = 0).

JP rel8off

7Ah cb

JP rel16off

0Fh 8Ah cw

JP rel32off

0Fh 8Ah cd

JPE rel8off

7Ah cb

JPE rel16off

0Fh 8Ah cw

JPE rel32off

0Fh 8Ah cd

JNP rel8off

7Bh cb

JNP rel16off

0Fh 8Bh cw

JNP rel32off

0Fh 8Bh cd

JPO rel8off

7Bh cb

JPO rel16off

0Fh 8Bh cw

JPO rel32off

0Fh 8Bh cd

412

JL rel8off JL rel16off JL rel32off JNGE rel8off JNGE rel16off JNGE rel32off JNL rel8off JNL rel16off JNL rel32off JGE rel8off JGE rel16off JGE rel32off JLE rel8off JLE rel16off JLE rel32off JNG rel8off JNG rel16off JNG rel32off JNLE rel8off

7Ch cb 0Fh 8Ch cw 0Fh 8Ch cd 7Ch cb 0Fh 8Ch cw 0Fh 8Ch cd 7Dh cb 0Fh 8Dh cw 0Fh 8Dh cd 7Dh cb 0Fh 8Dh cw 0Fh 8Dh cd 7Eh cb 0Fh 8Eh cw 0Fh 8Eh cd 7Eh cb 0Fh 8Eh cw 0Fh 8Eh cd 7Fh cb

Saut si SF <> OF. Saut si SF <> OF. Saut si SF <> OF. Saut si SF <> OF. Saut si SF <> OF. Saut si SF <> OF. Saut si SF = OF. Saut si SF = OF. Saut si SF = OF. Saut si SF = OF. Saut si SF = OF. Saut si SF = OF. Saut si ZF = 1 ou SF <> OF. Saut si ZF = 1 ou SF <> OF. Saut si ZF = 1 ou SF <> OF. Saut si ZF = 1 ou SF <> OF. Saut si ZF = 1 ou SF <> OF. Saut si ZF = 1 ou SF <> OF. Saut si ZF = 0 et SF = OF.

413

JNLE rel16off JNLE rel32off JG rel8off JG rel16off JG rel32off JCXZ rel8off JECXZ rel8off JRCXZ rel8off

0Fh 8Fh cw 0Fh 8Fh cd 7Fh cb 0Fh 8Fh cw 0Fh 8Fh cd E3h cb E3h cb E3h cb

Saut si ZF = 0 et SF = OF. Saut si ZF = 0 et SF = OF. Saut si ZF = 0 et SF = OF. Saut si ZF = 0 et SF = OF. Saut si ZF = 0 et SF = OF. Saut si le registre CX vaut zro. Saut si le registre ECX vaut zro. Saut si le registre RCX vaut zro.

Exceptions
Message #GP(Protection gnral) Mode rel X Virtuel 8086 X Mode protg X Description Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique

Voir Instruction assembleur 80x86 Instruction

galement JMP

Rfrences
414

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 815 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 405 409 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 130 134. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 611 618.

415

Assembleur 80x86 INTEL 8086+

JMP Jump

Syntaxe
JMP destination

Description Cette instruction permet d'effectuer un branchement un emplacement mmoire spcifi.

Algorithme
SI near jump ALORS SI saut relatif court ALORS tempEIP EIP + destination SINON tempEIP destination FIN SI SI tempEIP est en dehors des limites du code segment ALORS EXCEPTION #GP(0) FIN SI SI taille de l'oprande = 32 bits ALORS EIP tempEIP SINON EIP tempEIP 0000FFFFh FIN SI FIN SI SI saut long ET (PE = 0 OU (PE = 1 ET VM = 1)) ALORS * Adresse rel ou mode virtuel 8086 tempEIP destination(offset) SI tempEIP est en dehors des limites du code de segment ALORS EXCEPTION #GP(0) FIN SI CS destination(Slecteur de segment) SI taille de l'oprande = 32 bits ALORS EIP tempEIP 416

SINON EIP tempEIP 0000FFFFh FIN SI FIN SI SI far jump ET (PE = 1 ET VM = 0) ALORS * Mode protg, pas mode virtuel 8086 SI l'adresse effective dans les segments CS, DS, ES, FS, GS ou SS est illgale OU slecteur de segment dans une destination d'oprande nulle ALORS EXCEPTION #GP(0) FIN SI SI index de slecteur de segment n'est pas dans la limite de descripteur de table ALORS EXCEPTION #GP(nouveau slecteur) FIN SI Lecture du type et de l'accs correct du descripteur de segment SI type de segment n'est pas conforme OU code de segment non conforme, appel le pont, tche du pont, ou TSS ALORS EXCEPTION #GP(slecteur de segment) FIN SI Type de dpendance et accs correct ALLER A CONFORMING-CODE-SEGMENT ALLER A NONCONFORMING-CODE-SEGMENT ALLER A CALL-GATE ALLER A TASK-GATE ALLER A TASK-STATE-SEGMENT SINON EXCEPTION #GP(Slecteur de segment) FIN SI CONFORMING-CODE-SEGMENT: SI DPL > CPL ALORS EXCEPTION #GP(Slecteur de segment) FIN SI SI segment pas prsent ALORS EXCEPTION #NP(Slecteur de segment) FIN SI tempEIP destination(Offset) SI Taille de l'oprande = 16 bits ALORS tempEIP tempEIP 0000FFFFh FIN SI SI tempEIP n'est pas dans la limite du code segment ALORS EXCEPTION #GP(0) FIN SI 417

CS destination(Slecteur de segment) CS(RPL) CPL EIP tempEIP FIN NONCONFORMING-CODE-SEGMENT: SI (RPL > CPL) OU (DPL = CPL) ALORS EXCEPTION #GP(Slecteur de code segment) FIN SI SI segment n'est pas prsent ALORS EXCEPTION #NP(Slecteur de segment) FIN SI SI pointeur d'instruction est en dehors des limites du segment ALORS EXCEPTION #GP(0) FIN SI tempEIP destination(offset) SI taille de l'oprande = 16 bits ALORS tempEIP tempEIP 0000FFFFh FIN SI SI tempEIP n'est pas dans les limites du code segment ALORS EXCEPTION #GP(0) FIN SI CS destination(Slecteur de segment) CS(RPL) CPL EIP tempEIP FIN CALL-GATE: SI appel de pont DPL < CPL OU appel de pont DPL < appel de pont de slecteur de segment RPL ALORS EXCEPTION #GP(slecteur d'appel de pont) FIN SI SI appel d'un pont non prsent ALORS EXCEPTION #NP(Slecteur d'appel de pont) FIN SI SI appel d'un pont du slecteur de code segment est nulle ALORS EXCEPTION #GP(0) FIN SI SI appel d'un pont d'index de slecteur de code de segment est en dehors des limites du descripteur de table ALORS EXCEPTION #GP(slecteur de code segment) 418

FIN SI Lecture du descripteur de code segment SI descripteur de code segment n'est pas indiquer dans le code segment OU descripteur de code segment est conforme et DPL > CPL OU decripteur de segment de code n'est pas conforme ET DPL = CPL ALORS EXCEPTION #GP(Slecteur de code segment) FIN SI SI code segment n'est pas prsent ALORS EXCEPTION #NP(slecteur de code segment) FIN SI SI pointeur d'instruction n'est pas dans les limites du code segment ALORS EXCEPTION #GP(0) FIN SI tempEIP destination(offset) SI Taille du pont = 16 bits ALORS tempEIP tempEIP 0000FFFFh FIN SI SI tempEIP n'est pas dans les limites du code segment ALORS EXCEPTION #GP(0) FIN SI CS destination(Slecteur de segment) CS(RPL) CPL EIP tempEIP FIN TASK-GATE: SI tche du pont DPL < CPL OU tche du pont DPL < slecteur de segment du pont de tche RPL ALORS EXCEPTION #GP(Slecteur de tche du pont) FIN SI SI pont de tche n'est pas prsent ALORS EXCEPTION #NP(Slecteur de pont) FIN SI Lecteur du slecteur de segment TSS dans le descripteur de pont de tche SI bit de slecteur de segment TSS local/global est fixer local OU index n'est dans les limites du GDT OU que le descripteur TSS specifi est occup ALORS EXCEPTION #GP(Slecteur TSS) FIN SI SI TSS n'est pas prsent ALORS EXCEPTION #NP(Slecteur TSS) FIN SI 419

SWITCH-TASKS TSS SI EIP n'est dans les limites de code de segment ALORS EXCEPTION #GP(0) FIN SI FIN TASK-STATE-SEGMENT: SI TSS DPL < CPL OU TSS DPL < slecteur de segment TSS RPL OU descripteur TSS indique que le TSS n'est pas disponible ALORS EXCEPTION #GP(Slecteur TSS) FIN SI SI TSS n'est pas prsent ALORS EXCEPTION #NP(Slecteur TSS) FIN SI SWITCH-TASKS TSS SI EIP n'est pas dans les limites de code segment ALORS EXCEPTION #GP(0) FIN SI FIN

Mnmonique
Instruction Opcode Description Saut court la destination spcifi par un dplacement sign de 8 bits Saut court la destination spcifi par un dplacement sign de 16 bits Saut court la destination spcifi par un dplacement sign de 32 bits Saut court la destination spcifi par un le registre/mmoire 16 bits Saut court la destination spcifi par un le registre/mmoire 32 bits

JMP rel8off

EBh cb

JMP rel16off

E9h cw

JMP rel32off

E9h cd

JMP reg/mem16

FFh /4

JMP reg/mem32

FFh /4

420

JMP reg/mem64

FFh /4

Saut court la destination spcifi par un le registre/mmoire 64 bits Saut long direct avec la destination spcifi par un long pointeur contenu dans l'instruction. Cette instruction est invalide en mode 64 bits. Saut long direct avec la destination spcifi par un long pointeur contenu dans l'instruction. Cette instruction est invalide en mode 64 bits. Saut long indirect avec la destination spcifi par un long pointeur contenu en mmoire. Cette instruction est invalide en mode 64 bits. Saut long indirect avec la destination spcifi par un long pointeur contenu en mmoire. Cette instruction est invalide en mode 64 bits.

JMP FAR pntr16:16

EAh cd

JMP FAR pntr16:32

EAh cp

JMP FAR mem16:16

FFh /5

JMP FAR mem16:32

FFh /5

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description Cette instruction est excut en mode 64-bits avec un code un opcode indirect JMP (FFh /5) dans un oprande de registre.

#UD(Opcode invalide) X

421

Cette instruction est excut en mode 64-bits avec un code un opcode direct JMP (EAh) Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique L'accs au segment de code, au pont d'appel, un pont de tche, ou a un TSS non prsent. Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable

#SS(Pile noncanonique)

#NP(Slecteur)

#GP(Protection gnral)

422

Un segment de donnes nulle est utilis comme rfrence mmoire La destination de slecteur de segment de code est un slecteur nulle. Un code, un pont d'appel, une tche de pont, ou un descripteur TSS dpasse la limite de descripteur de table. Un slecteur de segment de bit TI est fix, mais le slecteur LDT est un slecteur nulle. Le descripteur de segment spcifi par l'instruction n'est pas un segment de code, une

#GP(Slecteur)

423

tche de pont, un pont d'appel, ou un TSS disponible dans le mode legacy, ou n'est pas un segment de code 64 bits ou un appel 64 bits long d'un pont dans le mode long. X Le RPL d'un slecteur de segment de code nonconforme spcifi par l'instruction est suprieur au CPL, ou le DPL n'est pas gale au CPL. Le DPL du descripteur de segment de code spcifi est conforme quand l'instruction est suprieur au CPL. Le DPL est un pont d'appel, une tche de

424

pont, un descripteur TSS spcifi quand l'instruction est infrieur au CPL ou au RPL. X Le slecteur de segment spcifi par le pont d'appel ou le pont de tche est un slecteur nulle. Le descripteur de segment spcifi par l'appel de pont n'est pas un segment de code en mode legacy ou segment de code 64 bits dans un mode long. Le DPL du descripteur de segment spcifi par le pont d'appel est suprieur au CPL et dans un segment

425

conforme. X Le DPL du descripteur de segment spcifi par le pont d'appel n'est pas gale au CPL et il n'est pas dans un segment conforme. L'attribut tendue du pont d'appel 64 bits n'est pas 0. Le descripteur TSS n'est pas un LDT. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

426

Voir

galement

Instruction assembleur 80x86 - Instruction Jump if (JA, JB, JC, JCX, JE,...)

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 816 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 135. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 619 629.

427

Assembleur 80x86 INTEL 8088+

LAHF Load AH in Flags

Syntaxe
LAHF

Description Cette instruction permet de transfrer les bits d'indicateurs du registre d'tat vers le registre AH.

Algorithme
AH Registre de drapeaux(7..0)

Mnmonique
Instruction Opcode Description Charge les drapeaux SF, ZF, AF, PF et CF dans le registre AH

LAHF

9Fh

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Cette instruction n'est pas support en mode 64-

#UD(Opcode invalide)

428

bits comme indiquer par le bit 0 du registre ECX par la fonction 8000_0001h de l'instruction CPUID.

Voir Instruction assembleur 80x86 Instruction

galement SAHF

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 816 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 409 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 142. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 630 631.

429

Assembleur 80x86 Intel 80286+ (Mode Protg, Mode Rel Niveau 0)

LAR

Syntaxe
LAR dest,source

Description Cette instruction permet de charger le registre des indicateurs d'un descripteur.

Algorithme
SI source(Offset) > limite du descripteur de table ALORS ZF 0 FIN SI Lecteur du descripteur de segment SI type de Descripteur de segment n'est pas conforme au code segment ET (CPL > DPL) OU (RPL > DPL) OU type de segment n'est pas valide pour l'instruction ALORS ZF 0 SINON SI la taille de l'oprande = 32 bits ALORS dest(source) 00FxFF00h SINON dest(source) FF00h FIN SI FIN SI

Mnmonique
Instruction LAR r16,r/m16 Opcode 0Fh 02h /r Description Cette instruction permet de charger le registre des indicateurs d'un 430

descripteur avec un masque de FF00h. Cette instruction permet de charger le registre des indicateurs d'un descripteur avec un masque de 00FxFF00h.

LAR r32,r/m32

0Fh 02h /r

Voir Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction

galement ARPL LSL VERR VERW

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 632 634.

431

Assembleur 80x86
INTEL Pentium 4 (SSE3)+

LDDQU
Load Unaligned Integer 128 bits

Syntaxe
LDDQU dest, source

Description Cette instruction permet de copier un quadruple mot d'une oprande source vers une oprande destination. Les oprandes doivent tre des registres XMM.

Algorithme
dest(0..127) dest

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un quadruple mot d'une oprande source vers une oprande destination. Les oprandes doivent tre des registres XMM.

LDDQU xmm, mem

F2h 0Fh F0h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 635 638.
432

433

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

LDMXCSR
Load Streaming SIMD Extension Control/Status

Syntaxe
LDMXCSR source

Description Cette instruction permet d'effectuer le chargement du mot de contrle et d'tat du flux d'extension SIMD d'une oprande mmoire 32 bits.

Algorithme
MXCSR source

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer le chargement du mot de contrle et d'tat du flux d'extension SIMD d'une oprande mmoire 32 bits.

LDMXCSR m32

0Fh AEh /2

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction

434

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 639 641.

435

Assembleur 80x86 INTEL 8088+

LDS Load in DS

Syntaxe
LDS oprande_cible,oprande_source

Description Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits dans la paire de registre de segment DS et dans un registre d'offset spcifi.

Algorithme
Registre d'offset Source Registre de segment DS Source + 2

Mnmonique
Instruction Opcode Description Charge le DS:reg16 avec un pointeur long dans la mmoire. Invalide en mode 64 bits. Charge le DS:reg32 avec un pointeur long dans la mmoire. Invalide en mode 64 bits.

LDS reg16, mem16:16

C5h /r

LDS reg32, mem16:32

C5h /r

Exceptions

436

Message

Mode rel

Virtuel 8086 X

Mode protg X

Description L'oprande source est un registre. Cette instruction est excut en mode 64-bits. Le registre DS, ES, FS ou GS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non prsent. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Le registre SS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non

#UD(Opcode invalide) X

#NP(Slecteur)

#SS(Pile)

#SS(Slecteur)

437

prsent. #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Un registre de segment est charg, mais le descripteur de segment dpasse la limite du descripteur de la table. Un registre de segment est charg et le bit TI de slecteur de segment est fix, mais le slecteur LDT est un slecteur nulle.

#GP(Slecteur)

438

Le registre SS est charg avec un slecteur de segment nulle dans un mode 64-bits ou avec CPL = 3. Le registre SS est charg avec un slecteur de segment RPL et le descripteur de segment DPL n'est pas gale au CPL. Le registre SS est charg et le pointeur de segment n'est pas dans un segment de donnes crivable. Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code nonconforme, mais le RPL ou

439

CPL est suprieur au DPL. X X X Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code en lecture. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 817 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 409 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 143.
440

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 642 646.

441

Assembleur 80x86 INTEL 8088+

LEA Load Effective Address

Syntaxe
LEA oprande_cible,oprande_source

Description Cette instruction permet d'incrmenter un registre ou un emplacement mmoire.

Algorithme
Destination Adresse (source)

Mnmonique
Instruction Opcode Description Entrepose l'adresse effective dans un registre 16 bits. Entrepose l'adresse effective dans un registre 32 bits. Entrepose l'adresse effective dans un registre 64 bits.

LEA reg16, mem

8Dh /r

LEA reg32, mem

8Dh /r

LEA reg64, mem

8Dh /r

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description

442

#UD(Opcode invalide)

L'oprande source est un registre.

Voir Instruction assembleur 80x86 Instruction

galement MOV

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 817 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 409 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 145. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 647 651.

443

Assembleur 80x86 INTEL 80286+

LEAVE

Syntaxe
LEAVE

Description Cette instruction permet de librer une zone de mmoire attribu par l'instruction ENTER lorsqu'on utilise des procdures dans des langages de programmation de haut niveau.

Algorithme
SI taille de l'adresse de pile = 32 bits ALORS ESP EBP SINON SP BP FIN SI SI taille l'oprande = 32 bits ALORS EBP POP() SINON BP POP() FIN SI

Mnmonique
Instruction Opcode Description Fixe le pointeur de pile du registre SP la valeur du registre BP et POP BP.

LEAVE

C9h

444

LEAVE

C9h

Fixe le pointeur de pile du registre ESP la valeur du registre EBP et POP EBP. Pas de prfixe pour le mode 64 bits. Fixe le pointeur de pile du registre RSP la valeur du registre RBP et POP RBP.

LEAVE

C9h

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#SS(Pile)

#PF(Faute de page)

#AC(Vrifie l'alignement)

445

Voir Instruction assembleur 80x86 Instruction

galement ENTER

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 817 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 147. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 651 652.

446

Assembleur 80x86
INTEL 8088+

LES
Load in ES

Syntaxe
LES oprande_cible,oprande_source

Description Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits dans la paire de registre de segment ES et dans un registre d'offset spcifi.

Algorithme
Registre d'offset Source Registre de segment ES Source + 2

Mnmonique
Instruction Opcode Description Charge le ES:reg16 avec un pointeur long dans la mmoire. Invalide en mode 64 bits. Charge le ES:reg32 avec un pointeur long dans la mmoire. Invalide en mode 64 bits.

LES reg16, mem16:16

C4h /r

LES reg32, mem16:32

C4h /r

Exceptions

447

Message

Mode rel

Virtuel 8086 X

Mode protg X

Description L'oprande source est un registre. Cette instruction est excut en mode 64-bits. Le registre DS, ES, FS ou GS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non prsent. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Le registre SS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non

#UD(Opcode invalide) X

#NP(Slecteur)

#SS(Pile)

#SS(Slecteur)

448

prsent. #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Un registre de segment est charg, mais le descripteur de segment dpasse la limite du descripteur de la table. Un registre de segment est charg et le bit TI de slecteur de segment est fix, mais le slecteur LDT est un slecteur nulle.

#GP(Slecteur)

449

Le registre SS est charg avec un slecteur de segment nulle dans un mode 64-bits ou avec CPL = 3. Le registre SS est charg avec un slecteur de segment RPL et le descripteur de segment DPL n'est pas gale au CPL. Le registre SS est charg et le pointeur de segment n'est pas dans un segment de donnes crivable. Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code nonconforme, mais le RPL ou

450

CPL est suprieur au DPL. X X X Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code en lecture. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Exemple Cette exemple permet de retourner dans la paire de registres DX:AX, l'heure de l'horloge tant incrment tous les 18,2 par seconde. Pour se faire il utilise une mthode d'accs directe la mmoire et prend soit de ne pas tre interrompu par un IRQ. L'astuce de l'utilisation de cette instruction consiste au fait qu'il utilise une seule instruction pour un charg double mot de 32 bits (l'instruction LES) plutt que deux instructions MOV beaucoup plus longue en cycle d'horloge et en consommation d'octets :
451

1. 2. 3. 4. 5. 6. 7.

PUSH 0 POP ES XOR AX,AX MOV ES,AX CLI LES AX,ES:[$46C] STI 8. MOV DX,ES

Cette routine est utilis dans le coeur de la bibliothque RLL de l'application MonsterBook des Chevaliers de Malte/Dveloppeur par soucis de performance lorsqu'on tant de faire jouer des .MOD en arrire plan en mme temps que le MonsterBook fonctionne.

Voir Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction

galement LDS LFS LGS LSS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 817 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 410 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 143. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 642 646.

452

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

LFENCE
Load Fence

Syntaxe
LFENCE

Description Cette instruction permet d'agir comme une barrire pour forcer une priorit en mmoire (srialisation) entre les instructions prcdant le LFENCE et les instructions de chargement suivant le LFENCE.

Mnmonique
Instruction Opcode Description Force l'ordre de srialisation de chargement des oprations

LFENCE

0Fh AEh E8h

Exceptions
Message #UD(Opcode invalide) Mode rel Virtuel 8086 Mode protg X Description Cette instruction n'est pas support et est indiqu par le bit 26 du registre EDX de la fonction

453

0000_0001h de l'instruction CPUID.

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement MFENCE SFENCE

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 653 653.

454

Assembleur 80x86 INTEL 80386+

LFS Load in FS

Syntaxe
LFS oprande_cible,oprande_source

Description Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits dans la paire de registre de segment FS et dans un registre d'offset spcifi.

Algorithme
Registre d'offset Source Registre de segment FS Source + 2

Mnmonique
Instruction Opcode Description Charge le FS:reg16 avec un pointeur long dans la mmoire. Invalide en mode 64 bits. Charge le FS:reg32 avec un pointeur long dans la mmoire. Invalide en mode 64 bits.

LFS reg16, mem16:16

0Fh B4h /r

LFS reg32, mem16:32

0Fh B4h /r

Exceptions

455

Message

Mode rel

Virtuel 8086 X

Mode protg X

Description L'oprande source est un registre. Cette instruction est excut en mode 64-bits. Le registre DS, ES, FS ou GS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non prsent. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Le registre SS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non

#UD(Opcode invalide) X

#NP(Slecteur)

#SS(Pile)

#SS(Slecteur)

456

prsent. #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Un registre de segment est charg, mais le descripteur de segment dpasse la limite du descripteur de la table. Un registre de segment est charg et le bit TI de slecteur de segment est fix, mais le slecteur LDT est un slecteur nulle.

#GP(Slecteur)

457

Le registre SS est charg avec un slecteur de segment nulle dans un mode 64-bits ou avec CPL = 3. Le registre SS est charg avec un slecteur de segment RPL et le descripteur de segment DPL n'est pas gale au CPL. Le registre SS est charg et le pointeur de segment n'est pas dans un segment de donnes crivable. Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code nonconforme, mais le RPL ou

458

CPL est suprieur au DPL. X X X Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code en lecture. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 642 646.

459

Assembleur 80x86 INTEL 80286+, Mode protg, mode rel niveau 0

LGDT Load Global Descriptor Tables

Syntaxe
LGDT mmoire

Description Cette instruction permet de charger un descripteur de tables globale.

Algorithme
SI taille de l'oprande = 16 bits ALORS GDTR(Limit) mmoire(0..15) GDTR(Base) mmoire(16..47) 00FFFFFFh SINON GDTR(Limit) mmoire(0..15) GDTR(Base) mmoire(16..47) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de charger un descripteur de tables globale.

LGDT m16/32

0Fh 01h /2

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86
460

galement Instruction Instruction Instruction LLDT LIDT LTR

Instruction Instruction Instruction Instruction

assembleur assembleur assembleur assembleur

80x86 80x86 80x86 80x86

Instruction Instruction Instruction Instruction

SGDT SIDT SLDT STR

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 654 656.

461

Assembleur 80x86 INTEL 80386+

LGS Load in GS

Syntaxe
LGS oprande_cible,oprande_source

Description Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits dans la paire de registre de segment FS et dans un registre d'offset spcifi.

Algorithme
Registre d'offset Source Registre de segment GS Source + 2

Mnmonique
Instruction Opcode Description Charge le GS:reg16 avec un pointeur long dans la mmoire. Invalide en mode 64 bits. Charge le GS:reg32 avec un pointeur long dans la mmoire. Invalide en mode 64 bits.

LGS reg16, mem16:16

0Fh B5h /r

LGS reg32, mem16:32

0Fh B5h /r

Exceptions

462

Message

Mode rel

Virtuel 8086 X

Mode protg X

Description L'oprande source est un registre. Cette instruction est excut en mode 64-bits. Le registre DS, ES, FS ou GS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non prsent. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Le registre SS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non

#UD(Opcode invalide) X

#NP(Slecteur)

#SS(Pile)

#SS(Slecteur)

463

prsent. #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Un registre de segment est charg, mais le descripteur de segment dpasse la limite du descripteur de la table. Un registre de segment est charg et le bit TI de slecteur de segment est fix, mais le slecteur LDT est un slecteur nulle.

#GP(Slecteur)

464

Le registre SS est charg avec un slecteur de segment nulle dans un mode 64-bits ou avec CPL = 3. Le registre SS est charg avec un slecteur de segment RPL et le descripteur de segment DPL n'est pas gale au CPL. Le registre SS est charg et le pointeur de segment n'est pas dans un segment de donnes crivable. Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code nonconforme, mais le RPL ou

465

CPL est suprieur au DPL. X X X Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code en lecture. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 642 646.

466

Assembleur 80x86 INTEL 286+, Mode protg, mode rel niveau 0

LIDT Load Interrupt Descriptor Tables

Syntaxe
LIDT mmoire

Description Cette instruction permet de charger un descripteur de tables d'interruption.

Algorithme
SI taille de l'oprande = 16 bits ALORS IDTR(Limit) mmoire(0..15) IDTR(Base) mmoire(16..47) 00FFFFFFh SINON IDTR(Limit) mmoire(0..15) IDTR(Base) mmoire(16..47) FIN SI

Mnmonique
Instruction LIDT mem Opcode 0Fh 01h /3 Description Cette instruction permet de charger un descripteur de tables d'interruption.

Voir Instruction Instruction assembleur assembleur 80x86 80x86


467

galement Instruction Instruction LGDT LLDT

Instruction Instruction Instruction Instruction Instruction

assembleur assembleur assembleur assembleur assembleur

80x86 80x86 80x86 80x86 80x86

Instruction Instruction Instruction Instruction Instruction

LTR SGDT SIDT SLDT STR

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 654 656.

468

Assembleur 80x86 INTEL 286+, Mode protg, mode rel niveau 0

LLDT Load Local Descriptor Tables

Syntaxe
LLDT mmoire

Description Cette instruction permet de charger un descripteur de tables local.

Algorithme
SI mmoire(Offset) > limite de descripteur de table ALORS EXCEPTION #GP(Slecteur de segment) FIN SI Lecture du descripteur de segment SI type de segment de descriptor n'est pas gale LDT ALORS EXCEPTION #GP(Slecteur de segment) FIN SI SI descripteur de segment n'est pas prsent ALORS EXCEPTION #NP(Slecteur de segment) FIN SI LDTR(Slecteur de segment) mmoire LDTR(Descripteur de segment) Descripteur de segment GDT

Mnmonique
Instruction LLDT r/m16 Opcode 0Fh 00h /2 Description Cette instruction permet de charger un descripteur de tables local.

469

Voir Instruction Instruction Instruction Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction Instruction Instruction Instruction

galement LGDT LIDT LTR SGDT SIDT SLDT STR

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 657 659.

470

Assembleur 80x86 INTEL 286+, Mode protg, mode rel niveau 0

LMSW Load/Store Machine Status Word

Syntaxe
LMSW oprande

Description Cette instruction permet de copier 4 des bits d'une oprande vers les 4 bits de registre de contrle CR0.

Algorithme
CR0(0..3) oprande(0..3)

Mnmonique
Instruction LMSW r/m16 Opcode 0Fh 01h /6 Description Cette instruction permet de copier 4 des bits d'une oprande vers les 4 bits de registre de contrle CR0.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 660 661.

471

Assembleur 80x86
INTEL 80286 ou 80386 seulement
Syntaxe LOADALL

LOADALL
Load All

Description Cette instruction permet d'effectuer le chargement de tous les registres de descripteur de cache.

Algorithme SI INTEL 80286 ALORS (00800h)(6) 0 (00806h)(2) MSW (00808h)(14) 0 (00816h)(2) TR (00818h)(2) Registre de drapeaux 16 bits (0081Ah)(2) IP (0081Ch)(2) LDTR (0081Eh)(2) DS (00820h)(2) SS (00822h)(2) CS (00824h)(2) ES (00826h)(2) DI (00828h)(2) SI (0082Ah)(2) BP (0082Ch)(2) SP (0082Eh)(2) BX (00830h)(2) DX (00832h)(2) CX (00834h)(2) AX (00836h)(6) Descripteur de segment ES (0083Ch)(6) Descripteur de segment CS (00842h)(6) Descripteur de segment SS (00848h)(6) Descripteur de segment DS (0084Eh)(6) GDT
472

(00854h)(6) LDT (0085Ah)(6) IDT (00860h)(6) TSS cFIN SI SI INTEL 80386 ALORS (ES:EDI+0000h)(4) CR0 (ES:EDI+0004h)(4) EFLAGS (ES:EDI+0008h)(4) EIP (ES:EDI+000Ch)(4) EDI (ES:EDI+0010h)(4) ESI (ES:EDI+0014h)(4) EBP (ES:EDI+0018h)(4) ESP (ES:EDI+001Ch)(4) EBX (ES:EDI+0020h)(4) EDX (ES:EDI+0024h)(4) ESX (ES:EDI+0028h)(4) EAX (ES:EDI+002Ch)(4) DR6 (ES:EDI+0030h)(4) DR7 (ES:EDI+0034h)(4) TR (16 bits complt par des 0) (ES:EDI+0038h)(4) LDT (ES:EDI+003Ch)(4) GS (16 bits complt par des 0) (ES:EDI+0040h)(4) FS (16 bits complt par des 0) (ES:EDI+0044h)(4) DS (16 bits complt par des 0) (ES:EDI+0048h)(4) SS (16 bits complt par des 0) (ES:EDI+004Ch)(4) CS (16 bits complt par des 0) (ES:EDI+0050h)(4) ES (16 bits complt par des 0) (ES:EDI+0054h)(4) Attribut de TSS (ES:EDI+0058h)(4) Base de TSS (ES:EDI+005Ch)(4) Limite de TSS (ES:EDI+0060h)(4) 0s (ES:EDI+0064h)(4) Base de IDT (ES:EDI+0068h)(4) Limite de IDT (ES:EDI+006Ch)(4) 0s (ES:EDI+0070h)(4) Base de GDT (ES:EDI+0074h)(4) Limite de GDT (ES:EDI+0078h)(4) Attribut de LDT (ES:EDI+007Ch)(4) Base de LDT (ES:EDI+0080h)(4) Limite de LDT (ES:EDI+0084h)(4) Attribut de GS (ES:EDI+0088h)(4) Base de GS (ES:EDI+008Ch)(4) Limite de GS (ES:EDI+0090h)(4) Attribut de FS (ES:EDI+0094h)(4) Base de FS (ES:EDI+0098h)(4) Limite de FS (ES:EDI+009Ch)(4) Attribut de DS (ES:EDI+00A0h)(4) Base de DS
473

(ES:EDI+00A4h)(4) Limite de DS (ES:EDI+00A8h)(4) Attribut de SS (ES:EDI+00ACh)(4) Base de SS (ES:EDI+00B0h)(4) Limite de SS (ES:EDI+00B4h)(4) Attribut de CS (ES:EDI+00B8h)(4) Base de CS (ES:EDI+00BCh)(4) Limite de CS (ES:EDI+00C0h)(4) Attribut de ES (ES:EDI+00C4h)(4) Base de ES (ES:EDI+00C8h)(4) Limite de ES (ES:EDI+00CCh)(4) Longueur de la table (ES:EDI+00D0h)(30h) Non utilis (ES:EDI+0100h)(4) Registre temporaire IST (ES:EDI+0104h)(4) Registre temporaire I (ES:EDI+0108h)(4) Registre temporaire H (ES:EDI+010Ch)(4) Registre temporaire G (ES:EDI+0110h)(4) Registre temporaire F (ES:EDI+0114h)(4) Registre temporaire E (ES:EDI+0118h)(4) Registre temporaire D (ES:EDI+011Ch)(4) Registre temporaire C (ES:EDI+0120h)(4) Registre temporaire B (ES:EDI+0124h)(4) Registre temporaire A FIN SI

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la lecture des donnes l'adresse 00800 de 00866 contenu dans les registres de segment Cette instruction permet d'effectuer la lecture des donnes l'adresse ES:EDI. Prrequis

LOADALL

0Fh 05h

80286

LOADALL

0Fh 07h

80386

474

Assembleur 80x86 INTEL 8088+

LOCK

Syntaxe
LOCK

Description Cette instruction est utilis comme prfixe avec d'autres instructions pour amener le microprocesseur mettre un signal de vrouillage (Lock) sur le bus lors du traitement de l'instruction suivante.

Mnmonique
Instruction Opcode Description Cette instruction est utilis comme prfixe avec d'autres instructions pour amener le microprocesseur mettre un signal de vrouillage (Lock) sur le bus lors du traitement de l'instruction suivante.

LOCK

F0h

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 818 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 662 663.

475

Assembleur 80x86 INTEL 8088+

LODS LOaD String

Syntaxe
LODS chainesource

Description Cette instruction permet de copier un lment de l'adresse DS:SI dans le registre accumulateur et incrmente/dcrmente le registre SI en fonction de la taille de l'oprande source et de l'tat du drapeau de direction.

Algorithme
SI (charge un octet) ALORS AL chainesource SI DF = 0 ALORS (E)SI (E)SI + 1 SINON (E)SI (E)SI - 1 FIN SI SINON SI (charge un mot) ALORS AX chainesource SI DF = 0 ALORS (E)SI (E)SI + 2 SINON (E)SI (E)SI - 2 FIN SI SINON SI (charge un double mot) ALORS EAX chainesource SI DF = 0 ALORS (E)SI (E)SI + 4 SINON (E)SI (E)SI - 4 FIN SI

476

SINON RAX chainesource SI DF = 0 ALORS (E)SI (E)SI + 8 SINON (E)SI (E)SI - 8 FIN SI FIN SI

Mnmonique
Instruction Opcode Description Charge l'octet de DS:(R)SI dans AL et incrmente ou dcrement (R)SI. Charge le mot de DS:(R)SI dans AX et incrmente ou dcrement (R)SI. Charge le double mot de DS:(R)SI dans EAX et incrmente ou dcrement (R)SI. Charge le quadruple mot de DS:(R)SI dans RAX et incrmente ou dcrement (R)SI.

LODS mem8

ACh

LODS mem16

ADh

LODS mem32

ADh

LODS mem64

ADh

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est

#SS(Pile)

477

pas canonique #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction assembleur assembleur 80x86 80x86


478

galement Instruction Instruction MOVS STOS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 818 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 149. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 664 667.

479

Assembleur 80x86 INTEL 8088+

LODSB LOad String Byte

Syntaxe
LODSB

Description Cette instruction permet de copier un lment de l'adresse DS:SI dans le registre accumulateur et incrmente/dcrmente le registre SI en fonction de la taille de l'oprande source et de l'tat du drapeau de direction.

Algorithme
AL chainesource SI DF = 0 ALORS (E)SI (E)SI + 1 SINON (E)SI (E)SI - 1 FIN SI

Mnmonique
Instruction Opcode Description Charge l'octet de DS:(R)SI dans AL et incrmente ou dcrement (R)SI.

LODSB

ACh

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description

480

#SS(Pile)

Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

481

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement MOVS STOS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 818 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 410 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 149. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 664 667.

482

Assembleur 80x86 INTEL 80386+

LODSD LOaD String Double word

Syntaxe
LODSD

Description Cette instruction permet de copier un lment de l'adresse DS:SI dans le registre accumulateur et incrmente/dcrmente le registre SI de 4 en fonction de l'tat du drapeau de direction.

Algorithme
EAX chainesource SI DF = 0 ALORS (E)SI (E)SI + 4 SINON (E)SI (E)SI - 4 FIN SI

Mnmonique
Instruction Opcode Description Charge le double mot de DS:(R)SI dans EAX et incrmente ou dcrement (R)SI.

LODSD

ADh

Exceptions

483

Message

Mode rel

Virtuel 8086

Mode protg

Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

484

d'alignement est activ

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement MOVS STOS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 818 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 149. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 664 667.

485

Assembleur 80x86
x86-64+

LODSQ
Load String Quadword

Syntaxe
LODSQ

Description Cette instruction permet de copier un lment de l'adresse DS:(R)SI dans le registre accumulateur et incrmente/dcrmente le registre (R)SI de 8 en fonction de l'tat du drapeau de direction.

Algorithme
RAX chainesource SI DF = 0 ALORS (E)SI (E)SI + 8 SINON (E)SI (E)SI - 8 FIN SI

Mnmonique
Instruction Opcode Description Charge le quadruple mot de DS:(R)SI dans RAX et incrmente ou dcrement (R)SI.

LODSQ

ADh

Exceptions
486

Message

Mode rel

Virtuel 8086

Mode protg

Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

487

d'alignement est activ

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement MOVS STOS

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 664 667.

488

Assembleur 80x86 INTEL 8088+

LODSW LOaD String Word

Syntaxe
LODSW

Description Cette instruction permet de copier un lment de l'adresse DS:SI dans le registre accumulateur et incrmente/dcrmente le registre SI de 2 en fonction de l'tat du drapeau de direction.

Algorithme
AX chainesource SI DF = 0 ALORS (E)SI (E)SI + 2 SINON (E)SI (E)SI - 2 FIN SI

Mnmonique
Instruction Opcode Description Charge le mot de DS:(R)SI dans AX et incrmente ou dcrement (R)SI.

LODSW

ADh

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description

489

#SS(Pile)

Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

490

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement MOVS STOS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 819 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 410 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 149. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 664 667.

491

Assembleur 80x86 INTEL 8088+

LOOP

Syntaxe
LOOP tiquette

Description Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre CX ne vaut pas 0.

Algorithme
CX CX - 1 SI CX <> 0 ALORS IP IP + Offset FIN SI

Mnmonique
Instruction Opcode Description Dcrmente (R)CX, si (R)CX ne vaut pas 0 alors effectuer un saut court.

LOOP rel8off

E2h cb

Exceptions
Message #GP(Protection Mode rel X Virtuel 8086 X Mode protg X Description Une

492

gnral)

adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique

Voir Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction

galement LOOPE LOOPNE LOOPNZ LOOPZ

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 819 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 410 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 151. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 668 669.

493

Assembleur 80x86
INTEL 80386+
Syntaxe LOOPD etiquette

LOOPD
Loop Double

Description Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre ECX ne vaut pas 0.

Algorithme ECX ECX - 1 SI ECX <> 0 ALORS IP IP + Offset FIN SI

494

Assembleur 80x86 INTEL 8088+

LOOPE LOOP Equal

Syntaxe
LOOPE tiquette

Description Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre CX ne vaut pas 0 et si le drapeau ZF vaut 1.

Algorithme
CX CX - 1 SI CX <> 0 ET ZF = 1 ALORS IP IP + Offset FIN SI

Mnmonique
Instruction Opcode Description Dcrmente (R)CX, si (R)CX ne vaut pas 0 et ZF vaut 1 alors effectuer un saut court.

LOOPE rel8off

E1h cb

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description

495

#GP(Protection gnral)

Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 819 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 410 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 151. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 668 669.

496

Assembleur 80x86
INTEL 80386+
Syntaxe LOOPED etiquette

LOOPED
Loop Equal Double

Description Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre ECX ne vaut pas 0 et si le drapeau ZF vaut 1.

Algorithme ECX ECX - 1 SI ECX <> 0 ET ZF = 1 ALORS IP IP + Offset FIN SI

497

Assembleur 80x86 INTEL 8088+

LOOPNE LOOP No Equal

Syntaxe
LOOPNE tiquette

Description Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre CX ne vaut pas 0 et si le drapeau ZF vaut 0.

Algorithme
CX CX - 1 SI CX <> 0 ET ZF = 0 ALORS IP IP + Offset FIN SI

Mnmonique
Instruction Opcode Description Dcrmente (R)CX, si (R)CX ne vaut pas 0 et que ZF vaut 0 alors effectuer un saut court.

LOOPNE rel8off

E0h cb

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description

498

#GP(Protection gnral)

Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 820 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 411 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 151. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 668 669.

499

Assembleur 80x86
INTEL 80386+
Syntaxe LOOPNED etiquette

LOOPNED
Loop Not Equal Double

Description Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre ECX ne vaut pas 0 et si le drapeau ZF vaut 0.

Algorithme ECX ECX - 1 SI ECX <> 0 ET ZF = 0 ALORS IP IP + Offset FIN SI

500

Assembleur 80x86 INTEL 8088+

LOOPNZ LOOP Non Zero

Syntaxe
LOOPNZ tiquette

Description Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre CX ne vaut pas 0 et si le drapeau ZF vaut 0.

Algorithme
CX CX - 1 SI CX <> 0 ET ZF = 0 ALORS IP IP + Offset FIN SI

Mnmonique
Instruction Opcode Description Dcrmente (R)CX, si (R)CX ne vaut pas 0 et ZF ne vaut pas 0 alors effectuer un saut court.

LOOPNZ rel8off

E0h cb

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description

501

#GP(Protection gnral)

Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 820 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 411 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 151.

502

Assembleur 80x86
INTEL 80386+
Syntaxe LOOPNZD etiquette

LOOPNZD
Loop Not Zero Double

Description Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre ECX ne vaut pas 0 et si le drapeau ZF vaut 0.

Algorithme ECX ECX - 1 SI ECX <> 0 ET ZF = 0 ALORS IP IP + Offset FIN SI

503

Assembleur 80x86 INTEL 8088+

LOOPZ LOOP Zero

Syntaxe
LOOPZ tiquette

Description Cette instruction de boucle permet de dcrmenter le registre CX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre CX ne vaut pas 0 et si le drapeau ZF vaut 1.

Algorithme
CX CX - 1 SI CX <> 0 ET ZF = 1 ALORS IP IP + Offset FIN SI

Mnmonique
Instruction Opcode Description Dcrmente (R)CX, si (R)CX ne vaut pas 0 et que ZF vaut 1 alors effectuer un saut court.

LOOPZ rel8off

E1h cb

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description

504

#GP(Protection gnral)

Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 820 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 411 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 151.

505

Assembleur 80x86
INTEL 80386+
Syntaxe LOOPZD etiquette

LOOPZD
Loop Double Zero

Description Cette instruction de boucle permet de dcrmenter le registre ECX (compteur de boucle) de 1 et par la suite de donner le contrle une tiquette destinataire tant que le registre ECX ne vaut pas 0 et si le drapeau ZF vaut 1.

Algorithme ECX ECX - 1 SI ECX <> 0 ET ZF = 1 ALORS IP IP + Offset FIN SI

506

Assembleur 80x86
INTEL 80286+

LSL
Load Segment Limit

Syntaxe
LSL operande1,operande2

Description Cette instruction permet de charger la limite de segment d'un descripteur de segment spcifi avec l'oprande source dans l'oprande de destination et fixe le drapeau ZF du regsistre EFLAGS.

Algorithme
SI SRC(Offset) > limite du descripteur de table ALORS ZF 0 FIN SI Lecture du descripteur de segment SI type de descripteur de segment est conforme au code segment ET (CPL > DPL) OU (RPL > DPL) OU type de segment n'est pas valide pour l'instruction ALORS ZF 0 SINON temp limite de segment de SRC SI G = 1 ALORS temp DcalageDesBitsVersLaGauche(12, temp) U 00000FFFh FIN SI SI taille de l'oprande = 32 bits ALORS DEST temp SINON DEST temp FFFFh FIN SI FIN SI

507

Mnmonique
Instruction Opcode Description Cette instruction permet de charger la limite de segment d'un descripteur de segment spcifi avec l'oprande source 16 bits dans l'oprande de destination de 16 bits et fixe le drapeau ZF du regsistre EFLAGS. Cette instruction permet de charger la limite de segment d'un descripteur de segment spcifi avec l'oprande source 16 bits dans l'oprande de destination de 32 bits et fixe le drapeau ZF du regsistre EFLAGS. Cette instruction permet de charger la limite de segment d'un descripteur de segment spcifi avec l'oprande source 16 bits dans l'oprande de destination de 64 bits et fixe le drapeau ZF du regsistre EFLAGS.

LSL reg16, reg/mem16

0Fh 03h /r

LSL reg32, reg/mem16

0Fh 03h /r

LSL reg64, reg/mem16

0Fh 03h /r

Voir Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction

galement ARPL LAR VERR VERW

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 670 674.

508

Assembleur 80x86
INTEL 80386+

LSS
Load Stack Segment

Syntaxe
LSS operande_cible,operande_source

Description Cette instruction permet de copier une adresse de mmoire contenu sur 32 bits dans la paire de registre de segment SS (Segment de pile) et dans un registre d'offset spcifi.

Algorithme
Registre d'offset Source Registre de segment SS Source + 2

Mnmonique
Instruction Opcode Description Charge le SS:reg16 avec un pointeur long dans la mmoire. Invalide en mode 64 bits. Charge le SS:reg32 avec un pointeur long dans la mmoire. Invalide en mode 64 bits.

LSS reg16, mem16:16

0Fh B2h /r

LSS reg32, mem16:32

0Fh B2h /r

Exceptions

509

Message

Mode rel

Virtuel 8086 X

Mode protg X

Description L'oprande source est un registre. Cette instruction est excut en mode 64-bits. Le registre DS, ES, FS ou GS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non prsent. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Le registre SS est charg avec un slecteur de segment nonnulle et le segment est marqu comme non

#UD(Opcode invalide) X

#NP(Slecteur)

#SS(Pile)

#SS(Slecteur)

510

prsent. #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Un registre de segment est charg, mais le descripteur de segment dpasse la limite du descripteur de la table. Un registre de segment est charg et le bit TI de slecteur de segment est fix, mais le slecteur LDT est un slecteur nulle.

#GP(Slecteur)

511

Le registre SS est charg avec un slecteur de segment nulle dans un mode 64-bits ou avec CPL = 3. Le registre SS est charg avec un slecteur de segment RPL et le descripteur de segment DPL n'est pas gale au CPL. Le registre SS est charg et le pointeur de segment n'est pas dans un segment de donnes crivable. Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code nonconforme, mais le RPL ou

512

CPL est suprieur au DPL. X X X Le registre DS, ES, FS ou GS n'est pas charg et le segment pointe sur des donnes ou un segment de code en lecture. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 642 646.

513

Assembleur 80x86
INTEL 80286+

LTR
Load Task Register

Syntaxe
LTR operande

Description Cette instruction permet de charger l'oprande source dans le champ du slecteur de segment du registre de tche.

Algorithme
SI SRC(Offset) > limite du descripteur de table OU operande(type) <> global ALORS EXCEPTION #GP(Slecteur de segment) FIN SI Lecture du descripteur de segment SI descripteur de segment n'est pas disponible dans TSS ALORS EXCEPTION #GP(Slecteur de segment) FIN SI SI descripteur de segment n'est pas prsent ALORS EXCEPTION #NP(Slecteur de segment) FIN SI Descripteur de segment TSS(occup) 1 Registre de tche(Slecteur de segment) operande Registre de tche(Descripteur de segment) Descripteur de segment TSS

Mnmonique
Instruction Opcode Description

514

LTR reg/mem16

0Fh 00h /3

Cette instruction permet de charger le slecteur de segment dans le registre de tche et charge le descripteur TSS dans le GDT.

Voir Instruction Instruction Instruction Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction Instruction Instruction Instruction

galement LGDT LIDT LLDT STR SGDT SIDT SLDT

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 675 677.

515

Assembleur 80x86
AMD K10 (SSE4a)+

LZCNT
Count Leading Zeros

Syntaxe
LZCNT regdest, source

Description Cette instruction permet de compter le nombre de bits 0 dans un registre 16, 32 ou 64 bits contenu dans l'oprande source.

Mnmonique
Instruction Opcode Description Compte le nombre de bit 0 dans reg/mem16. Compte le nombre de bit 0 dans reg/mem32. Compte le nombre de bit 0 dans reg/mem64.

LZCNT reg16, reg/mem16

F3h 0Fh BDh /r

LZCNT reg32, reg/mem32

F3h 0Fh BDh /r

LZCNT reg64, reg/mem64

F3h 0Fh BDh /r

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la

#SS(Pile)

516

limite du segment de pile ou n'est pas canonique #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir
517

galement

Instruction assembleur 80x86 Instruction assembleur 80x86 Instruction assembleur 80x86 - Instruction POPCNT

Instruction Instruction

BSF BSR

518

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MASKMOVDQU
Mask Move of Double Quadword Unaligned

Syntaxe
MASKMOVDQU dest, source

Description Cette instruction permet d'entreposer les octets slectionns par l'oprande source dans une emplacement mmoire de 128 bits.

Fonction
SI MASK(7) = 1 ALORS dest((E)DI) source(7..0) FIN SI IF MASK(15) = 1 ALORS dest((E)DI+1) source(15..8) FIN SI SI MASK(127) = 1 ALORS dest(DI/EDI+15) source(127..120) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de slectionner les octets crire du xmm1 l'emplacement mmoire utilis par le masque d'octet du

MASKMOVDQU xmm1, xmm2

66h 0Fh F7h /r

519

xmm2.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment CS, DS, ES, FS ou GS ou n'est pas canonique Si le bit TS du registre CR0 est fix 1. Si le bit EM du registre CR0 est fix 1. Si le

#SS(Pile)

#GP(0)

#NM()

#UD(Opcode invalide)

520

OXFXSR dans CR4 vaut 0. Si le drapeau de fourniture SSE2 du CPUID vaut 0. Une faute de page rsultat de l'excution de l'instruction

#PF(Faute de page)

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 678 679.

521

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MASKMOVQ
Mask Move of Quadword

Syntaxe
MASKMOVQ source,masque

Description Cette instruction permet d'entreposer les octets slectionner de l'oprande source dans un emplacement mmoire de 64 bits.

Algorithme
MODULE moveByte(checkBit,moveBits) SI masque(checkBit) = 1 ALORS mem64(EDI)(moveBits) source(moveBits) SINON mem64(EDI)(moveBits) 0 FIN SI FIN MODULE moveByte(7 , 7..0) moveByte(15, 15..8) moveByte(23, 23..16) moveByte(31, 31..24) moveByte(39, 39..32) moveByte(47, 47..40) moveByte(55, 55..48) moveByte(63, 63..56)

Mnmonique
522

Instruction

Opcode

Description Cette instruction permet d'entreposer les octets slectionner de l'oprande source dans un emplacement mmoire de 64 bits.

MASKMOVQ mm1,mm2

0Fh F7h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 680 683.

523

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MAXPD
Maximum Packed Double-Precision FloatingPoint Values

Syntaxe
MAXPD dest,source

Description Cette instruction permet de retourner la valeur maximal de chacune des paires de valeur entre l'oprande source et l'oprande de destination de nombre rel de double prcision.

Algorithme
SI ((dest(0..63) = 0,0 source(0..63) = 0,0) U IsSNaN(dest(0..63)) U IsSNaN(source(0..63)) U dest(0..63) <= source(0..63)) ALORS dest(0..63) source(0..63) FIN SI SI ((dest(64..127) = 0,0 source(64..127) = 0.0) U IsSNaN(dest(64..127)) U IsSNaN(source(64..127)) U dest(64..127) <= source(64..127)) ALORS dest(64..127) source(64..127) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de retourner la valeur maximal de chacune des paires de valeur entre l'oprande source et l'oprande de destination de nombre rel de double

MAXPD xmm1, xmm2/m128

66h 0Fh 5Fh /r

524

prcision.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 684 686.

525

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MAXPS
Maximum Packed Double-Precision FloatingPoint Values

Syntaxe
MAXPS dest,source

Description Cette instruction permet de retourner la valeur maximal de chacune des paires de valeur entre l'oprande source et l'oprande de destination.

Algorithme
BOUCLE POUR i 0 JUSQU'A 3 FAIRE SI dest(octet i) n'est pas indfinit ALORS dest(octet i) dest(octet i) FIN SI SI source(octet i) n'est pas indfini ALORS dest(octet i) source(octet i) FIN SI SI source(i) >= dest(i) ALORS dest(octet i) source(octet i) FIN SI FIN BOUCLE POUR

Mnmonique
Instruction Opcode Description

526

MAXPS xmm1,xmm2/m128

0Fh 5Fh /r

Cette instruction permet de retourner la valeur maximal de chacune des paires de valeur entre l'oprande source et l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 687 689.

527

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MAXSD
Maximum Scalar Double-Precision FloatingPoint Value

Syntaxe
MAXSD dest,source

Description Cette instruction permet de retourner la valeur maximal entre l'oprande source et destination de nombre rel de simple prcision.

Algorithme
SI dest(0..63) = 0,0 source(0..63) = 0,0) U IsSNaN(dest[0..63]) U IsSNaN(source(0..63)) U dest[0..63] <= source(0..63)) ALORS dest(0..63) source(0..63) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de retourner la valeur maximal entre l'oprande source et destination de nombre rel de simple prcision.

MAXSD xmm1, xmm2/m64

F2h 0Fh 5Fh /r

Rfrences

528

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 690 692.

529

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MAXSS
Maximum Scalar Single-Precision Floating-Point Value

Syntaxe
MAXSS dest,source

Description Cette instruction permet de retourner la valeur maximal entre l'oprande source et destination.

Algorithme
SI dest n'est pas indfinit ALORS dest dest FIN SI SI source n'est pas indfini ALORS dest source FIN SI SI source(i) >= dest(i) ALORS dest source FIN SI

Mnmonique
Instruction MAXSS xmm1,xmm2/m32 Opcode F3h 0Fh 5Fh /r Description Cette instruction permet de retourner la valeur maximal entre

530

l'oprande source et destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 693 694.

531

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MFENCE
Memory Fence

Syntaxe
MFENCE

Description Cette instruction permet d'agir comme une barrire pour forcer une priorit en mmoire (srialisation) entre les instructions prcdant le MFENCE et les instructions de chargement et d'entreposage prcdent le MFENCE.

Mnmonique
Instruction Opcode Description Force l'ordre de srialisation dans l'opration de chargement et d'entreposage

MFENCE

0Fh AEh F0h

Exceptions
Message #UD(Opcode invalide) Mode rel Virtuel 8086 Mode protg X Description Cette instruction n'est pas support comme l'indique le bit 26 du registre EDX

532

de la fonction 0000_0000h dans l'instruction CPUID.

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement LFENCE SFENCE

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 695 696.

533

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MINPD
Minimum Packed Double-Precision FloatingPoint Values

Syntaxe
MINPD dest,source

Description Cette instruction permet de retourner la valeur minimal de chacune des paires de valeur entre l'oprande source et l'oprande de destination de nombre rel de double prcision.

Algorithme
SI ((dest(0..63) = 0,0 source(0..63) = 0,0) U IsSNaN(dest(0..63)) U IsSNaN(source(0..63)) U dest(0..63) >= source(0..63)) ALORS dest(0..63) source(0..63) FIN SI SI ((dest(64..127) = 0,0 source(64..127) = 0,0) U IsSNaN(dest(64..127)) U IsSNaN(source(64..127)) U dest(64..127) >= source(64..127)) ALORS dest(64..127) source(64..127) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de retourner la valeur minimal de chacune des paires de valeur entre l'oprande source et l'oprande de destination de nombre rel de double

MINPD xmm1, xmm2/m128

66h 0Fh 5Dh /r

534

prcision.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 697 700.

535

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MINPS
Minimum Packed Double-Precision FloatingPoint Values

Syntaxe
MINPS dest,source

Description Cette instruction permet de retourner la valeur minimal de chacune des paires de valeur entre l'oprande source et l'oprande de destination.

Algorithme
BOUCLE POUR i 0 JUSQU'A 3 FAIRE SI dest(octet i) n'est pas indfinit ALORS dest(octet i) dest(octet i) FIN SI SI source(octet i) n'est pas indfini ALORS dest(octet i) source(octet i) FIN SI SI source(i) < dest(i) ALORS dest(octet i) source(octet i) FIN SI FIN BOUCLE POUR

Mnmonique
Instruction Opcode Description

536

MINPS xmm1,xmm2/m128

0Fh 5Dh /r

Cette instruction permet de retourner la valeur minimal de chacune des paires de valeur entre l'oprande source et l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 701 703.

537

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MINSD
Minimum Scalar Double-Precision FloatingPoint Value

Syntaxe
MINSD dest,source

Description Cette instruction permet de retourner la valeur minimal entre l'oprande source et destination de nombre rel de simple prcision.

Algorithme
SI ((dest(0..63) = 0,0 source(0..63) = 0,0) U IsSNaN(dest(0..63)) U IsSNaN(source(0..63)) U dest(0..63) >= source(0..63)) ALORS dest(0..63) source(0..63) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de retourner la valeur minimal entre l'oprande source et destination de nombre rel de simple prcision.

MINSD xmm1, xmm2/m64

F2h 0Fh 5Dh /r

Rfrences

538

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 704 706.

539

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MINSS
Minimum Scalar Single-Precision Floating-Point Value

Syntaxe
MINSS dest,source

Description Cette instruction permet de retourner la valeur minimal entre l'oprande source et destination.

Algorithme
SI dest n'est pas indfinit ALORS dest dest FIN SI SI source n'est pas indfini ALORS dest source FIN SI SI source(i) < dest(i) ALORS dest source FIN SI

Mnmonique
Instruction MINSS xmm1,xmm2/m32 Opcode F3h 0Fh 5Dh /r Description Cette instruction permet de retourner la valeur minimal entre

540

l'oprande source et destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 707 709.

541

Assembleur 80x86
INTEL Pentium 4+

MONITOR
Monitor

Syntaxe
MONITOR MONITOR EAX, ECX, EDX

Description Cette instruction permet d'indiquer au microprocesseur quel rang d'adresse est surveiller par l'instruction STORE. Normalement, cette instruction est reli avec l'instruction MWAIT.

Mnmonique
Instruction Opcode Description Cette instruction permet d'indiquer au microprocesseur quel rang d'adresse est surveiller par l'instruction STORE.

MONITOR

0Fh 01h C8h

Voir Instruction assembleur 80x86 Instruction

galement MWAIT

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 710 712.
542

Assembleur 80x86 INTEL 8088+

MOV MOVe

Syntaxe
MOV oprandecible,oprandesource

Description Cette instruction permet de copier oprande source dans une oprande destinataire.

Algorithme
oprandecible oprandesource

Mnmonique
Instruction Opcode Description Copie le contenu du registre 8 bits dans l'oprande de registre ou mmoire 8 bits. Copie le contenu du registre 16 bits dans l'oprande de registre ou mmoire 16 bits. Copie le contenu du registre 32 bits dans l'oprande de registre ou mmoire 32 bits. Copie le contenu du registre 64 bits dans l'oprande de registre ou

MOV reg/mem8, reg8

88h /r

MOV reg/mem16, reg16

89h /r

MOV reg/mem32, reg32

89h /r

MOV reg/mem64, reg64

89h /r

543

mmoire 64 bits. Copie le contenu de l'oprande de registre ou mmoire 8 bits dans le registre 8 bits. Copie le contenu de l'oprande de registre ou mmoire 16 bits dans le registre 16 bits. Copie le contenu de l'oprande de registre ou mmoire 32 bits dans le registre 32 bits. Copie le contenu de l'oprande de registre ou mmoire 64 bits dans le registre 64 bits. Copie le contenu du registre de segment dans l'oprande de registre ou mmoire 16, 32 ou 64 bits. Copie le contenu de l'oprande de registre ou mmoire 16 bits dans le registre de segment. Copie le contenu de l'oprande de l'adresse mmoire 8 bits dans le registre AL. Copie le contenu de l'oprande de l'adresse mmoire 16 bits dans le registre AX. Copie le contenu de l'oprande de l'adresse mmoire 32 bits dans le registre EAX.

MOV reg8, reg/mem8

8Ah /r

MOV reg16, reg/mem16

8Bh /r

MOV reg32, reg/mem32

8Bh /r

MOV reg64, reg/mem64

8Bh /r

MOV reg16/32/64/mem16,segReg 8Ch /r

MOV segReg, reg/mem16

8Eh /r

MOV AL,[yyxxh]

A0h xxh yyh

MOV AX, [yyxxh]

A1h xxh yyh

MOV EAX, moffset32

A1h dw

544

MOV RAX, moffset64

A1h dw

Copie le contenu de l'oprande de l'adresse mmoire 64 bits dans le registre RAX. Copie le registre AL dans l'oprande de l'adresse mmoire 8 bits. Copie le registre AX dans l'oprande de l'adresse mmoire 16 bits. Copie le registre EAX dans l'oprande de l'adresse mmoire 32 bits. Copie le registre RAX dans l'oprande de l'adresse mmoire 64 bits. Copie une valeur immdiate de 8 bits dans un registre 8 bits. Copie une valeur immdiate de 16 bits dans un registre 16 bits. Copie une valeur immdiate de 32 bits dans un registre 32 bits. Copie une valeur immdiate de 64 bits dans un registre 64 bits. Copie une valeur immdiate 8 bits dans une oprande de registre ou mmoire 8 bits. Copie une valeur immdiate 16 bits dans une oprande de registre ou mmoire 16 bits.

MOV moffset8, AL

A2h dw

MOV moffset16, AX

A3h dw

MOV moffset32, EAX

A3h dw

MOV moffset64, RAX

A3h dw

MOV reg8, imm8

(B0h+rb) ib

MOV reg16, imm16

(B8h+rw) iw

MOV reg32, imm32

(B8h+rd) id

MOV reg64, imm64

(B8h+rq) iq

MOV reg/mem8, imm8

C6h /0 ib

MOV reg/mem16, imm16

C7h /0 iw

545

MOV reg/mem32, imm32

C7h /0 id

Copie une valeur immdiate 32 bits dans une oprande de registre ou mmoire 32 bits. Copie une valeur immdiate 32 bits dans une oprande de registre ou mmoire 64 bits. Copie un registre 32 bits dans un registre CRn. Copie un registre 64 bits dans un registre CRn. Copie un registre CRn dans un registre 32 bits. Copie un registre CRn dans un registre 64 bits. Copie un registre 32 bits dans le registre CR8. Copie un registre 64 bits dans le registre CR8. Copie un registre CR8 dans le registre 32 bits. Copie un registre CR8 dans le registre 64 bits. Copie un registre DRn dans le registre 32 bits. Copie un registre DRn dans le registre 64 bits. Copie un registre 32 bits dans le

MOV reg/mem64, imm32

C7h /0 id

MOV CRn, reg32

0Fh 22h /r

MOV CRn, reg64

0Fh 22h /r

MOV reg32, CRn

0Fh 20h /r

MOV reg64, CRn

0Fh 20h /r

MOV CR8, reg32

F0h 0Fh 22h/r

MOV CR8, reg64

F0h 0Fh 22h/r

MOV reg32, CR8

F0h 0Fh 20h/r

MOV reg64, CR8

F0h 0Fh 20h/r

MOV reg32, DRn

0Fh 21h /r

MOV reg64, DRn

0Fh 21h /r

MOV DRn, reg32

0Fh 23h /r

546

registre DRn. Copie un registre 64 bits dans le registre DRn.

MOV DRn, reg64

0Fh 23h /r

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ Un registre de dboguage est rfrenc quand une dtection gnrale du bit GD du registre DR7 est fix. Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique

#AC(Vrifie l'alignement)

#DB(Dboguage)

#GP(Protection gnral)

547

L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Le CPL ne vaut pas 0. La valeur 1 est crite dans n'importe quel des 32 bits haut du registre DR6 ou DR7 en mode 64 bits. Une tentative de fixer le CR0.PG = 1 et le CR0.PE = 0. Une tentative de fixer le CR0.CD = 0 et le CR0.NW = 1. Bits rserv 1 dans le pointeur de la table de page

548

de rpertoire (utilise le mode legacy d'adresse physique tendue) et l'instruction modifie le registre CR0, CR3 ou CR4. X X Une tentative d'crire 1 dans n'importe quel bit rserv du registre CR0, CR3, CR4 ou CR8. Une tentative de fix le CR0.PG en mode long est activ (EFER.LME = 1), mais l'adresse d'extensions de page est dsactiv (CR4.PAE = 0). Une tentative d'effacer le CR4.PAE en mode long est activ (EFER.LMA =

549

1). #GP(Slecteur) X Un registre de segment est charg, mais le descripteur de segment dpasse la limite de la table du descripteur. Un registre de segment est charg et le bit TI de slecteur de segment est fix, mais le slecteur LDT est un slecteur nulle. Le registre SS est charg avec un slecteur de segment nulle dans un mode non 64 bits ou avec CPL = 3. Le registre SS est charg et le slecteur de segment RPL et le descripteur de segment DPL

550

n'est pas gale au CPL. X Le registre SS est charg et le segment pointe dans un segment de donnes non crivable. Le registre DS, ES, FS ou GS est charg et le segment pointe sur des donnes ou un segment de code nonconforme, mais le RPL ou CPL est suprieur au DPL. Le registre DS, ES, FS ou GS est charg et le segment ne pointe pas sur un segment de donnes ou un segment de code en lecture. Le registre DS, ES, FS ou GS n'est pas

#NP(Slecteur)

551

charg avec une valeur non-nulle. Une faute de page rsultat de l'excution de l'instruction Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Le registre SS est charg avec un slecteur nonnulle et le segment est marqu non prsent. Une tentative de chargement dans le registre CS. Le registre DR4 ou DR5 est rfrenc quand le bit d'extensions de dboguage (DE) du

#PF(Faute de page)

#SS(Pile)

#SS(Slecteur)

#UD(Opcode invalide)

552

registre CR4 est fix. Un registre de dboguage illgale (DR8 DR15) est rfrenc. Un registre de contrle illgale est rfrenc (CR1, CR6 CR7, CR8 CR15). L'utilisation d'un prfixe de verroue LOCK en lecture du registre CR8 n'est pas support, comme indiqu par le bit 4 du registre ECX de la fonction 8000_0001h de l'instruction CPUID.

#UD(Instruction invalide)

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86
553

galement Instruction Instruction Instruction CLTS LMSW MOVD

Instruction Instruction Instruction Instruction Instruction

assembleur assembleur assembleur assembleur assembleur

80x86 80x86 80x86 80x86 80x86

Instruction Instruction Instruction Instruction Instruction

MOVSX MOVZX MOVSXD MOVS SMSW

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 820 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 411 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 156. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 713 724.

554

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVAPD
Move Aligned Packed Double-Precision Floating-Point Values

Syntaxe
MOVAPD destination, source

Description Cette instruction permet de copier le contenu de 2 paquets aligns de valeurs rel de double prcision.

Algorithme
destination source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu de 2 paquets aligns de valeurs rel de double prcision. Cette instruction permet de copier le contenu de 2 paquets aligns de valeurs rel de double prcision.

MOVAPD xmm1, xmm2/m128

66h 0Fh 28h /r

MOVAPD xmm2/m128, xmm1

66h 0Fh 29h /r

Rfrences

555

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 725 728.

556

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MOVAPS
Move Aligned Four Packed Single

Syntaxe
MOVAPS dest,source

Description Cette instruction permet de copier le contenu de 4 paquets aligns de valeurs rel de simple prcision (4 x 32 bits).

Algorithme
dest source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu de 4 paquets aligns de valeurs rel de simple prcision (4 x 32 bits). Cette instruction permet de copier le contenu de 4 paquets aligns de valeurs rel de simple prcision (4 x 32 bits).

MOVAPS xmm1,xmm2/m128

0Fh 28h /r

MOVAPS xmm2/m128,xmm1

0Fh 29h /r

557

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 729 731.

558

Assembleur 80x86
SSE4.2+

MOVBE
Move Data After Swapping Bytes

Syntaxe
MOVBE dest,source

Description Cette instruction permet d'effectuer l'change des octets lors de l'opration de copiage de l'oprande source dans l'oprande de destination.

Algorithme
SI taille de l'oprande = 16 bits ALORS dest(7..0) source(15..8) dest(15..8) source(7..0) SINON SI taille de l'oprande = 32 bits ALORS dest(7..0) source(31..24) dest(15..8) source(23..16) dest(23..16) source(15..8) dest(31..23) source(7..0) SINON SI taille de l'oprande = 64 bits ALORS dest(7..0) source(63..56) dest(15..8) source(55..48) dest(23..16) source(47..40) dest(31..24) source(39..32) dest(39..32) source(31..24) dest(47..40) source(23..16) dest(55..48) source(15..8) dest(63..56) source(7..0) FIN SI

559

Mnmonique
Instruction Opcode Description Cette instruction permet d'inverser l'ordre des octets d'un emplacement mmoire 16 bits lors de son copiage dans un registre 16 bits. Cette instruction permet d'inverser l'ordre des octets d'un emplacement mmoire 32 bits lors de son copiage dans un registre 32 bits.

MOVBE r16, m16

0Fh 38h F0h /r

MOVBE r32, m32

0Fh 38h F0h /r

MOVBE r64, m64

Cette instruction permet d'inverser l'ordre des octets d'un emplacement (REX.W) 0Fh 38h F0h /r mmoire 64 bits lors de son copiage dans un registre 64 bits. Cette instruction permet d'inverser l'ordre des octets d'un registre 16 bits lors de son copiage dans un emplacement mmoire 16 bits. Cette instruction permet d'inverser l'ordre des octets d'un registre 32 bits lors de son copiage dans un emplacement mmoire 32 bits.

MOVBE m16, r16

0Fh 38h F1h /r

MOVBE m32, r32

0Fh 38h F1h /r

MOVBE m64, r64

Cette instruction permet d'inverser l'ordre des octets d'un registre 64 bits (REX.W) 0Fh 38h F1h /r lors de son copiage dans un emplacement mmoire 64 bits.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction

560

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 732 734.

561

Assembleur 80x86
INTEL Pentium MMX+

MOVD
Move Doubleword or Quadword

Syntaxe
MOVD dest, source

Description Cette instruction permet de copier l'oprande dans un registre XMM ou vice-vera.

Algorithme
SI l'oprande de destination est un registre MMX ALORS dest(31..0) source dest(63..32) 00000000h SINON dest(31..0) source dest(127..32) 000000000000000000000000h FIN SI SI l'oprande source est un registre MMX ou XXM ALORS dest source(31..0) FIN SI

Mnmonique
Instruction Opcode Description Copie une valeur 32 bits de l'emplacement mmoire ou registre 32 bits dans un registre XMM.

MOVD xmm, reg/mem32

66h 0Fh 6Eh /r

562

MOVD xmm, reg/mem64

66h 0Fh 6Eh /r

Copie une valeur 64 bits de l'emplacement mmoire ou registre 64 bits dans un registre XMM. Copie une valeur 32 bits du registre XMM dans l'emplacement mmoire ou registre 32 bits. Copie une valeur 64 bits du registre XMM dans l'emplacement mmoire ou registre 64 bits. Copie une valeur 32 bits de l'emplacement mmoire ou registre 32 bits dans le registre MMX Copie une valeur 64 bits de l'emplacement mmoire ou registre 64 bits dans le registre MMX Copie une valeur 32 bits du registre MMX dans l'emplacement mmoire ou registre 32 bits Copie une valeur 64 bits du registre MMX dans l'emplacement mmoire ou registre 64 bits

MOVD reg/mem32, xmm

66h 0Fh 7Eh /r

MOVD reg/mem64, xmm

66h 0Fh 7Eh /r

MOVD mmx, reg/mem32

0Fh 6Eh /r

MOVD mmx, reg/mem64

0Fh 6Eh /r

MOVD reg/mem32, mmx

0Fh 7Eh /r

MOVD reg/mem64, mmx

0Fh 7Eh /r

Exceptions
Message #UD(Opcode invalide) Mode rel X Virtuel 8086 X Mode protg X Description Cette instruction n'est pas support, comme indiqu par le

563

bit 23 du registre EDX de la fonction 0000_00001h de l'instruction CPUID. X X X Les ensembles d'instructions SSE2 ne sont pas support, comme indiqu par le bit 26 du registre EDX de la fonction 0000_0001h de l'instruction CPUID. Le bit d'mulation (EM) du registre CR0 est fix 1. L'instruction utilise les registres XMM avec le registre CR4.OSFXSR=0. Le bit d'changeur de tche (TS) du registre CR0 est fix 1. Une adresse

#NM(Priphrique non disponible)

#SS(Pile)

564

mmoire dpasse la limite du segment de pile ou n'est pas canonique #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Une faute de page rsultat de l'excution de l'instruction Un exception de nombre rel x87 s'est produite et l'instruction rfrence un registre MMX. Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#MF(x87 virgule flottante)

#AC(Vrifie l'alignement)

565

Voir Instruction Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction Instruction

galement MOVDQA MOVDQU MOVDQ2Q MOVQ MOVQ2DQ

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 735 737.

566

Assembleur 80x86
INTEL Pentium 4 (SSE3)+

MOVDDUP
Move One Double-FP and Duplicate

Syntaxe
MOVDDUP destination, source

Description Cette instruction permet de copier les 64 bits d'une oprande dans la partie basse et haute d'une oprande de 128 bits.

Algorithme
destination(0..63) source(0..63) destination(64..127) source(0..63)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier les 64 bits d'une oprande dans la partie basse et haute d'une oprande de 128 bits.

MOVDDUP xmm1, xmm2/m64

F2h 0Fh 12h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 738 741.
567

568

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVDQ2Q
Move Quadword from XMM to MMX Technology Register

Syntaxe
MOVDQ2Q destination, source

Description Cette instruction permet de copier la partie basse d'un quadruple mots d'un oprande source vers un oprande de destination.

Algorithme
destination source(0..63)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier la partie basse d'un quadruple mots d'un oprande source vers un oprande de destination.

MOVDQ2Q mm, xmm

F2h 0Fh D6h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 748 749.

569

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVDQA
Move Aligned Double Quadword

Syntaxe
MOVDQA destination, source

Description Cette instruction permet de copier un double quadruple mots d'un oprande source vers un oprande de destination.

Algorithme
destination source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un double quadruple mots d'un oprande source vers un oprande de destination. Cette instruction permet de copier un double quadruple mots d'un oprande source vers un oprande de destination.

MOVDQA xmm1, xmm2/m128

66h 0Fh 6Fh /r

MOVDQA xmm2/m128, xmm1

66h 0Fh 7Fh /r

Rfrences
570

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 742 744.

571

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVDQU
Move Unaligned Double Quadword

Syntaxe
MOVDQU destination, source

Description Cette instruction permet de copier un double quadruple mots dsalign d'un oprande source vers un oprande de destination.

Algorithme
destination source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un double quadruple mots dsalign d'un oprande source vers un oprande de destination. Cette instruction permet de copier un double quadruple mots dsalign d'un oprande source vers un oprande de destination.

MOVDQU xmm1, xmm2/m128

F3h 0Fh 6Fh /r

MOVDQU xmm2/m128, xmm1

F3h 0Fh 7Fh /r

Rfrences
572

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 745 747.

573

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MOVHLPS
Move High to Low Packed Single

Syntaxe
MOVHLPS dest,source

Description Cette instruction permet de copier le contenu du haut d'un paquet de valeurs rel de simple prcision dans sa partie basse.

Algorithme
dest(63..32) source(127..96) dest(31..0) source(95..64)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu du haut d'un paquet de valeurs rel de simple prcision dans sa partie basse.

MOVHLPS xmm1,xmm2

0Fh 12h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction

574

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 750 751.

575

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVHPD
Move High Packed Double-Precision FloatingPoint Value

Syntaxe
MOVHPD destination, source

Description Cette instruction permet de copier le contenu du haut de deux paquets de valeurs rel de double prcision dans une oprande de destination.

Algorithme
destination(64..127) source destination source(64..127)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu du haut de deux paquets de valeurs rel de double prcision dans une oprande de destination. Cette instruction permet de copier le contenu du haut de deux paquets de valeurs rel de double prcision dans une oprande de destination.

MOVHPD xmm, m64

66 0F 16 /r

MOVHPD m64, xmm

66h 0Fh 17h /r

576

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 752 753.

577

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MOVHPS
Move High Packed Single-Precision FloatingPoint Values

Syntaxe
MOVHPS dest,source

Description Cette instruction permet de copier le contenu du haut de deux paquets de valeurs rel de simple prcision dans une oprande de destination.

Algorithme
SI dest est mmoire 64 bits ALORS dest(63..32) source(127..96) dest(31..0) source(95..64) FIN SI SI source est mmoire 64 bits ALORS dest(127..96) source(63..32) dest(95..64) source(31..0) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu du haut de deux paquets de valeurs rel de simple prcision dans

MOVHPS xmm,m64

0Fh 16h /r

578

une oprande de destination. Cette instruction permet de copier le contenu du haut de deux paquets de valeurs rel de simple prcision dans une oprande de destination.

MOVHPS m64,xmm

0Fh 17h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 754 757.

579

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MOVLHPS
Move Low to High Packed Single

Syntaxe
MOVLHPS dest,source

Description Cette instruction permet de copier le contenu du bas d'un paquet de valeurs rel de simple prcision dans sa partie haute.

Algorithme
dest(127..96) source(63..32) dest(95..64) source(31..0)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu du bas d'un paquet de valeurs rel de simple prcision dans sa partie haute.

MOVLHPS xmm1,xmm2

0Fh 16h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction

580

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 758 759.

581

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVLPD
Move Low Packed Double-Precision FloatingPoint Value

Syntaxe
MOVLPD destination, source

Description Cette instruction permet de copier le contenu du bas de deux paquets de valeurs rel de double prcision dans un oprande de destination.

Algorithme
SI IsXMM(Destination) ALORS destination(0..63) source SINON destination source(0..63) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu du bas de deux paquets de valeurs rel de double prcision dans un oprande de destination. Cette instruction permet de copier le contenu du bas de deux paquets de valeurs rel de double prcision dans

MOVLPD xmm, m64

66h 0Fh 12h /r

MOVLPD m64, xmm

66h 0Fh 13h /r

582

un oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 760 762.

583

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MOVLPS
Move Low Packed Single-Precision FloatingPoint Values

Syntaxe
MOVLPS dest,source

Description Cette instruction permet de copier le contenu du bas de deux paquets de valeurs rel de simple prcision dans une oprande de destination.

Algorithme
dest(63..32) source(63..32) dest(31..0) source(31..0)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu du bas de deux paquets de valeurs rel de simple prcision dans une oprande de destination. Cette instruction permet de copier le contenu du bas de deux paquets de valeurs rel de simple prcision dans une oprande de destination.

MOVLPS xmm,m64

0Fh 12h /r

MOVLPS m64,xmm

0Fh 13h /r

584

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 763 765.

585

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVMSKPD
Extract Packed Double-Precision Floating-Point Sign Mask

Syntaxe
MOVMSKPD registres32, registrexmm

Description Cette instruction permet de copier les bits de signes de deux paquets de valeurs rels de double prcision d'un registre XMM dans les 2 bits les plus bas d'un registre 32 bits. Les autres bits du registres 32 bits sont fixs 0.

Algorithme
registres32(0) registrexmm(63) registres32(1) registrexmm(127) registres32(3..2) 00b registres32(31..4) 0000000h

Mnmonique
Instruction Opcode Description Copie les bits de signe 127 et 63 d'un registre XMM dans un registre 32 bits spcifi.

MOVMSKPD reg32, xmm

66h 0Fh 50h /r

Exceptions

586

Message #UD(Opcode invalide)

Mode rel X

Virtuel 8086 X

Mode protg X

Description Les ensembles d'instructions SSE2 ne sont pas support, comme indiqu par le bit 26 du registre EDX de la fonction 0000_0001h de l'instruction CPUID. Le bit de support du systme d'exploitation FXSAVE et FXRSTOR (OSFXSR) du registre CR4 sont effacs 0. Le bit d'mulation (EM) du registre CR0 est fix 1. Le bit d'changeur de tche (TS) du registre CR0 est fix 1.

#NM(Priphrique non disponible)

587

Voir Instruction assembleur 80x86 Instruction

galement MOVMSKPS

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 766 767.

588

Assembleur 80x86
INTEL Pentium 3 (SSE)+

MOVMSKPS
Extract Packed Single-Precision Floating-Point Sign Mask

Syntaxe
MOVMSKPS registres32, registrexmm

Description Cette instruction permet de copier les bits de signes de quatre paquets de valeurs rels de simple prcision d'un registre XMM dans les 4 bits les plus bas d'un registre 32 bits. Les autres bits du registres 32 bits sont fixs 0.

Algorithme
registres32(0) registrexmm(31) registres32(1) registrexmm(63) registres32(1) registrexmm(95) registres32(1) registrexmm(127) registres32(31..4) 000000h

Mnmonique
Instruction Opcode Description Copie les bits de signe 127, 95, 63 et 31 du registre XMM au registre 32 bits spcifi.

MOVMSKPS reg32, xmm

0Fh 50h /r

Exceptions

589

Message #UD(Opcode invalide)

Mode rel X

Virtuel 8086 X

Mode protg X

Description Les ensembles d'instructions SSE2 ne sont pas support, comme indiqu par le bit 26 du registre EDX de la fonction 0000_0001h de l'instruction CPUID. Le bit de support du systme d'exploitation FXSAVE et FXRSTOR (OSFXSR) du registre CR4 sont effacs 0. Le bit d'mulation (EM) du registre CR0 est fix 1. Le bit d'changeur de tche (TS) du registre CR0 est fix 1.

#NM(Priphrique non disponible)

590

Voir Instruction assembleur 80x86 Instruction

galement MOVMSKPD

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 768 768.

591

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVNTI
Move Non-Temporal Doubleword or Quadword

Syntaxe
MOVNTI memoire, registre

Description Cette instruction permet de copier une valeur 32 ou 64 bits dans un emplacement mmoire afin de minimiser la pollution du cache dans un processus lger.

Algorithme
memoire registre

Mnmonique
Instruction Opcode Description Entrepose une valeur de registre 32 bits spcifi dans un emplacement mmoire en minimisant la pollution du systme de cache. Entrepose une valeur de registre 64 bits spcifi dans un emplacement mmoire en minimisant la pollution du systme de cache.

MOVNTI mem32, reg32

0Fh C3h /r

MOVNTI mem64, reg64

0Fh C3h /r

Exceptions
592

Message

Mode rel

Virtuel 8086 X

Mode protg X

Description Les ensembles d'instructions SSE2 ne sont pas support, comme indiqu par le bit 26 du registre EDX de la fonction 0000_0001h de l'instruction CPUID. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment

#UD(Opcode invalide) X

#SS(Pile)

#GP(Protection gnral)

593

de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction

galement MOVNTDQ MOVNTPD MOVNTPS MOVNTQ

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 776 778.

594

Assembleur 80x86
SSE4.1+

MOVNTDQ
Store Double Quadword Using Non-Temporal Hint

Syntaxe
MOVNTDQ destination, source

Description Cette instruction permet de copier le contenu de double quadruple mots d'un oprande source vers un oprande de destination sans utiliser la mthode temporel pour minimiser la pollution du cache.

Algorithme
destination source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu de double quadruple mots d'un oprande source vers un oprande de destination sans utiliser la mthode temporel pour minimiser la pollution du cache.

MOVNTDQ m128, xmm

66h 0Fh E7h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction
595

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 773 775.

596

Assembleur 80x86
SSE4.1+

MOVNTDQA
Load Double Quadword Non-Temporal Aligned Hint

Syntaxe
MOVNTDQA dest,source

Description Cette instruction permet de copier le contenu align de double quadruple mots d'un oprande source vers un oprande de destination sans utiliser la mthode temporel pour minimiser la pollution du cache.

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu align de double quadruple mots d'un oprande source vers un oprande de destination sans utiliser la mthode temporel pour minimiser la pollution du cache.

MOVNTDQA xmm1, m128

66h 0Fh 38h 2Ah /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 770 772.

597

Assembleur 80x86
SSE4.1+

MOVNTPD
Store Packed Double-Precision Floating-Point Values Using Non-Temporal Hint

Syntaxe
MOVNTPD destination, source

Description Cette instruction permet de copier le contenu de valeur rel de double prcision d'un oprande source vers un oprande de destination sans utiliser la mthode temporel pour minimiser la pollution du cache.

Algorithme
destination source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu de valeur rel de double prcision d'un oprande source vers un oprande de destination sans utiliser la mthode temporel pour minimiser la pollution du cache.

MOVNTPD m128, xmm

66h 0Fh 2Bh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction
598

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 778 780.

599

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MOVNTPS
Move Aligned Four Packed Single-FP Non Temporal

Syntaxe
MOVNTPS dest,source

Description Cette instruction permet de copier le contenu de 4 paquets aligns de valeurs rel de simple prcision sans utiliser la mthode temporel pour minimiser la pollution du cache.

Algorithme
dest source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu de 4 paquets aligns de valeurs rel de simple prcision sans utiliser la mthode temporel pour minimiser la pollution du cache.

MOVNTPS m128,xmm

0Fh 2Bh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction

600

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 781 783.

601

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MOVNTQ
Move Quadword Non-Temporal

Syntaxe
MOVNTQ dest,source

Description Cette instruction permet de copier une valeur 64 bits sans utiliser la mthode temporel pour minimiser la pollution du cache.

Algorithme
dest source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier une valeur 64 bits sans utiliser la mthode temporel pour minimiser la pollution du cache.

MOVNTQ m64,mm

0Fh E7h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 741 786.
602

Assembleur 80x86
INTEL Pentium MMX+

MOVQ
Move Quadword

Syntaxe
MOVQ destination, source

Description Cette instruction permet de copier un quadruple mot d'une oprande source vers une oprande destination dans le cas des registres XMM.

Algorithme
destination source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un quadruple mot d'une oprande source vers une oprande destination dans le cas des registres XMM. Cette instruction permet de copier un quadruple mot d'une oprande source vers une oprande destination dans le cas des registres XMM. Cette instruction permet de copier un quadruple mot d'une oprande

MOVQ mm, mm/m64

0Fh 6Fh /r

MOVQ mm/m64, mm

0Fh 7Fh /r

MOVQ xmm1, xmm2/m64

F3h 0Fh 7Eh

603

source vers une oprande destination dans le cas des registres XMM. Cette instruction permet de copier un quadruple mot d'une oprande source vers une oprande destination dans le cas des registres XMM.

MOVQ xmm2/m64, xmm1

66h 0Fh D6h

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 735 737.

604

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVQ2DQ
Move Quadword from MMX Technology to XMM Register

Syntaxe
MOVQ2DQ destination, source

Description Cette instruction permet de copier un quadruple mot d'un oprande source vers la partie basse d'un oprande destination dans le cas des registres XMM.

Algorithme
destination(0..63) source(0..63) destination(64..127) 0

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un quadruple mot d'un oprande source vers la partie basse d'un oprande destination dans le cas des registres XMM.

MOVQ2DQ xmm, mm

F3h 0Fh D6h

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction

605

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 789 791.

606

Assembleur 80x86 INTEL 8088+

MOVS MOVe String

Syntaxe
MOVS oprandecible,oprandesource

Description Cette instruction permet de copier un lment de l'adresse DS:SI dans l'adresse ES:DI et incrmente/dcrmente les registres DI et SI en fonction de la taille de l'oprande source et de l'tat du drapeau de direction.

Algorithme
oprandecible oprandesource SI oprande est un octet ALORS SI DF = 0 ALORS (E)SI (E)SI + 1 (E)DI (E)DI + 1 SINON (E)SI (E)SI - 1 (E)DI (E)DI - 1 FIN SI SINON SI oprande est un mot ALORS SI DF = 0 ALORS (E)SI (E)SI + 2 (E)DI (E)DI + 2 SINON (E)SI (E)SI - 2 (E)DI (E)DI - 2 FIN SI SINON SI oprande est un double mot ALORS SI DF = 0 ALORS (E)SI (E)SI + 4 (E)DI (E)DI + 4

607

SINON (E)SI (E)SI - 4 (E)DI (E)DI - 4 FIN SI SINON SI DF = 0 ALORS (E)SI (E)SI + 8 (E)DI (E)DI + 8 SINON (E)SI (E)SI - 8 (E)DI (E)DI - 8 FIN SI FIN SI

Mnmonique
Instruction Opcode Description Copie l'octet de DS:(R)SI ES:(R)DI, et alors incrmente ou dcrment le registre (R)SI et (R)DI. Copie le mot de DS:(R)SI ES:(R)DI, et alors incrmente ou dcrment le registre (R)SI et (R)DI. Copie le double mot de DS:(R)SI ES:(R)DI, et alors incrmente ou dcrment le registre (R)SI et (R)DI. Copie le double mot de DS:(R)SI ES:(R)DI, et alors incrmente ou dcrment le registre (R)SI et (R)DI.

MOVS mem8, mem8

A4h

MOVS mem16, mem16

A5h

MOVS mem32, mem32

A5h

MOVS mem64, mem64

A5h

Exceptions

608

Message

Mode rel

Virtuel 8086

Mode protg

Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile noncanonique)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie

609

l'alignement)

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement MOV LODS STOS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 821 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 411 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 168. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 792 796.

610

Assembleur 80x86 INTEL 8088+

MOVSB MOVe String Byte

Syntaxe
MOVSB

Description Cette instruction permet de copier un octet de l'adresse DS:SI dans l'adresse ES:DI et incrmente/dcrmente les registres DI et SI de 1 en fonction de l'tat du drapeau de direction.

Algorithme
oprandecible oprandesource SI DF = 0 ALORS (E)SI (E)SI + 1 (E)DI (E)DI + 1 SINON (E)SI (E)SI - 1 (E)DI (E)DI - 1 FIN SI

Mnmonique
Instruction Opcode Description Copie l'octet de DS:(R)SI ES:(R)DI, et alors incrmente ou dcrment le registre (R)SI et (R)DI.

MOVSB

A4h

Exceptions
611

Message

Mode rel

Virtuel 8086

Mode protg

Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile noncanonique)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie

612

l'alignement)

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement MOV LODS STOS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 821 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 168. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 792 796.

613

Assembleur 80x86 INTEL 80386+

MOVSD MOVe String Double word

Syntaxe
MOVSD

Description Cette instruction permet de copier un double mot de l'adresse DS:SI dans l'adresse ES:DI et incrmente/dcrmente les registres DI et SI de 4 en fonction de l'tat du drapeau de direction.

Algorithme
oprandecible oprandesource SI DF = 0 ALORS (E)SI (E)SI + 4 (E)DI (E)DI + 4 SINON (E)SI (E)SI - 4 (E)DI (E)DI - 4 FIN SI

Mnmonique
Instruction Opcode Description Copie le double mot de DS:(R)SI ES:(R)DI, et alors incrmente ou dcrment le registre (R)SI et (R)DI.

MOVSD

A5h

Exceptions
614

Message

Mode rel

Virtuel 8086

Mode protg

Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile noncanonique)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie

615

l'alignement)

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement MOV LODS STOS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 822 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 168. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 792 796.

616

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVSD
Move Scalar Double-Precision Floating-Point Value

Syntaxe
MOVSD dest,source

Description Cette instruction permet de copier un scalaire de valeur de double prcision d'un oprande source vers un oprande destination.

Algorithme
dest(63..0) source(63..0)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un scalaire de valeur de double prcision d'un oprande source vers un oprande destination. Cette instruction permet de copier un scalaire de valeur de double prcision d'un oprande source vers un oprande destination.

MOVSD xmm1,xmm2/m64

F2h 0Fh 10h /r

MOVSD xmm2/m64,xmm1

F2h 0Fh 11h /r

Rfrences
617

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 797 799.

618

Assembleur 80x86
SSE4.1+

MOVSHDUP
Move Packed Single-Float Point High and Duplicate

Syntaxe
MOVSHDUP destination, source

Description Cette instruction permet de copier la partie du haut de 32 bits d'une valeur 64 bits dans sa partie basse et haute d'une valeur rel de simple prcision de 64 bits contenu dans un paquet de 128 bits.

Algorithme
destination(0..31) source(32..63) destination(32..63) source(32..63) destination(64..95) source(96..127) destination(96..127) source(96..127)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier la partie du haut de 32 bits d'une valeur 64 bits dans sa partie basse et haute d'une valeur rel de simple prcision de 64 bits contenu dans un paquet de 128 bits.

MOVSHDUP xmm1, xmm2/m128 F3h 0Fh 16h /r

619

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 800 802.

620

Assembleur 80x86
SSE4.1+

MOVSLDUP
Move Packed Single-Float Point Low and Duplicate

Syntaxe
MOVSLDUP destination, source

Description Cette instruction permet de copier la partie du basse de 32 bits d'une valeur 64 bits dans sa partie basse et haute d'une valeur rel de simple prcision de 64 bits contenu dans un paquet de 128 bits.

Algorithme
destination(0..31) source(0..31) destination(32..63) source(0..31) destination(64..95) source(64..95) destination(96..127) source(64..95)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier la partie du basse de 32 bits d'une valeur 64 bits dans sa partie basse et haute d'une valeur rel de simple prcision de 64 bits contenu dans un paquet de 128 bits.

MOVSLDUP xmm1, xmm2/m128 F3h 0Fh 12h /r

621

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 803 805.

622

Assembleur 80x86
x86-64+

MOVSQ
Move String Quadword

Syntaxe
MOVSQ

Description Cette instruction permet de copier un quadruple mot de l'adresse DS:(R)SI dans l'adresse ES:(R)DI et incrmente/dcrmente les registres (R)DI et (R)SI de 8 en fonction de l'tat du drapeau de direction.

Algorithme
oprandecible oprandesource SI DF = 0 ALORS (E)SI (E)SI + 8 (E)DI (E)DI + 8 SINON (E)SI (E)SI - 8 (E)DI (E)DI - 8 FIN SI

Mnmonique
Instruction Opcode Description Copie le double mot de DS:(R)SI ES:(R)DI, et alors incrmente ou dcrment le registre (R)SI et (R)DI.

MOVSQ

A5h

623

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction

#SS(Pile noncanonique)

#GP(Protection gnral)

#PF(Faute de page)

624

#AC(Vrifie l'alignement)

Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement MOV LODS STOS

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 792 796.

625

Assembleur 80x86
INTEL Pentium MMX+

MOVSS
Move Scalar Single-Precision Floating-Point Values

Syntaxe
MOVSS destination, source

Description Cette instruction permet de copier une valeur rel de simple prcision d'une oprande source vers une oprande de destination.

Algorithme
destination(31..0) source(31..0)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier une valeur rel de simple prcision d'une oprande source vers une oprande de destination. Cette instruction permet de copier une valeur rel de simple prcision d'une oprande source vers une oprande de destination.

MOVSS xmm1,xmm2/m32

F3h 0Fh 10h /r

MOVSS xmm2/m32,xmm1

F3h 0Fh 11h /r

Rfrences
626

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 806 808.

627

Assembleur 80x86 INTEL 8088+

MOVSW MOV String Word

Syntaxe
MOVSW

Description Cette instruction permet de copier un mot de l'adresse DS:SI dans l'adresse ES:DI et incrmente/dcrmente les registres DI et SI de 2 en fonction de l'tat du drapeau de direction.

Algorithme
oprandecible oprandesource SI DF = 0 ALORS (E)SI (E)SI + 2 (E)DI (E)DI + 2 SINON (E)SI (E)SI - 2 (E)DI (E)DI - 2 FIN SI

Mnmonique
Instruction Opcode Description Copie le mot de DS:(R)SI ES:(R)DI, et alors incrmente ou dcrment le registre (R)SI et (R)DI.

MOVSW

A5h

Exceptions
628

Message

Mode rel

Virtuel 8086

Mode protg

Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement

#SS(Pile noncanonique)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie

629

l'alignement)

de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement MOV LODS STOS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 822 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 168. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 792 796.

630

Assembleur 80x86
INTEL 80386+

MOVSX
Move with Sign-Extension

Syntaxe
MOVSX operandedestination, operandesource

Description Cette instruction permet de copier un registre de taille infrieur dans un registre de plus grande taille en remplissant les bits supplmentaires par des 1.

Algorithme
SI taille de l'oprande source = 8 bits ALORS SI taille de l'oprande destinataire = 16 bits ALORS operandedestination(15..8) FFh operandedestination(7..0) operandesource SINON operandedestination(31..8) FFFFFFh operandedestination(7..0) operandesource FIN SI SINON operandedestination(31..16) FFFFh operandedestination(15..0) operandesource FIN SI

Mnmonique
Instruction MOVSX reg16, reg/mem8 Opcode 0Fh BEh /r Description Copie le contenu du registre ou d'un emplacement mmoire 8 bits dans un 631

registre 16 bits avec un extension des signes. Copie le contenu du registre ou d'un emplacement mmoire 8 bits dans un registre 32 bits avec un extension des signes. Copie le contenu du registre ou d'un emplacement mmoire 8 bits dans un registre 64 bits avec un extension des signes. Copie le contenu du registre ou d'un emplacement mmoire 16 bits dans un registre 32 bits avec un extension des signes. Copie le contenu du registre ou d'un emplacement mmoire 16 bits dans un registre 64 bits avec un extension des signes.

MOVSX reg32, reg/mem8

0Fh BEh /r

MOVSX reg64, reg/mem8

0Fh BEh /r

MOVSX reg32, reg/mem16

0Fh BFh /r

MOVSX reg64, reg/mem16

0Fh BFh /r

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la

#SS(Pile)

#GP(Protection gnral)

632

limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction Rfrences assembleur assembleur 80x86 80x86 Instruction Instruction

galement MOVSXD MOVZX

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 809 811.
633

Assembleur 80x86
x86-64+

MOVSXD
Move with Sign-Extend Doubleword

Syntaxe
MOVSXD registres64, source

Description Cette instruction permet de copier un registre de taille infrieur dans un registre 64 bits en remplissant les bits supplmentaires par des 1.

Algorithme
SI taille de l'oprande source = 8 bits ALORS operandedestination(63..8) FFFFFFFFFFFFFFh operandedestination(7..0) operandesource SINON SI taille de l'oprande source = 16 bits ALORS operandedestination(63..16) FFFFFFFFFFFFh operandedestination(15..0) operandesource SINON SI taille de l'oprande source = 32 bits ALORS operandedestination(63..32) FFFFFFFFh operandedestination(31..0) operandesource FIN SI

Mnmonique
Instruction Opcode Description Copie le contenu du registre ou d'un emplacement mmoire 32 bits dans un registre 64 bits avec un extension

MOVSXD reg64, reg/mem32

63h /r

634

des signes.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

#AC(Vrifie l'alignement)

635

Voir Instruction Instruction Rfrences assembleur assembleur 80x86 80x86 Instruction Instruction

galement MOVSX MOVZX

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 809 811.

636

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MOVUPD
Move Unaligned Packed Double-Precision Floating-Point Values

Syntaxe
MOVUPD destination, source

Description Cette instruction permet de copier le contenu de 2 paquets dsaligns de valeurs rel de double prcision.

Algorithme
destination source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu de 2 paquets dsaligns de valeurs rel de double prcision. Cette instruction permet de copier le contenu de 2 paquets dsaligns de valeurs rel de double prcision.

MOVUPD xmm1, xmm2/m128

66h 0Fh 10h /r

MOVUPD xmm2/m128, xmm

66h 0Fh 11h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction
637

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 812 814.

638

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MOVUPS
Move Unaligned Packed Double-Precision Floating-Point Values

Syntaxe
MOVUPS dest,source

Description Cette instruction permet de copier le contenu de 4 paquets dsaligns de valeurs rel de simple prcision (4 x 32 bits).

Algorithme
dest source

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le contenu de 4 paquets dsaligns de valeurs rel de simple prcision (4 x 32 bits). Cette instruction permet de copier le contenu de 4 paquets dsaligns de valeurs rel de simple prcision (4 x 32 bits).

MOVUPS xmm1,xmm2/m128

0Fh 10h /r

MOVUPS xmm2/m128,xmm1

0Fh 11h /r

639

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 815 817.

640

Assembleur 80x86
INTEL 80386+

MOVZX
Move with Zero-Extend

Syntaxe
MOVZX operandedestination, operandesource

Description Cette instruction permet de copier un registre de taille infrieur dans un registre de plus grande taille en remplissant les bits supplmentaires par des 0.

Algorithme
SI taille de l'oprande source = 8 bits ALORS SI taille de l'oprande destinataire = 16 bits ALORS operandedestination(15..8) 00h operandedestination(7..0) operandesource SINON operandedestination(31..8) 000000h operandedestination(7..0) operandesource FIN SI SINON operandedestination(31..16) 0000h operandedestination(15..0) operandesource FIN SI

Mnmonique
Instruction MOVZX reg16, reg/mem8 Opcode 0Fh B6h /r Description Copie le contenu d'une oprande de registre ou d'un emplacement 641

mmoire 8 bits dans un registre 16 bits avec un extension des zros. Copie le contenu d'une oprande de registre ou d'un emplacement mmoire 8 bits dans un registre 32 bits avec un extension des zros. Copie le contenu d'une oprande de registre ou d'un emplacement mmoire 8 bits dans un registre 64 bits avec un extension des zros. Copie le contenu d'une oprande de registre ou d'un emplacement mmoire 16 bits dans un registre 32 bits avec un extension des zros. Copie le contenu d'une oprande de registre ou d'un emplacement mmoire 16 bits dans un registre 64 bits avec un extension des zros.

MOVZX reg32, reg/mem8

0Fh B6h /r

MOVZX reg64, reg/mem8

0Fh B6h /r

MOVZX reg32, reg/mem16

0Fh B7h /r

MOVZX reg64, reg/mem16

0Fh B7h /r

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la

#SS(Pile noncanonique)

#GP(Protection gnral)

642

limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction Rfrences assembleur assembleur 80x86 80x86 Instruction Instruction

galement MOVSXD MOVSX

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 818 819.
643

Assembleur 80x86
SSE4.1

MPSADBW
Compute Multiple Packed Sums of Absolute Difference

Syntaxe
MPSADBW dest,source,immediat

Description Cette instruction permet d'effectuer le calcul de la somme de la diffrence absolue (SAD) d'une paire d'octets d'un groupe de 4 octets paires et produit 8 rsultats SAD entrepos dans 8 entier contenu dans l'oprande de destination.

Algorithme
SRC_OFFSET immediat(1..0) x 32 DEST_OFFSET immediat(2) x 32 DEST_BYTE0 dest[DEST_OFFSET+7..DEST_OFFSET] DEST_BYTE1 dest[DEST_OFFSET+15..DEST_OFFSET+8] DEST_BYTE2 dest[DEST_OFFSET+23..DEST_OFFSET+16] DEST_BYTE3 dest[DEST_OFFSET+31..DEST_OFFSET+24] DEST_BYTE4 dest[DEST_OFFSET+39..DEST_OFFSET+32] DEST_BYTE5 dest[DEST_OFFSET+47..DEST_OFFSET+40] DEST_BYTE6 dest[DEST_OFFSET+55..DEST_OFFSET+48] DEST_BYTE7 dest[DEST_OFFSET+63..DEST_OFFSET+56] DEST_BYTE8 dest[DEST_OFFSET+71..DEST_OFFSET+64] DEST_BYTE9 dest[DEST_OFFSET+79..DEST_OFFSET+72] DEST_BYTE10 dest[DEST_OFFSET+87..DEST_OFFSET+80] SRC_BYTE0 source[SRC_OFFSET+7..SRC_OFFSET] SRC_BYTE1 source[SRC_OFFSET+15..SRC_OFFSET+8] SRC_BYTE2 source[SRC_OFFSET+23..SRC_OFFSET+16] SRC_BYTE3 source[SRC_OFFSET+31..SRC_OFFSET+24] TEMP0 | DEST_BYTE0 - SRC_BYTE0 |

644

TEMP1 | DEST_BYTE1 - SRC_BYTE1 | TEMP2 | DEST_BYTE2 - SRC_BYTE2 | TEMP3 | DEST_BYTE3 - SRC_BYTE3 | dest(15..0) TEMP0 + TEMP1 + TEMP2 + TEMP3 TEMP0 | DEST_BYTE1 - SRC_BYTE0 | TEMP1 | DEST_BYTE2 - SRC_BYTE1 | TEMP2 | DEST_BYTE3 - SRC_BYTE2 | TEMP3 | DEST_BYTE4 - SRC_BYTE3 | dest(31..16) TEMP0 + TEMP1 + TEMP2 + TEMP3 TEMP0 | DEST_BYTE2 - SRC_BYTE0 | TEMP1 | DEST_BYTE3 - SRC_BYTE1 | TEMP2 | DEST_BYTE4 - SRC_BYTE2 | TEMP3 | DEST_BYTE5 - SRC_BYTE3 | dest(47..32) TEMP0 + TEMP1 + TEMP2 + TEMP3 TEMP0 | DEST_BYTE3 - SRC_BYTE0 | TEMP1 | DEST_BYTE4 - SRC_BYTE1 | TEMP2 | DEST_BYTE5 - SRC_BYTE2 | TEMP3 | DEST_BYTE6 - SRC_BYTE3 | dest(63..48) TEMP0 + TEMP1 + TEMP2 + TEMP3 TEMP0 | DEST_BYTE4 - SRC_BYTE0 | TEMP1 | DEST_BYTE5 - SRC_BYTE1 | TEMP2 | DEST_BYTE6 - SRC_BYTE2 | TEMP3 | DEST_BYTE7 - SRC_BYTE3 | dest(79..64) TEMP0 + TEMP1 + TEMP2 + TEMP3 TEMP0 | DEST_BYTE5 - SRC_BYTE0 | TEMP1 | DEST_BYTE6 - SRC_BYTE1 | TEMP2 | DEST_BYTE7 - SRC_BYTE2 | TEMP3 | DEST_BYTE8 - SRC_BYTE3 | dest(95..80) TEMP0 + TEMP1 + TEMP2 + TEMP3 TEMP0 | DEST_BYTE6 - SRC_BYTE0 | TEMP1 | DEST_BYTE7 - SRC_BYTE1 | TEMP2 | DEST_BYTE8 - SRC_BYTE2 | TEMP3 | DEST_BYTE9 - SRC_BYTE3 | dest(111..96) TEMP0 + TEMP1 + TEMP2 + TEMP3 TEMP0 | DEST_BYTE7 - SRC_BYTE0 | TEMP1 | DEST_BYTE8 - SRC_BYTE1 | TEMP2 | DEST_BYTE9 - SRC_BYTE2 | TEMP3 | DEST_BYTE10 - SRC_BYTE3 | dest(127..112) TEMP0 + TEMP1 + TEMP2 + TEMP3

645

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer le calcul de la somme de la diffrence absolue (SAD) d'une paire d'octets d'un groupe de 4 octets paires et produit 8 rsultats SAD entrepos dans 8 entier contenu dans l'oprande de destination.

MPSADBW xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 42h /r ib

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 820 823.

646

Assembleur 80x86 INTEL 8088+

MUL Multiplication

Syntaxe
MUL Oprande

Description Cette instruction permet d'effectuer une multiplication non-signe (nombre naturel). Le multiplicateur est implicite; il est ajuster en fonction de la taille de la base. Le produit est toujours plus grand que le multiplicateur. Le type de multiplication dtermine quel registre l'instruction utilisera:
Taille Octet Mot Base Multiplicateur Rsultat AL AX Oprande Oprande Oprande AX DX:AX EDX:EAX

Double mot EAX

Algorithme
SI Nombre d'oprande = 1 ALORS SI Taille de l'oprande en bits = 8 ALORS AX AL x Oprande SI (AH = 00h) OU (AH = FFh) ALORS CF 0 OF 0 SINON CF 1 OF 1 FIN SI SINON SI Taille de l'oprande en bits = 16 ALORS 647

DX:AX AX x Oprande SI (DX = 0000h) OU (DX = FFFFh) ALORS CF 0 OF 0 SINON CF 1 OF 1 FIN SI SINON EDX:EAX EAX x Oprande SI ((EDX = 00000000h) OU (EDX = FFFFFFFFh)) ALORS CF 0 OF 0 SINON CF 1 OF 1 FIN SI FIN SI SINON SI Nombre d'oprande = 2 ALORS temp dest x src dest dest x src SI temp = dest ALORS CF 1 OF 1 SINON CF 0 OF 0 FIN SI SINON temp dest x src dest dest x src SI temp = dest ALORS CF 1 OF 1 SINON CF 0 OF 0 FIN SI FIN SI FIN SI

648

Mnmonique
Instruction Opcode Description Multiple l'oprande mmoire ou registre 8 bits par le contenu du registre AL et entrepose le rsultat dans le registre AX. Multiple l'oprande mmoire ou registre 16 bits par le contenu du registre AX et entrepose le rsultat dans le registre DX:AX. Multiple l'oprande mmoire ou registre 32 bits par le contenu du registre EAX et entrepose le rsultat dans le registre EDX:EAX. Multiple l'oprande mmoire ou registre 64 bits par le contenu du registre RAX et entrepose le rsultat dans le registre RDX:RAX.

MUL reg/mem8

F6h /4

MUL reg/mem16

F7h /4

MUL reg/mem32

F7h /4

MUL reg/mem64

F7h /4

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire

#SS(Pile noncanonique)

#GP(Protection

649

gnral)

dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir

galement

Instruction assembleur 80x86 Instruction DIV Instruction assembleur 80x86 Instruction IMUL Langage de programmation - Assembleur et Pascal - Opration Mathmatique

Rfrences

650

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 822 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 411 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 173. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 824 826.

651

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MULPD
Multiply Packed Double-Precision FloatingPoint Values

Syntaxe
MULPD destination, source

Description Cette instruction permet d'effectuer la multiplication de chacune des paires de valeur de double prcision de l'oprande source et l'oprande de destination.

Algorithme
destination(0..63) destination(0..63) x source(0..63) destination(64..127) destination(64..127) x source(64..127)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la multiplication de chacune des paires de valeur de double prcision de l'oprande source et l'oprande de destination.

MULPD xmm1, xmm2/m128

66h 0Fh 59h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction

652

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 827 829.

653

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MULPS
Packed Single-Precision Floating-Point Multiply

Syntaxe
MULPS dest,source

Description Cette instruction permet d'effectuer la multiplication de chacune des paires de valeur de l'oprande source et l'oprande de destination.

Algorithme
dest(31..0) dest(31..0) x source(31..0) dest(63..32) dest(63..32) x source(63..32) dest(95..64) dest(95..64) x source(95..64) dest(127..96) dest(127..96) x source(127..96)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la multiplication de chacune des paires de valeur de l'oprande source et l'oprande de destination.

MULPS xmm1,xmm2/m128

0Fh 59h /r

Rfrences
654

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 830 832.

655

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

MULSD
Multiply Scalar Double-Precision Floating-Point Values

Syntaxe
MULSD destination, source

Description Cette instruction permet d'effectuer la multiplication scalaire de valeurs rel de double prcision de l'oprande source et l'oprande de destination.

Algorithme
destination(0..63) destination(0..63) x source(0..63)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la multiplication scalaire de valeurs rel de double prcision de l'oprande source et l'oprande de destination.

MULSD xmm1, xmm2/m64

F2h 0Fh 59h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 833 835.
656

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

MULSS
Scalar Single-FP Multiply

Syntaxe
MULSS dest,source

Description Cette instruction permet d'effectuer la multiplication scalaire de l'oprande source et l'oprande de destination.

Algorithme
dest(31..0) dest(31..0) x source(31..0)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la multiplication scalaire de l'oprande source et l'oprande de destination.

MULSS xmm1, xmm2/m32

F3h 0Fh 59h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 836 838.
657

Assembleur 80x86
INTEL Pentium 4+

MWAIT
Monitor Wait

Syntaxe
MWAIT MWAIT EAX, ECX

Description Cette instruction permet d'indiquer au microprocesseur que l'tat de l'alimentation de la ligne de cache est en attente d'criture dans la plage d'adresse, mettant fin la plupart des activits dans le noyau en le faisant.

Mnmonique
Instruction Opcode Description Cette instruction permet d'indiquer au microprocesseur que l'tat de l'alimentation de la ligne de cache est en attente d'criture dans la plage d'adresse, mettant fin la plupart des activits dans le noyau en le faisant.

MWAIT

0Fh 01h C9h

Voir Instruction Rfrences assembleur 80x86 Instruction

galement MONITOR

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A: Instruction
658

Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 839 842.

659

Assembleur 80x86 INTEL 8088+

NEG Negation

Syntaxe
NEG registre NEG mmoire

Description Cette instruction permet d'effectuer le complment 2 d'une oprande.

Algorithme
SI DEST = 0 ALORS CF 0 SINON CF 1 FIN SI DEST - (DEST)

Mnmonique
Instruction Opcode Description Effectue une ngation de complments de 2 dans une oprande de registre ou mmoire 8 bits. Effectue une ngation de complments de 2 dans une oprande de registre ou mmoire 16 660

NEG reg/mem8

F6h /3

NEG reg/mem16

F7h /3

bits. Effectue une ngation de complments de 2 dans une oprande de registre ou mmoire 32 bits. Effectue une ngation de complments de 2 dans une oprande de registre ou mmoire 64 bits.

NEG reg/mem32

F7h /3

NEG reg/mem64

F7h /3

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable

#SS(Pile)

#GP(Protection gnral)

661

Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction

galement AND NEG OR XOR

Rfrences 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 Developers Manual Volume 2B: Instruction

662

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 10 12.

663

Assembleur 80x86 INTEL 8088+

NOP No OPeration

Syntaxe
NOP

Description Cette instruction ne fait rien. Elle est utilis lors de dboguage ou pour crer des dlais d'attente artificielle sans affectation des registres du processeurs.

Mnmonique
Instruction NOP Opcode 90h Description Efface aucune opration

Exception Aucune

Rfrences 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 177. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 13 14.

664

Assembleur 80x86 INTEL 8088+

NOT

Syntaxe
NOT registre NOT mmoire

Description Cette instruction permet d'inverser la valeur de chacun des bits d'une oprande.

Algorithme
dest ( dest)

Mnmonique
Instruction Opcode Description Complments les bits d'une oprande de registre ou mmoire 8 bits. Complments les bits d'une oprande de registre ou mmoire 16 bits. Complments les bits d'une oprande de registre ou mmoire 32 bits. Complments les bits d'une oprande de registre ou mmoire 64 bits.

NOT reg/mem8

F6h /2

NOT reg/mem16

F7h /2

NOT reg/mem32

F7h /2

NOT reg/mem64

F7h /2

665

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction

#SS(Pile noncanonique)

#GP(Protection gnral)

#PF(Faute de page)

666

#AC(Vrifie l'alignement)

Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction

galement AND NEG OR XOR

Rfrences 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 Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 15 15.

667

Assembleur 80x86
Cyrix Cx6x86/AMD Am5k86
Syntaxe OIO

OIO
Official Undefined Opcode

Description Cette instruction permet de provoquer l'excution d'un code indfinie.

Algorithme EXCEPTION #UD

Mnmonique Instruction OIO Opcode 0Fh FFh Description Cette instruction permet de provoquer l'excution d'un code indfinie.

668

Assembleur 80x86
INTEL 8088+

OR
Or bitwise

Syntaxe
OR Oprande Cible, Oprande Source

Description L'instruction OR effectue un OU BINAIRE sur les 2 oprandes spcifis, le calcul est plac dans la premire oprande, c'est--dire l'Oprande Cible. Rappelons qu'un OU BINAIRE donne le rsultat 1 si au moins une des 2 oprandes vaut 1 et donne 0 si les deux bits valent 0.

Algorithme
Oprande Cible Oprande Cible U Oprande Source drapeau CF 0 drapeau OF 0

Mnmonique
Instruction Opcode Description Effectue un Ou binaire du contenu du registre AL avec une valeur immdiate de 8 bits. Effectue un Ou binaire du contenu du registre AX avec une valeur immdiate de 16 bits.

OR AL, imm8

0Ch ib

OR AX, imm16

0Dh iw

669

OR EAX, imm32

0Dh id

Effectue un Ou binaire du contenu du registre EAX avec une valeur immdiate de 32 bits. Effectue un Ou binaire du contenu du registre RAX avec une valeur immdiate de 32 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 8 bits avec une valeur immdiate de 8 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 16 bits avec une valeur immdiate de 16 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 32 bits avec une valeur immdiate de 32 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 64 bits avec une valeur immdiate entire de 32 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 16 bits avec une valeur immdiate entire de 8 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 32 bits avec une valeur immdiate entire de 8 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 670

OR RAX, imm32

0Dh id

OR reg/mem8, imm8

80h /1 ib

OR reg/mem16, imm16

81h /1 iw

OR reg/mem32, imm32

81h /1 id

OR reg/mem64, imm32

81h /1 id

OR reg/mem16, imm8

83h /1 ib

OR reg/mem32, imm8

83h /1 ib

OR reg/mem64, imm8

83h /1 ib

64 bits avec une valeur immdiate entire de 8 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 8 bits avec le contenu d'un registre de 8 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 16 bits avec le contenu d'un registre de 16 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 32 bits avec le contenu d'un registre de 32 bits. Effectue un Ou binaire du contenu d'une oprande mmoire ou registre 64 bits avec le contenu d'un registre de 64 bits. Effectue un Ou binaire du contenu d'un registre de 8 bits avec le contenu d'une oprande mmoire ou registre 8 bits. Effectue un Ou binaire du contenu d'un registre de 16 bits avec le contenu d'une oprande mmoire ou registre 16 bits. Effectue un Ou binaire du contenu d'un registre de 32 bits avec le contenu d'une oprande mmoire ou registre 32 bits. Effectue un Ou binaire du contenu d'un registre de 64 bits avec le 671

OR reg/mem8, reg8

08h /r

OR reg/mem16, reg16

09h /r

OR reg/mem32, reg32

09h /r

OR reg/mem64, reg64

09h /r

OR reg8, reg/mem8

0Ah /r

OR reg16, reg/mem16

0Bh /r

OR reg32, reg/mem32

0Bh /r

OR reg64, reg/mem64

0Bh /r

contenu d'une oprande mmoire ou registre 64 bits.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de

#SS(Pile)

#GP(Protection gnral)

#PF(Faute de page)

672

page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#AC(Vrifie l'alignement)

Exemple Cet exemple permet de vrifier si AX vaut 0. Cette technique de programmation l'apparence un peu trange, est pourtant trs commune chez les professionnels de l'assembleur, car il consomme moins d'octets en mmoire, que l'utilisation de l'instruction CMP AX,0 :
1. OR AX,AX 2. JE @axvautzero 3. ; AX ne vaut pas 0 4. ; ... 5. @axvautzero 6. ; AX vaut 0 7. ; ...

Voir Instruction Instruction Instruction Instruction assembleur assembleur assembleur assembleur 80x86 80x86 80x86 80x86 Instruction Instruction Instruction Instruction

galement AND NEG NOT XOR

Rfrences
673

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 179. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 16 19.

674

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

ORPD
Bitwise Logical OR of Double-Precision FloatingPoint Values

Syntaxe
ORPD destination, source

Description Cette instruction permet d'effectuer un OU BINAIRE de 128 bits sur les 2 oprandes rels de double prcisions spcifis.

Algorithme
destination(0..127) destination(0..127) U source(0..127)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer un OU BINAIRE de 128 bits sur les 2 oprandes rels de double prcisions spcifis.

ORPD xmm1, xmm2/m128

66h 0Fh 56h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 20 21.

675

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

ORPS
Bitwise Logical OR of Double-Precision FloatingPoint Values

Syntaxe
ORPS dest,source

Description Cette instruction permet d'effectuer un OU BINAIRE de 128 bits sur les 2 oprandes spcifis.

Algorithme
dest(127..0) dest(127..0) U source(127..0)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer un OU BINAIRE de 128 bits sur les 2 oprandes spcifis.

ORPS xmm1,xmm2/m128

0Fh 56h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 22 23.

676

Assembleur 80x86 INTEL 8088+

OUT Output

Syntaxe
OUT adresse,accumulateur

Paramtres
Nom Description Ce paramtre permet d'indiquer l'adresse du port d'entre/sortie. Il peut s'agir d'une valeur entre 0 et FFFFh. Voir Rfrence des ports d'entre/sortie 80x86 pour plus de dtails. Ce paramtre permet d'indiquer la valeur envoyer dans le port d'entre/sortie. Il peut s'agir d'un des 3 registres AL, AX ou EAX. Mme avec les microprocesseurs 64 bits, il n'est pas possible d'envoyer une valeur plus grande que 32 bits.

adresse

accumulateur

Description Cette instruction permet d'envoyer un octet, un mot ou un double mot sur le port d'entre/sortie.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON Port(adresse) accumulateur 677

FIN SI SINON Port(adresse) accumulateur FIN SI

Mnmonique
Instruction Opcode Description Met un octet contenu dans le registre AL dans le port spcifi par la valeur immdiate de 8 bits. Met un mot contenu dans le registre AX dans le port spcifi par la valeur immdiate de 8 bits. Met un double mot contenu dans le registre EAX dans le port spcifi par la valeur immdiate de 8 bits. Met un octet contenu dans le registre AL dans le port spcifi par le registre DX. Met un mot contenu dans le registre AX dans le port spcifi par le registre DX. Met un double mot contenu dans le registre EAX dans le port spcifi par le registre DX.

OUT imm8, AL

E6h ib

OUT imm8, AX

E7h ib

OUT imm8, EAX

E7h ib

OUT DX, AL

EEh

OUT DX, AX

EFh

OUT DX, EAX

EFh

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description

678

#GP(Protection gnral)

Un ou plusieurs bits de permission d'entre/sortie sont fixer par le TSS pour un accs au port. Le CPL est plus grand que le IOPL et une ou plusieurs bits de permission sont fixer par le TSS pour un accs au port. Une faute de page rsultat de l'excution de l'instruction

#PF(Faute de page)

Exemple Cette exemple permet d'effectuer une commande de fin d'interruption (Port 0020h):
MOV AL,20h OUT 20h,AL

Voir Rfrence Instruction Instruction Instruction des assembleur assembleur assembleur ports 80x86 80x86 80x86 d'entre/sortie Instruction Instruction Instruction

galement 80x86 IN INS OUTS

Rfrences

679

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 824 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 181. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 24 26.

680

Assembleur 80x86 INTEL 80286+

OUTS Output String

Syntaxe
OUTS oprandesource

Description Cette instruction permet d'envoyer un octet, un mot ou un double mot contenu dans l'adresse DS:[SI] du port d'entre/sortie et incrmente/dcrmente le registre SI en fonction de la taille de l'oprande cible et de l'tat du drapeau de direction.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON Port(adresse) accumulateur FIN SI SINON Port(adresse) accumulateur FIN SI SI (taille de l'oprande_cible = octet) ALORS SI DF = 0 ALORS (E)DI (E)DI + 1 SINON (E)DI (E)DI - 1 FIN SI SINON SI (taille de l'oprande_cible = mot) ALORS SI DF = 0 ALORS (E)DI (E)DI + 2 SINON (E)DI (E)DI - 2

681

FIN SI SINON SI DF = 0 ALORS (E)DI (E)DI + 4 SINON (E)DI (E)DI - 4 FIN SI FIN SI

Mnmonique
Instruction Opcode Description Envoi un octet de l'adresse DS:(R)SI au port spcifi par DX et ensuite, incrmente ou dcrmente le registre (R)SI. Envoi un mot de l'adresse DS:(R)SI au port spcifi par DX et ensuite, incrmente ou dcrmente le registre (R)SI. Envoi un double mot de l'adresse DS:(R)SI au port spcifi par DX et ensuite, incrmente ou dcrmente le registre (R)SI.

OUTS DX, mem8

6Eh

OUTS DX, mem16

6Fh

OUTS DX, mem32

6Fh

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de

#SS(Pile)

682

pile ou n'est pas canonique #GP(Slecteur) X X X Un registre de segment est charg, mais le descripteur de segment dpasse la limite de la table du descripteur. Un segment de donnes nulle est utilis comme rfrence mmoire Un ou plusieurs bits de permission d'entre/sortie sont fixer par le TSS pour un accs au port. Le CPL est plus grand que le IOPL et une ou plusieurs bits de permission sont fixer par le TSS pour un accs au port. Une faute de page rsultat de l'excution

#PF(Faute de page)

683

de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#AC(Vrifie l'alignement)

Voir Rfrence Instruction Instruction Instruction des assembleur assembleur assembleur ports 80x86 80x86 80x86 d'entre/sortie Instruction Instruction Instruction

galement 80x86 OUT IN INS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 824 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 182. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 27 31.

684

Assembleur 80x86 INTEL 80286+

OUTSB Output String Byte

Syntaxe
OUTSB

Description Cette instruction permet d'envoyer un octet contenu dans l'adresse DS:[SI] du port d'entre/sortie et incrmente/dcrmente le registre SI de 1 en fonction de l'tat du drapeau de direction.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON Port(adresse) accumulateur FIN SI SINON Port(adresse) accumulateur FIN SI SI DF = 0 ALORS (E)DI (E)DI + 1 SINON (E)DI (E)DI - 1 FIN SI

Mnmonique
Instruction Opcode Description

685

OUTSB

6Eh

Envoi un octet de l'adresse DS:(R)SI au port spcifi par DX et ensuite, incrmente ou dcrmente le registre (R)SI.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Un registre de segment est charg, mais le descripteur de segment dpasse la limite de la table du descripteur. Un segment de donnes nulle est utilis comme rfrence mmoire Un ou plusieurs bits de permission d'entre/sortie sont fixer par 686

#SS(Pile)

#GP(Slecteur)

le TSS pour un accs au port. Le CPL est plus grand que le IOPL et une ou plusieurs bits de permission sont fixer par le TSS pour un accs au port. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Rfrence Instruction Instruction Instruction des assembleur assembleur assembleur ports 80x86 80x86 80x86 d'entre/sortie Instruction Instruction Instruction

galement 80x86 OUT IN INS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 825 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 182.
687

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 27 31.

688

Assembleur 80x86 INTEL 80386+

OUTSD Output String Double word

Syntaxe
OUTSD

Description Cette instruction permet d'envoyer un double mot contenu dans l'adresse DS:[SI] du port d'entre/sortie et incrmente/dcrmente le registre SI de 4 en fonction de l'tat du drapeau de direction.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON Port(adresse) accumulateur FIN SI SINON Port(adresse) accumulateur FIN SI SI DF = 0 ALORS (E)DI (E)DI + 4 SINON (E)DI (E)DI - 4 FIN SI

Mnmonique
Instruction Opcode Description

689

OUTSD

6Fh

Envoi un double mot de l'adresse DS:(R)SI au port spcifi par DX et ensuite, incrmente ou dcrmente le registre (R)SI.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Un registre de segment est charg, mais le descripteur de segment dpasse la limite de la table du descripteur. Un segment de donnes nulle est utilis comme rfrence mmoire Un ou plusieurs bits de permission d'entre/sortie sont fixer par 690

#SS(Pile)

#GP(Slecteur)

le TSS pour un accs au port. Le CPL est plus grand que le IOPL et une ou plusieurs bits de permission sont fixer par le TSS pour un accs au port. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Rfrence Instruction Instruction Instruction des assembleur assembleur assembleur ports 80x86 80x86 80x86 d'entre/sortie Instruction Instruction Instruction

galement 80x86 OUT IN INS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 825 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 182.
691

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 27 31.

692

Assembleur 80x86 INTEL 80286+

OUTSW Output String Word

Syntaxe
OUTSW

Description Cette instruction permet d'envoyer un mot contenu dans l'adresse DS:[SI] du port d'entre/sortie et incrmente/dcrmente le registre SI de 2 en fonction de l'tat du drapeau de direction.

Algorithme
SI ((PE = 1) ET ((CPL > IOPL) ET (VM = 1))) ALORS * Mode protg avec CPL > IOPL ou mode virtual 8086 SI (n'importe quel permission de bit d'E/S pour un port d'E/S un accs = 1) ALORS EXCEPTION #GP(0) SINON Port(adresse) accumulateur FIN SI SINON Port(adresse) accumulateur FIN SI SI DF = 0 ALORS (E)DI (E)DI + 2 SINON (E)DI (E)DI - 2 FIN SI

Mnmonique
Instruction Opcode Description

693

OUTSW

6Fh

Envoi un mot de l'adresse DS:(R)SI au port spcifi par DX et ensuite, incrmente ou dcrmente le registre (R)SI.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Un registre de segment est charg, mais le descripteur de segment dpasse la limite de la table du descripteur. Un segment de donnes nulle est utilis comme rfrence mmoire Un ou plusieurs bits de permission d'entre/sortie sont fixer par 694

#SS(Pile)

#GP(Slecteur)

le TSS pour un accs au port. Le CPL est plus grand que le IOPL et une ou plusieurs bits de permission sont fixer par le TSS pour un accs au port. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Rfrence Instruction Instruction Instruction des assembleur assembleur assembleur ports 80x86 80x86 80x86 d'entre/sortie Instruction Instruction Instruction

galement 80x86 OUT IN INS

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 825 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 182.
695

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 27 31.

696

Assembleur 80x86
SSSE3+

PABSB
Packed Absolute Byte

Syntaxe
PABSB dest,source

Description Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des octets d'un oprande source et entrepose le rsultat dans un oprande destination.

Algorithme
SI taille de l'oprande = 64 bits ALORS dest(7..0) | source(7..0) | dest(15..8) | source(15..8) | dest(23..16) | source(23..16) | dest(31..24) | source(31..24) | dest(39..32) | source(39..32) | dest(47..40) | source(47..40) | dest(55..48) | source(55..48) | dest(63..56) | source(63..56) | SINON dest(7..0) | source(7..0) | dest(15..8) | source(15..8) | dest(23..16) | source(23..16) | dest(31..24) | source(31..24) | dest(39..32) | source(39..32) | dest(47..40) | source(47..40) | dest(55..48) | source(55..48) | dest(63..56) | source(63..56) | dest(71..64) | source(71..64) | dest(79..72) | source(79..72) | dest(87..80) | source(87..80) | 697

dest(95..88) | source(95..88) | dest(103..96) | source(103..96) | dest(111..104) | source(111..104) | dest(119..112) | source(119..112) | dest(127..120) | source(127..120) | FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des octets d'un oprande source et entrepose le rsultat dans un oprande destination. Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des octets d'un oprande source et entrepose le rsultat dans un oprande destination.

PABSB mm1,mm2/m64

0Fh 38h 1Ch /r

PABSB xmm1,xmm2/m128

66h 0Fh 38h 1Ch /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 33 36.

698

Assembleur 80x86
SSSE3+

PABSD
Packed Absolute Doubleword

Syntaxe
PABSD dest,source

Description Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des doubles mots d'un oprande source et entrepose le rsultat dans un oprande destination.

Algorithme
SI taille de l'oprande = 64 bits ALORS dest(31..0) | source(31.0) | dest(63..32) | source(63..32) | SINON dest(31..0) | source(31..0) | dest(63..32) | source(63..32) | dest(95..64) | source(95..64) | dest(127..96) | source(127..96) | FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des doubles mots d'un oprande source et entrepose le rsultat dans un oprande

PABSD mm1,mm2/m64

0Fh 38h 1Eh /r

699

destination. Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des doubles mots d'un oprande source et entrepose le rsultat dans un oprande destination.

PABSD xmm1,xmm2/m128

66h 0Fh 38h 1Eh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 33 36.

700

Assembleur 80x86
SSSE3+

PABSW
Packed Absolute Word

Syntaxe
PABSW dest,source

Description Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des mots d'un oprande source et entrepose le rsultat dans un oprande destination.

Algorithme
SI taille de l'oprande = 64 bits ALORS dest(15..0) | source(15..0) | dest(31..16) | source(31..16) | dest(47..32) | source(47..32) | dest(63..48) | source(63..48) | SINON dest(15..0) | source(15..0) | dest(31..16) | source(31..16) | dest(47..32) | source(47..32) | dest(63..48) | source(63..48) | dest(79..64) | source(79..64) | dest(95..80) | source(95..80) | dest(111..96) | source(111..96) | dest(127..112) | source(127..112) | FIN SI

Mnmonique

701

Instruction

Opcode

Description Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des mots d'un oprande source et entrepose le rsultat dans un oprande destination. Cette instruction permet d'effectuer le calcul de la valeur absolue de chacun des mots d'un oprande source et entrepose le rsultat dans un oprande destination.

PABSW mm1,mm2/m64

0F 38 1D /r

PABSW xmm1,xmm2/m128

66 0F 38 1D /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 33 36.

702

Assembleur 80x86
INTEL Pentium Pro+

PACKSSDW
Pack with Signed Saturation dword to word

Syntaxe
PACKSSDW dest,source

Description Cette instruction permet de compact 8 paquets de double mots en mots.

Algorithme
dest(7..0) SaturateSignedWordToSignedByte dest(15..0) dest(15..8) SaturateSignedWordToSignedByte dest(31..16) dest(23..16) SaturateSignedWordToSignedByte dest(47..32) dest(31..24) SaturateSignedWordToSignedByte dest(63..48) dest(39..32) SaturateSignedWordToSignedByte source(15..0) dest(47..40) SaturateSignedWordToSignedByte source(31..16) dest(55..48) SaturateSignedWordToSignedByte source(47..32) dest(63..56) SaturateSignedWordToSignedByte source(63..48)

Mnmonique
Instruction Opcode Description Cette instruction permet de compact 8 paquets de double mots en mots. Cette instruction permet de compact 8 paquets de double mots

PACKSSDW mm1,mm2/m64

0Fh 6Bh /r

PACKSSDW xmm1, xmm2/m128 66h 0Fh 6Bh /r

703

en mots.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 37 41.

704

Assembleur 80x86
INTEL Pentium Pro+

PACKSSWB
Pack with Signed Saturation word to Byte

Syntaxe
PACKSSWB dest,source

Description Cette instruction permet de compact 8 paquets d'entier en octets.

Algorithme
dest(7..0) SaturateSignedWordToSignedByte dest(15..0) dest(15..8) SaturateSignedWordToSignedByte dest(31..16) dest(23..16) SaturateSignedWordToSignedByte dest(47..32) dest(31..24) SaturateSignedWordToSignedByte dest(63..48) dest(39..32) SaturateSignedWordToSignedByte source(15..0) dest(47..40) SaturateSignedWordToSignedByte source(31..16) dest(55..48) SaturateSignedWordToSignedByte source(47..32) dest(63..56) SaturateSignedWordToSignedByte source(63..48)

Mnmonique
Instruction Opcode Description Cette instruction permet de compact 8 paquets d'entier en octets. Cette instruction permet de compact 8 paquets d'entier en

PACKSSWB mm1, mm2/m64

0Fh 63h /r

PACKSSWB xmm1, xmm2/m128 66h 0Fh 63h /r

705

octets.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 37 41.

706

Assembleur 80x86
SSSE3+

PACKUSDW
Pack with Unsigned Saturation

Syntaxe
PACKUSDW dest,source

Description Cette instruction permet de compact 8 paquets de double mots naturel en mots naturel.

Algorithme
SI dest(31..0) < 0 ALORS TMP(15..0) 0 SINON TMP(15..0) dest(15..0) FIN SI SI dest(31..0) > FFFFh ALORS dest(15..0) FFFFh SINON dest(15..0) TMP(15..0) FIN SI SI dest(63..32) < 0 ALORS TMP(31..16) 0 SINON TMP(31..16) dest(47..32) FIN SI SI dest(63..32) > FFFFh ALORS dest(31..16) FFFFh SINON dest(31..16) TMP(31..16) FIN SI SI dest(95..64) < 0 ALORS

707

TMP(47..32) 0 SINON TMP(47..32) dest(79..64) FIN SI SI dest(95..64) > FFFFh ALORS dest(47..32) FFFFh SINON dest(47..32) TMP(47..32) FIN SI SI dest(127..96) < 0 ALORS TMP(63..48) 0 SINON dest(111..96) FIN SI SI dest(127..96) > FFFFh ALORS dest(63..48) FFFFh SINON dest(63..48) TMP(63..48) FIN SI SI dest(127..96) < 0 ALORS TMP(63..48) 0 SINON dest(111..96) FIN SI SI dest(127..96) > FFFFh ALORS dest(63..48) FFFFh SINON dest(63..48) TMP(63..48) FIN SI SI source(31..0) < 0 ALORS TMP(79..64) 0 SINON TMP(79..64) source(15..0) FIN SI SI source(31..0) > FFFFh ALORS dest(63..48) FFFFH SINON dest(63..48) TMP(79..64) FIN SI SI source(63..32) < 0 ALORS TMP(95..80) 0 708

SINON source(47..32) FIN SI SI source(63..32) > FFFFh ALORS dest(95..80) FFFFh SINON dest(95..80) TMP(95..80) FIN SI SI source(95..64) < 0 ALORS TMP(111..96) 0 SINON TMP(111..96) source(79..64) FIN SI SI source(95..64) > FFFFh ALORS dest(111..96) FFFFh SINON dest(111..96) TMP(111..96) FIN SI SI source(127..96) < 0 ALORS TMP(127..112) 0 SINON TMP(127..112) source(111..96) FIN SI SI source(127..96) > FFFFh ALORS dest(128..112) FFFFh SINON dest(128..112) TMP(127..112) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de compact 8 paquets de double mots naturel en mots naturel.

PACKUSDW xmm1,xmm2/m128 66h 0Fh 38h 2Bh /r

Rfrences
709

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 42 44.

710

Assembleur 80x86
INTEL Pentium Pro+

PACKUSWB
Pack with Unsigned Saturation

Syntaxe
PACKUSWB dest,source

Description Cette instruction permet de compact 8 paquets de mots en octets.

Algorithme
dest(7..0) SaturateSignedWordToUnsignedByte dest(15..0) dest(15..8) SaturateSignedWordToUnsignedByte dest(31..16) dest(23..16) SaturateSignedWordToUnsignedByte dest(47..32) dest(31..24) SaturateSignedWordToUnsignedByte dest(63..48) dest(39..32) SaturateSignedWordToUnsignedByte source(15..0) dest(47..40) SaturateSignedWordToUnsignedByte source(31..16) dest(55..48) SaturateSignedWordToUnsignedByte source(47..32) dest(63..56) SaturateSignedWordToUnsignedByte source(63..48)

Mnmonique
Instruction Opcode Description Cette instruction permet de compact 8 paquets de mots en octets. Cette instruction permet de compact 8 paquets de mots en

PACKUSWB mm, mm/m64

0Fh 67h /r

PACKUSWB xmm1, xmm2/m128 66h 0Fh 67h /r

711

octets.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 45 48.

712

Assembleur 80x86
INTEL Pentium Pro+

PADDB
Packed Add Bytes

Syntaxe
PADDB dest,source

Description Cette instruction permet d'effectuer une addition scalaire sur un paquet de 8 octets.

Algorithme
dest(7..0) dest(7..0) + source(7..0) dest(15..8) dest(15..8) + source(15..8) dest(23..16) dest(23..16) + source(23..16) dest(31..24) dest(31..24) + source(31..24) dest(39..32) dest(39..32) + source(39..32) dest(47..40) dest(47..40) + source(47..40) dest(55..48) dest(55..48) + source(55..48) dest(63..56) dest(63..56) + source(63..56)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une addition scalaire sur un paquet de 8 octets. Cette instruction permet d'effectuer une addition scalaire sur un paquet

PADDB mm, mm/m64

0Fh FCh /r

PADDB xmm1,xmm2/m128

66h 0Fh FCh /r

713

de 8 octets.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 49 52.

714

Assembleur 80x86
INTEL Pentium Pro+

PADDD
Packed Add Dwords

Syntaxe
PADDD dest,source

Description Cette instruction permet d'effectuer une addition scalaire sur un paquet de 2 double mots.

Algorithme
dest(31..0) dest(31..0) + source(31..0) dest(63..32) dest(63..32) + source(63..32)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une addition scalaire sur un paquet de 2 double mots. Cette instruction permet d'effectuer une addition scalaire sur un paquet de 2 double mots.

PADDD mm, mm/m64

0Fh FEh /r

PADDD xmm1, xmm2/m128

66h 0Fh FEh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
715

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 49 52.

716

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PADDQ
Add Packed Quadword Integers

Syntaxe
PADDQ destination, source

Description Cette instruction permet d'effectuer une addition scalaire sur un paquet de quadruple mots.

Algorithme
SI taille de l'oprande = 64 bits ALORS Destination(0..63) Destination(0..63) + Source(0..63) SINON Destination(0..63) Destination(0..63) + Source(0..63) Destination(64..127) Destination(64..127) + Source(64..127) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une addition scalaire sur un paquet de quadruple mots. Cette instruction permet d'effectuer une addition scalaire sur un paquet

PADDQ mm1,mm2/m64

0Fh D4h /r

PADDQ xmm1,xmm2/m128

66h 0Fh D4h /r

717

de quadruple mots.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 53 55.

718

Assembleur 80x86
INTEL Pentium Pro+

PADDSB
Packed Add with Saturation Bytes

Syntaxe
PADDSB dest,source

Description Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 8 octets signs.

Algorithme
dest(7..0) SaturateToSignedByte(dest(7..0) + source(7..0)) dest(15..8) SaturateToSignedByte(dest(15..8) + source(15..8)) dest(23..16) SaturateToSignedByte(dest(23..16) + source(23..16)) dest(31..24) SaturateToSignedByte(dest(31..24) + source(31..24)) dest(39..32) SaturateToSignedByte(dest(39..32) + source(39..32)) dest(47..40) SaturateToSignedByte(dest(47..40) + source(47..40)) dest(55..48) SaturateToSignedByte(dest(55..48) + source(55..48)) dest(63..56) SaturateToSignedByte(dest(63..56) + source(63..56))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 8 octets signs. Cette instruction permet d'effectuer

PADDSB mm, mm/m64

0Fh ECh /r

PADDSB xmm1,xmm2/m128

66h 0Fh ECh /r

719

une addition scalaire avec saturation sur un paquet de 8 octets signs.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 56 58.

720

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PADDSIW destination, source

PADDSIW
Packed Add with Saturation

Description Cette instruction permet d'effectuer l'addition du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit le rsultat dans le registre MMX.

Algorithme destination(15..0) SaturateToSignedWord(destination(15..0) + source(15..0) destination(31..16) SaturateToSignedWord(destination(31..16) + source(31..16) destination(47..32) SaturateToSignedWord(destination(47..32) + source(47..32) destination(63..48) SaturateToSignedWord(destination(63..48) + source(63..48)

Mnmonique Instruction PADDSIW mm,mm/m64 Opcode 0Fh 51h PostByte Description Cette instruction permet d'effectuer l'addition du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit le rsultat dans le registre MMX.

721

Assembleur 80x86
INTEL Pentium Pro+

PADDSW
Packed Add with Saturation Words

Syntaxe
PADDSW dest,source

Description Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 4 entiers.

Algorithme
dest(15..0) SaturateToSignedWord(dest(15..0) + source(15..0)) dest(31..16) SaturateToSignedWord(dest(31..16) + source(31..16)) dest(47..32) SaturateToSignedWord(dest(47..32) + source(47..32)) dest(63..48) SaturateToSignedWord(dest(63..48) + source(63..48))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 4 entiers. Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 4 entiers.

PADDSW mm, mm/m64

0Fh EDh /r

PADDSW xmm1, xmm2/m128

66h 0Fh EDh /r

722

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 56 58.

723

Assembleur 80x86
INTEL Pentium Pro+

PADDUSB
Packed Add Unsigned with Saturation Bytes

Syntaxe
PADDUSB dest,source

Description Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 8 octets.

Algorithme
dest(7..0) SaturateToUnsignedByte(dest(7..0) + source(7..0)) dest(15..8) SaturateToUnsignedByte(dest(15..8) + source(15..8)) dest(23..16) SaturateToUnsignedByte(dest(23..16) + source(23..16)) dest(31..24) SaturateToUnsignedByte(dest(31..24) + source(31..24)) dest(39..32) SaturateToUnsignedByte(dest(39..32) + source(39..32)) dest(47..40) SaturateToUnsignedByte(dest(47..40) + source(47..40)) dest(55..48) SaturateToUnsignedByte(dest(55..48) + source(55..48)) dest(63..56) SaturateToUnsignedByte(dest(63..56) + source(63..56))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 8 octets. Cette instruction permet d'effectuer

PADDUSB mm, mm/m64

0Fh DCh /r

PADDUSB xmm1, xmm2/m128

66h 0Fh DCh /r

724

une addition scalaire avec saturation sur un paquet de 8 octets.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 59 63.

725

Assembleur 80x86
INTEL Pentium Pro+

PADDUSW
Packed Add Unsigned with Saturation Words

Syntaxe
PADDUSW dest,source

Description Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 4 mots.

Algorithme
dest(15..0) SaturateToUnsignedWord(dest(15..0) + source(15..0)) dest(31..16) SaturateToUnsignedWord(dest(31..16) + source(31..16)) dest(47..32) SaturateToUnsignedWord(dest(47..32) + source(47..32)) dest(63..48) SaturateToUnsignedWord(dest(63..48) + source(63..48))

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 4 mots. Cette instruction permet d'effectuer une addition scalaire avec saturation sur un paquet de 4 mots.

PADDUSW mm, mm/m64

0Fh DDh /r

PADDUSW xmm1, xmm2/m128 66h 0Fh DDh /r

726

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 59 63.

727

Assembleur 80x86
INTEL Pentium Pro+

PADDW
Packed Add Words

Syntaxe
PADDW dest,source

Description Cette instruction permet d'effectuer une addition scalaire sur un paquet de 4 mots.

Algorithme
dest(15..0) dest(15..0) + source(15..0) dest(31..16) dest(31..16) + source(31..16) dest(47..32) dest(47..32) + source(47..32) dest(63..48) dest(63..48) + source(63..48)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une addition scalaire sur un paquet de 4 mots. Cette instruction permet d'effectuer une addition scalaire sur un paquet de 4 mots.

PADDW mm, mm/m64

0Fh FDh /r

PADDW xmm1, xmm2/m128

66h 0Fh FDh /r

Rfrences
728

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 49 52.

729

Assembleur 80x86
SSSE3+

PALIGNR
Packed Align Right

Syntaxe
PALIGNR dest,source,immediat

Description Cette instruction permet d'effectuer la concatnation de l'oprande de destination et de l'oprande source et effectue un dcalage d'une constante immdiate de la composante de granulit d'octets, et enfin extrait le rsultat align dans l'oprande de destination.

Algorithme
SI taille de l'oprande = 64 bits ALORS temp1(127..0) CONCATENATE(dest,source) >> (immediat x 8) dest(63..0) temp1(63..0) FIN SI SI taille de l'oprande = 128 bits ALORS temp1(255..0) CONCATENATE(dest,source)>>(immediat x 8) dest(127..0) temp1(127..0) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la concatnation de l'oprande de destination et de l'oprande source et effectue un dcalage d'une constante

PALIGNR mm1,mm2/m64, imm8

0Fh 3Ah 0Fh

730

immdiate de la composante de granulit d'octets, et enfin extrait le rsultat align dans l'oprande de destination. Cette instruction permet d'effectuer la concatnation de l'oprande de destination et de l'oprande source et effectue un dcalage d'une constante immdiate de la composante de granulit d'octets, et enfin extrait le rsultat align dans l'oprande de destination.

PALIGNR xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 0Fh

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 63 65.

731

Assembleur 80x86
INTEL Pentium MMX+

PAND
Bitwise Logical AND

Syntaxe
PAND destination, source

Description Cette instruction permet d'effectuer un ET BINAIRE d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM.

Algorithme
destination destination source

Mnmonique
Instruction PAND mm, mm/m64 Opcode 0Fh DBh /r Description Cette instruction permet d'effectuer un ET BINAIRE d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM. Cette instruction permet d'effectuer un ET BINAIRE d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM.

PAND xmm1, xmm2/m128

66h 0Fh DBh /r

732

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 67 69.

733

Assembleur 80x86
INTEL Pentium Pro+

PANDN
Bitwise Logical And Not

Syntaxe
PANDN destination,source

Description Cette instruction permet d'effectuer un ET BINAIRE et une NEGATION de chacun des bits d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM.

Algorithme
destination ( destination) source

Mnmonique
Instruction PANDN mm, mm/m64 Opcode 0Fh DFh /r Description Cette instruction permet d'effectuer un ET BINAIRE et une NEGATION de chacun des bits d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM. Cette instruction permet d'effectuer un ET BINAIRE et une NEGATION de chacun des bits d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des

PANDN xmm1, xmm2/m128

66h 0Fh DFh /r

734

registres XMM.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 70 72.

735

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PAUSE
Pause

Syntaxe
PAUSE

Description Cette instruction permet d'amliorer les performances des boucles de SPIN, en fournissant une indication pour le microprocesseur que le code courant est dans une boucle en SPIN.

Mnmonique
Instruction Opcode Description Fournit un dlai de performance l'excution.

PAUSE

F3h 90h

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 73 74.

736

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PAVEB destination, source

PAVEB
Packed Average Bits

Description Cette instruction permet d'effectuer le calcul de la moyenne des paquets spcifis.

Algorithme destination(7..0) (destination(7..0) + source(7..0)) >> 1 destination(15..8) (destination(15..8) + source(15..8)) >> 1 destination(23..16) (destination(23..16) + source(23..16)) >> 1 destination(31..24) (destination(31..24) + source(31..24)) >> 1 destination(39..32) (destination(39..32) + source(39..32)) >> 1 destination(47..40) (destination(47..40) + source(47..40)) >> 1 destination(55..48) (destination(55..48) + source(55..48)) >> 1 destination(63..56) (destination(63..56) + source(63..56)) >> 1

Mnmonique Instruction PAVEB mm,mm/m64 Opcode 0Fh 50h PostByte Description Cette instruction permet d'effectuer le calcul de la moyenne des paquets spcifis.

737

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PAVGB
Packed Average Byte

Syntaxe
PAVGB destination, source

Description Cette instruction permet d'effectuer le calcul de la moyenne des paquets d'octets spcifis.

Algorithme
SI taille de l'oprande = 64 bits ALORS source(0..7) (source(0..7) + destination(0..7) + 1) >> 1 source(8..15) (source(8..15) + destination(8..15) + 1) >> 1 source(16..23) (source(16..23) + destination(16..23) + 1) >> 1 source(24..31) (source(24..31) + destination(24..31) + 1) >> 1 source(32..39) (source(32..39) + destination(32..39) + 1) >> 1 source(40..47) (source(40..47) + destination(40..47) + 1) >> 1 source(48..55) (source(48..55) + destination(48..55) + 1) >> 1 source(56..63) (source(56..63) + destination(56..63) + 1) >> 1 SINON source(0..7) (source(0..7) + destination(0..7) + 1) >> 1 source(8..15) (source(8..15) + destination(8..15) + 1) >> 1 source(16..23) (source(16..23) + destination(16..23) + 1) >> 1 source(24..31) (source(24..31) + destination(24..31) + 1) >> 1 source(32..39) (source(32..39) + destination(32..39) + 1) >> 1 source(40..47) (source(40..47) + destination(40..47) + 1) >> 1 source(48..55) (source(48..55) + destination(48..55) + 1) >> 1 source(56..63) (source(56..63) + destination(56..63) + 1) >> 1 source(64..71) (source(64..71) + destination(64..71) + 1) >> 1 source(72..79) (source(72..79) + destination(72..79) + 1) >> 1 source(80..87) (source(80..87) + destination(80..87) + 1) >> 1

738

source(88..95) (source(88..95) + destination(88..95) + 1) >> 1 source(96..103) (source(96..103) + destination(96..103) + 1) >> 1 source(104..111) (source(104..111) + destination(104..111) + 1) >> 1 source(112..119) (source(112..119) + destination(112..119) + 1) >> 1 source(120..127) (source(120..127) + destination(120..127) + 1) >> 1 FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer le calcul de la moyenne des paquets d'octets spcifis. Cette instruction permet d'effectuer le calcul de la moyenne des paquets d'octets spcifis.

PAVGB mm1, mm2/m64

0Fh E0h /r

PAVGB xmm1, xmm2/m128

66h 0Fh E0h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 75 77.

739

Assembleur 80x86
AMD 3DNow!
Syntaxe PAVGUSB dest,source

PAVGUSB
Avarage of Unsigned packed 8

Description Cette instruction permet d'effectuer le calcul de la moyenne de paquets de 8 octets spcifis.

Algorithme dest(7..0) (dest(7..0) + source(7..0)) / 2 dest(15..8) (dest(15..8) + source(15..8)) / 2 dest(23..16) (dest(23..16) + source(23..16)) / 2 dest(31..24) (dest(31..24) + source(31..24)) / 2 dest(39..32) (dest(39..32) + source(39..32)) / 2 dest(47..40) (dest(47..40) + source(47..40)) / 2 dest(55..48) (dest(55..48) + source(55..48)) / 2 dest(63..56) (dest(63..56) + source(63..56)) / 2

Mnmonique Instruction Opcode Description

PAVGUSB mm,mm/m64

Cette instruction permet d'effectuer le calcul de la 0Fh 0Fh BFh Postbyte moyenne de paquets de 8 octets spcifis.

740

Assembleur 80x86
Intel Pentium III (SSE)+

PAVGW
Packed Average Word

Syntaxe
PAVGW destination, source

Description Cette instruction permet d'effectuer le calcul de la moyenne des paquets des mots spcifis.

Algorithme
SI taille de l'oprande = 64 bits ALORS source(0..15) (source(0..15) + destination(0..15) + 1) >> 1 source(16..31) (source(16..31) + destination(16..31) + 1) >> 1 source(32..47) (source(32..47) + destination(32..47) + 1) >> 1 source(48..63) (source(48..63) + destination(48..63) + 1) >> 1 SINON source(0..15) (source(0..15) + destination(0..15) + 1) >> 1 source(16..31) (source(16..31) + destination(16..31) + 1) >> 1 source(32..47) (source(32..47) + destination(32..47) + 1) >> 1 source(48..63) (source(48..63) + destination(48..63) + 1) >> 1 source(64..79) (source(64..79) + destination(64..79) + 1) >> 1 source(80..95) (source(80..95) + destination(80..95) + 1) >> 1 source(96..111) (source(96..111) + destination(96..111) + 1) >> 1 source(112..127) (source(112..127) + destination(112..127) + 1) >> 1 FIN SI

Mnmonique

741

Instruction

Opcode

Description Cette instruction permet d'effectuer le calcul de la moyenne des paquets des mots spcifis. Cette instruction permet d'effectuer le calcul de la moyenne des paquets des mots spcifis.

PAVGW mm1, mm2/m64

0Fh E3h /r

PAVGW xmm1, xmm2/m128

66h 0Fh E3h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 75 77.

742

Assembleur 80x86
SSE4.1+

PBLENDVB
Variable Blend Packed Bytes

Syntaxe
PBLENDVB dest,source,masque

Description Cette instruction permet d'effectuer une copie conditionnel d'un lment d'octets d'un oprande source vers un oprande de destination en fonction des bits de masque dfinit dans un troisime oprande.

Algorithme
SI masque(7) = 1 ALORS dest(7..0) source(7..0) SINON dest(7..0) dest(7..0) FIN SI SI masque(15) = 1 ALORS dest(15..8) source(15..8) SINON dest(15..8) dest(15..8) FIN SI SI masque(23) = 1 ALORS dest(23..16) source(23..16) SINON dest(23..16) dest(23..16) FIN SI SI masque(31) = 1 ALORS dest(31..24) source(31..24) SINON dest(31..24) dest(31..24) FIN SI 743

SI masque(39) = 1 ALORS dest(39..32) source(39..32) SINON dest(39..32) dest(39..32) FIN SI SI masque(47) = 1 ALORS dest(47..40) source(47..40) SINON dest(47..40) dest(47..40) FIN SI SI masque(55) = 1 ALORS dest(55..48) source(55..48) SINON dest(55..48) dest(55..48) FIN SI SI masque(63) = 1 ALORS dest(63..56) source(63..56) SINON dest(63..56) dest(63..56) FIN SI SI masque(71) = 1 ALORS dest(71..64) source(71..64) SINON dest(71..64) dest(71..64) FIN SI SI masque(79) = 1 ALORS dest(79..72) source(79..72) SINON dest(79..72) dest(79..72) FIN SI SI masque(87) = 1 ALORS dest(87..80) source(87..80) SINON dest(87..80) dest(87..80) FIN SI SI masque(95) = 1 ALORS dest(95..88) source(95..88) SINON dest(95..88) dest(95..88) FIN SI SI masque(103) = 1 ALORS 744

dest(103..96) source(103..96) SINON dest(103..96) dest(103..96) FIN SI SI masque(111) = 1 ALORS dest(111..104) source(111..104) SINON dest(111..104) dest(111..104) FIN SI SI masque(119) = 1 ALORS dest(119..112) source(119..112) SINON dest(119..112) dest(119..112) FIN SI SI masque(127) = 1 ALORS dest(127..120) source(127..120) SINON dest(127..120) dest(127..120) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une copie conditionnel d'un lment d'octets d'un oprande source vers un oprande de destination en fonction des bits de masque dfinit dans un troisime oprande.

PBLENDVB xmm1,xmm2/m128,XMM0 66h 0Fh 38h 10h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 78 82.
745

Assembleur 80x86
SSE4.1+

PBLENDW
Blend Packed Words

Syntaxe
PBLENDW dest,source,immediat

Description Cette instruction permet d'effectuer une copie conditionnel d'un lment d'octets d'un oprande source vers un oprande de destination en fonction des bits de masque dfinit dans un troisime oprande.

Algorithme
SI immediat(0) = 1 ALORS dest(15..0) source(15..0) SINON dest(15..0) dest(15..0) FIN SI SI immediat(1) = 1 ALORS dest(31..16) source(31..16) SINON dest(31..16) dest(31..16) FIN SI SI immediat[2] = 1 ALORS dest(47..32) source(47..32) SINON dest(47..32) dest(47..32) FIN SI SI immediat(3) = 1 ALORS dest(63..48) source(63..48) SINON dest(63..48) dest(63..48) FIN SI 746

SI immediat(4) = 1 ALORS dest(79..64) source(79..64) SINON dest(79..64) dest(79..64) FIN SI SI immediat(5) = 1 ALORS dest(95..80) source(95..80) SINON dest(95..80) dest(95..80) FIN SI SI immediat(6) = 1 ALORS dest(111..96) source(111..96) SINON dest(111..96) dest(111..96) FIN SI SI immediat(7) = 1 ALORS dest(127..112) source(127..112) SINON dest(127..112) dest(127..112) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une copie conditionnel d'un lment d'octets d'un oprande source vers un oprande de destination en fonction des bits de masque dfinit dans un troisime oprande.

PBLENDW xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 0Eh /r ib

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction

747

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 83 85.

748

Assembleur 80x86
INTEL AES+

PCLMULQDQ
Carry-Less Multiplication Quadword

Syntaxe
PCLMULQDQ dest,source,immediat

Description Cette instruction permet d'effectuer une multiplication de quadruple mots avec une retenue en slectionnant l'oprande destination et source et une valeur immdiate pour slectionner les critres.

Algorithme
SI immediat[0] = 0 ALORS TEMP1 dest(63..0) SINON TEMP1 dest(127..64) FIN SI SI immediat(4) = 0 ALORS TEMP2 source (63..0) SINON TEMP2 source (127..64) FIN SI BOUCLE POUR i 0 JUSQU'A 63 SAUT 1 TmpB(i) (TEMP1(0) TEMP2(i)) BOUCLE POUR j 1 JUSQU'A i SAUT 1 TmpB(i) TmpB(i) XOR (TEMP1(j) TEMP2(i - j)) FIN BOUCLE POUR dest(i) TmpB(i) FIN BOUCLE POUR BOUCLE POUR i 64 JUSQU'A 126 SAUT 1 TmpB(i) 0; BOUCLE POUR j i - 63 JUSQU'A 63 SAUT 1 749

TmpB(i) TmpB(i) XOR (TEMP1(j) TEMP2(i - j)) FIN BOUCLE POUR dest(i) TmpB(i) FIN BOUCLE POUR dest(127) 0

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une multiplication de quadruple mots avec une retenue en slectionnant l'oprande destination et source et une valeur immdiate pour slectionner les critres.

PCLMULQDQ xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 44h /r ib

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 86 89.

750

Assembleur 80x86
INTEL Pentium Pro+

PCMPEQB
Packed Compare for Equal Bytes

Syntaxe
PCMPEQB dest,source

Description Cette instruction permet d'effectuer une comparaison sur un paquet d'octets et fixe la valeur de chacun d'eux FFh s'il sont gale sinon 00h.

Algorithme
SI dest(7..0) = source(7..0) ALORS dest(7..0) FFh SINON dest(7..0) 00h FIN SI SI dest(15..8) = source(15..8) ALORS dest(15..8) FFh SINON dest(15..8) 00h FIN SI SI dest(23..16) = source(23..16) ALORS dest(23..16) FFh SINON dest(23..16) 00h FIN SI SI dest(31..24) = source(31..24) ALORS dest(31..24) FFh SINON dest(31..24) 00h FIN SI SI dest(39..32) = source(39..32) ALORS 751

dest(39..32) FFh SINON dest(39..32) 00h FIN SI SI dest(47..40) = source(47..40) ALORS dest(47..40) FFh SINON dest(47..40) 00h FIN SI SI dest(55..48) = source(55..48) ALORS dest*55..48+ FFh SINON dest*55..48+ 00h FIN SI SI dest[63..56] = source(63..56) ALORS dest(63..56) FFh SINON dest(63..56) 00h FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une comparaison sur un paquet d'octets et fixe la valeur de chacun d'eux FFh s'il sont gale sinon 00h.

PCMPEQB mm,mm/m64

0Fh 74h PostByte

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 90 93.

752

Assembleur 80x86
INTEL Pentium Pro+

PCMPEQD
Packed Compare for Equal Dwords

Syntaxe
PCMPEQD dest,source

Description Cette instruction permet d'effectuer une comparaison sur un paquet de double mots et fixe la valeur de chacun d'eux FFFFFFFFh s'il sont gale sinon 00000000h.

Algorithme
SI dest(31..0) = source(31..0) ALORS dest(31..0) FFFFFFFFh SINON dest(31..0) 00000000h FIN SI SI dest[63..32] = source(63..32) ALORS dest(63..32) FFFFFFFFh SINON dest(63..32) 00000000h FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une comparaison sur un paquet de double mots et fixe la valeur de chacun d'eux FFFFFFFFh s'il sont 753

PCMPEQD mm,mm/m64

0Fh 76h /r

gale sinon 00000000h.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 90 93.

754

Assembleur 80x86
SSE4.1+

PCMPEQQ
Compare Packed Qword Data for Equal

Syntaxe
PCMPEQQ dest,source

Description Cette instruction permet d'effectuer une comparaison d'galit SIMD d'un paquet de quadruple mots de l'oprande destination et de l'oprande source.

Algorithme
SI dest(63..0) = source(63..0) ALORS dest(63..0) FFFFFFFFFFFFFFFFh SINON dest(63..0) 0 FIN SI SI dest(127..64) = source(127..64) ALORS dest(127..64) FFFFFFFFFFFFFFFFh SINON dest(127..64) 0 FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une comparaison d'galit SIMD d'un paquet de quadruple mots de l'oprande destination et de

PCMPEQQ xmm1,xmm2/m128

66h 0Fh 38h 29h /r

755

l'oprande source.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 94 95.

756

Assembleur 80x86
INTEL Pentium Pro+

PCMPEQW
Packed Compare for Equal Words

Syntaxe
PCMPEQW dest,source

Description Cette instruction permet d'effectuer une comparaison sur un paquet de mots et fixe la valeur de chacun d'eux FFFFh s'il sont gale sinon 0000h.

Algorithme
SI dest(15..0) = source(15..0) ALORS dest(15..0) FFFFh SINON dest(15..0) 0000h FIN SI SI dest(31..16) = source(31..16) ALORS dest(31..16) FFFFh SINON dest(31..16) 0000h FIN SI SI dest(47..32) = source(47..32) ALORS dest(47..32) FFFFh SINON dest(47..32) 0000h FIN SI SI dest(63..48) = source(63..48) ALORS dest(63..48) FFFFh SINON dest(63..48) 0000h FIN SI

757

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une comparaison sur un paquet de mots et fixe la valeur de chacun d'eux FFFFh s'il sont gale sinon 0000h.

PCMPEQW mm,mm/m64

07h 75h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 90 93.

758

Assembleur 80x86
Nehalem (SSE4.2)+

PCMPESTRI
Packed Compare Explicit Length Strings, Return Index

Syntaxe
PCMPESTRI dest,source,immediat

Description Cette instruction permet d'effectuer une comparaison ainsi qu'un processus de fragments de deux chaine de caractres bas sur une valeur d'encodage indiquer par un oprande immdiate et gnre un index entrepos dans le registre ECX.

Mnmonique
Instruction Opcode Description

Cette instruction permet d'effectuer une comparaison ainsi qu'un processus de fragments de deux chaine de PCMPESTRI xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 61h /r imm8 caractres bas sur une valeur d'encodage indiquer par un oprande immdiate et gnre un index entrepos dans le registre ECX.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 96 98.

759

Assembleur 80x86
Nehalem (SSE4.2)+

PCMPESTRM
Packed Compare Explicit Length Strings, Return Mask

Syntaxe
PCMPESTRM dest,source,immediat

Description Cette instruction permet d'effectuer une comparaison ainsi qu'un processus de fragments de deux chaine de caractres bas sur une valeur d'encodage indiquer par un oprande immdiate et gnre un masque entrepos dans le registre XMM0.

Mnmonique
Instruction Opcode Description

Cette instruction permet d'effectuer une comparaison ainsi qu'un processus de fragments de deux chaine de caractres PCMPESTRM xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 60h /r imm8 bas sur une valeur d'encodage indiquer par un oprande immdiate et gnre un masque entrepos dans le registre XMM0.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction

760

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 99 101.

761

Assembleur 80x86
INTEL Pentium Pro+

PCMPGTB
Packed Compare for Greater Than Bytes

Syntaxe
PCMPGTB dest,source

Description Cette instruction permet d'effectuer une comparaison sur un paquet d'octets et fixe la valeur de chacun d'eux FFh si l'oprande destinataire est suprieur l'oprande source sinon 00h.

Algorithme
SI dest(7..0) > source(7..0) ALORS dest(7..0) FFh SINON dest(7..0) 00h FIN SI SI dest(15..8) > source(15..8) ALORS dest(15..8) FFh SINON dest(15..8) 00h FIN SI SI dest(23..16) > source(23..16) ALORS dest(23..16) FFh SINON dest(23..16) 00h FIN SI SI dest(31..24) > source(31..24) ALORS dest(31..24) FFh SINON dest(31..24) 00h FIN SI 762

SI dest(39..32) > source(39..32) ALORS dest(39..32) FFh SINON dest(39..32) 00h FIN SI SI dest(47..40) > source(47..40) ALORS dest(47..40) FFh SINON dest(47..40) 00h FIN SI SI dest(55..48) > source(55..48) ALORS dest(55..48) FFh SINON dest(55..48) 00h FIN SI SI dest(63..56) > source(63..56) ALORS dest(63..56) FFh SINON dest(63..56) 00h FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une comparaison sur un paquet d'octets et fixe la valeur de chacun d'eux FFh si l'oprande destinataire est suprieur l'oprande source sinon 00h. Cette instruction permet d'effectuer une comparaison sur un paquet d'octets et fixe la valeur de chacun d'eux FFh si l'oprande destinataire est suprieur l'oprande source sinon 00h.

PCMPGTB mm,mm/m64

0Fh 64h /r

PCMPGTB xmm1, xmm2/m128

66h 0Fh 64h /r

763

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 102 106.

764

Assembleur 80x86
INTEL Pentium Pro+

PCMPGTD
Packed Compare for Greater Than Dwords

Syntaxe
PCMPGTD dest,source

Description Cette instruction permet d'effectuer une comparaison sur un paquet de double mots et fixe la valeur de chacun d'eux FFFFFFFFFh si l'oprande destinataire est suprieur l'oprande source sinon 00000000h.

Algorithme
SI dest(31..0) > source(31..0) ALORS dest(31..0) FFFFFFFFh SINON dest(31..0) 00000000h FIN SI SI dest(63..32) > source(63..32) ALORS dest(63..32) FFFFFFFFh SINON dest(63..32) 00000000h FIN SI

Mnmonique
Instruction PCMPGTD mm,mm/m64 Opcode 0Fh 66h /r Description Cette instruction permet d'effectuer une comparaison sur un paquet de double mots et fixe la valeur de 765

chacun d'eux FFFFFFFFFh si l'oprande destinataire est suprieur l'oprande source sinon 00000000h. PCMPGTD xmm1, xmm2/m128 66h 0Fh 66h /r Cette instruction permet d'effectuer une comparaison sur un paquet de double mots et fixe la valeur de chacun d'eux FFFFFFFFFh si l'oprande destinataire est suprieur l'oprande source sinon 00000000h.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 102 106.

766

Assembleur 80x86
Nehalem (SSE4.2)+

PCMPGTQ
Compare Packed Data for Greater Than

Syntaxe
PCMPGTQ dest,source

Description Cette instruction permet d'effectuer une comparaison sur un paquet de quadruple mots et fixe la valeur de chacun d'eux FFFFFFFFFFFFFFFFh si l'oprande destinataire est suprieur l'oprande source sinon 0000000000000000h.

Algorithme
SI dest(63..0) > source(63..0) ALORS dest(63..0) FFFFFFFFFFFFFFFFh SINON dest(63..0) 0 FIN SI SI dest(127..64) > source(127..64) ALORS dest(127..64) FFFFFFFFFFFFFFFFh SINON dest(127..64) 0 FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une comparaison sur un paquet de quadruple mots et fixe la valeur de

PCMPGTQ xmm1,xmm2/m128

66h 0Fh 38h 37h /r

767

chacun d'eux FFFFFFFFFFFFFFFFh si l'oprande destinataire est suprieur l'oprande source sinon 0000000000000000h.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 107 109.

768

Assembleur 80x86
INTEL Pentium Pro+

PCMPGTW
Packed Compare for Greater Than Words

Syntaxe
PCMPGTW dest,source

Description Cette instruction permet d'effectuer une comparaison sur un paquet de mots et fixe la valeur de chacun d'eux FFFFFh si l'oprande destinataire est suprieur l'oprande source sinon 0000h.

Algorithme
SI dest(15..0) > source(15..0) ALORS dest(15..0) FFFFh SINON dest(15..0) 0000h SI dest(31..16) > source(31..16) ALORS FIN SI dest(31..16) FFFFh SINON dest(31..16) 0000h FIN SI SI dest(47..32) > source(47..32) ALORS dest(47..32) FFFFh SINON dest(47..32) 0000h FIN SI SI dest(63..48) > source(63..48) ALORS dest(63..48) FFFFh SINON dest(63..48) 0000h

769

FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une comparaison sur un paquet de mots et fixe la valeur de chacun d'eux FFFFFh si l'oprande destinataire est suprieur l'oprande source sinon 0000h. Cette instruction permet d'effectuer une comparaison sur un paquet de mots et fixe la valeur de chacun d'eux FFFFFh si l'oprande destinataire est suprieur l'oprande source sinon 0000h.

PCMPGTW mm, mm/m64

0Fh 65h /r

PCMPGTW xmm1, xmm2/m128 66h 0Fh 65h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 102 106.

770

Assembleur 80x86
Nehalem (SSE4.2)+

PCMPISTRI
Packed Compare Implicit Length Strings, Return Index

Syntaxe
PCMPISTRI dest,source,immediat

Description Cette instruction permet d'effectuer une comparaison ainsi qu'un processus de fragments de deux chaines de caractres bas sur une valeur d'encodage implicite indiquer par un oprande immdiate et gnre un index entrepos dans le registre ECX.

Mnmonique
Instruction Opcode Description

Cette instruction permet d'effectuer une comparaison ainsi qu'un processus de fragments de deux chaines de caractres bas sur une PCMPISTRI xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 63h /r imm8 valeur d'encodage implicite indiquer par un oprande immdiate et gnre un index entrepos dans le registre ECX.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 110 111.
771

Assembleur 80x86
Nehalem (SSE4.2)+

PCMPISTRM
Packed Compare Implicit Length Strings, Return Mask

Syntaxe
PCMPISTRM dest,source,immediat

Description Cette instruction permet d'effectuer une comparaison ainsi qu'un processus de fragments de deux chaine de caractres bas sur une valeur d'encodage implicite indiquer par un oprande immdiate et gnre un masque entrepos dans le registre XMM0.

Mnmonique
Instruction Opcode Description

Cette instruction permet d'effectuer une comparaison ainsi qu'un processus de fragments de deux chaine de caractres PCMPISTRM xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 62h /r imm8 bas sur une valeur d'encodage implicite indiquer par un oprande immdiate et gnre un masque entrepos dans le registre XMM0.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction

772

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 113 115.

773

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PDISTIB destination, source

PDISTIB
Packed Distribution

Description Cette instruction permet d'effectuer le calcul de la distance entre des octets de deux oprandes, le rsultat de l'addition d'octet de l'oprande de destination et la saturation du rsultat.

Algorithme destination(7..0) SaturateToUnsignedByte(destination(7..0) + ABS(destination(7..0) source(7..0))) destination(15..8) SaturateToUnsignedByte(destination(15..8) + ABS(destination(15..8) - source(15..8))) destination(23..16) SaturateToUnsignedByte(destination(23..16) + ABS(destination(23..16) - source(23..16))) destination(31..24) SaturateToUnsignedByte(destination(31..24) + ABS(destination(31..24) - source(31..24))) destination(39..32) SaturateToUnsignedByte(destination(39..32) + ABS(destination(39..32) - source(39..32))) destination(47..40) SaturateToUnsignedByte(destination(47..40) + ABS(destination(47..40) - source(47..40))) destination(55..48) SaturateToUnsignedByte(destination(55..48) + ABS(destination(55..48) - source(55..48))) destination(63..56) SaturateToUnsignedByte(destination(63..56) + ABS(destination(63..56) - source(63..56)))

Mnmonique Instruction PDISTIB mm,m64 Opcode 0Fh 54h /r Description Cette instruction permet d'effectuer le calcul de la distance entre des octets de deux oprandes,
774

le rsultat de l'addition d'octet de l'oprande de destination et la saturation du rsultat.

775

Assembleur 80x86
SSE4.1+

PEXTRB
Paquet Extract Byte

Syntaxe
PEXTRB dest,source,count

Description Cette instruction permet de copier l'octet de l'oprande source spcifi par un compteur d'oprande dans l'oprande de destination.

Algorithme
SEL count(3..0) TEMP (source >> SEL x 8) FFh SI dest = Mem8 ALORS Mem8 TEMP(7..0) SINON SI mode 64 bits et registre 64 bits selectionn ALORS R64(7..0) TEMP(7..0) r64(63..8) 00000000000000h SINON R32(7..0) TEMP(7..0) r32(31..8) 000000h FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet de copier l'octet de l'oprande source spcifi par un compteur d'oprande dans

PEXTRB reg/m8,xmm2, imm8

66h 0Fh 3Ah 14h /r ib

776

l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 116 118.

777

Assembleur 80x86
SSE4.1+

PEXTRD
Paquet Extract Doubleword

Syntaxe
PEXTRD dest,source,count

Description Cette instruction permet de copier le double mot de l'oprande source spcifi par un compteur d'oprande dans l'oprande de destination.

Algorithme
SEL count(1..0) TEMP (source >> SEL x 32) FFFFFFFFh dest TEMP

Mnmonique
Instruction Opcode Description Cette instruction permet de copier le double mot de l'oprande source spcifi par un compteur d'oprande dans l'oprande de destination.

PEXTRD r/m32,xmm2,imm8

66h 0Fh 3Ah 16h /r ib

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 116 118.
778

Assembleur 80x86
SSE4.1+

PEXTRQ
Paquet Extract Quadword

Syntaxe
PEXTRQ dest,source,count

Description Cette instruction permet de copier le quadruple mot de l'oprande source spcifi par un compteur d'oprande dans l'oprande de destination.

Algorithme
SEL count(0) TEMP (source >> SEL x 64) dest TEMP

Mnmonique
Instruction Opcode Description

PEXTRQ r/m64,xmm2,imm8

Cette instruction permet de copier le quadruple mot de 66h (REX.W) 0Fh 3Ah 16h /r ib l'oprande source spcifi par un compteur d'oprande dans l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
779

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 116 118.

780

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

PEXTRW
Extract Word

Syntaxe
PEXTRW dest,source,count

Description Cette instruction permet de copier le mot de l'oprande source spcifi par un compteur d'oprande dans l'oprande de destination.

Algorithme
SI oprande source est 64 bits ALORS SEL count 3h TEMP (source >> (SEL x 16)) FFFFh dest(15..0) TEMP(15..0) dest(31..16) 0000h SINON SI oprande source est 128 bits ALORS SEL count 7h TEMP (source >> (SEL x 16)) FFFFh dest(15..0) TEMP(15..0) dest(31..16) 0000h FIN SI

Mnmonique
Instruction Opcode Description

781

PEXTRW reg32,mmreg,imm8

0Fh C5h /r imm8

Cette instruction permet de copier le mot de l'oprande source spcifi par un compteur d'oprande dans l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 118 121.

782

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+
Syntaxe PF2ID dest,source

PF2ID
Convert Packed Float Point to 32 bits

Description Cette instruction permet de convertir un double mots d'un format rel un format d'entier 32 bits.

Algorithme SI source(31..0) > 231 ALORS dest(31..0) 7FFFFFFFh FIN SI SI source(31..0) <= -231 ALORS dest(31..0) 80000000h FIN SI dest(31..0) truncate(source(31..0)) SI source(63..32) > 231 ALORS dest(63..32) 7FFFFFFFh FIN SI SI source(63..32) <= -231 ALORS dest(63..32) 80000000h FIN SI dest(63..32) truncate(source(63..32))

Mnmonique Instruction PF2ID mm,mm/m64 Opcode 0Fh 0Fh 1Dh /r Description Cette instruction permet de convertir un double mots d'un format rel un format d'entier 32

783

bits.

784

Assembleur 80x86
AMD 3DNow!+

PF2IW
Packed Float Point to Integer Word conversion with sign extend

Syntaxe
PF2IW dest,source

Description Cette instruction permet de convertir un double mots d'un format rel un format d'entier 16 bits.

Algorithme
SI source(31..0) >= 215 ALORS dest(31..0) 00007FFFh SINON SI source(31..0) <= -215 ALORS dest(31..0) FFFF8000h SINON dest(31..0) * source(31..0) ] FIN SI SI source(63..32) >= 215 ALORS dest(63..32) 00007FFFh SINON SI source(63..32) <= -215 ALORS dest(63..32) FFFF8000h SINON dest(63..32) * source(63..32) ] FIN SI

Mnmonique
Instruction Opcode Description

785

PF2IW mm,mm/m64

0Fh 0Fh 1Ch /r

Cette instruction permet de convertir un double mots d'un format rel un format d'entier 16 bits.

Rfrences AMD Extensions to the 3DNow! and MMX Instruction Sets Manual, Edition Advanced Micro Devices, March 2000, Publication No. 22466D, page 12.

786

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFACC dest,source

PFACC
Float Point Accumulate

Description Cette instruction permet d'effectuer l'accumulation de double mots.

Algorithme dest(31..0) dest(31..0) + dest(63..32) dest(63..32) source(31..0) + source(63..32)

Mnmonique Instruction PFACC mm,mm/m64 Opcode 0Fh 0Fh AEh /r Description Cette instruction permet d'effectuer l'accumulation de double mots.

787

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFADD dest,source

PFADD
Float Point Addition

Description Cette instruction permet d'effectuer l'addition de double mots.

Algorithme dest(31..0) dest(31..0) + source(31..0) dest(63..32) dest(63..32) + source(63..32)

Mnmonique Instruction PFADD mm,mm/m64 Opcode 0Fh 0Fh 9Eh /r Description Cette instruction permet d'effectuer l'addition de double mots.

788

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFCMPEQ dest,source

PFCMPEQ
Float Point Compare Equal

Description Cette instruction permet d'effectuer la comparaison d'galit d'un paquet de double mots contenu dans des oprandes de 64 bits.

Algorithme SI dest(31..0) = source(31..0) ALORS dest(31..0) FFFFFFFFh SINON dest(31..0) 00000000h FIN SI SI dest(63..32) = source(63..32) ALORS dest(63..32) FFFFFFFFh SINON dest(63..32) 00000000h FIN SI

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la comparaison d'galit d'un paquet de double mots contenu dans des oprandes de 64 bits.

PFCMPEQ mm,mm/m64

0Fh 0Fh B0h /r

789

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFCMPGE dest,source

PFCMPGE
Float Point Greater or Equal to

Description Cette instruction permet d'effectuer la comparaison d'galit ou de supriorit d'un paquet de double mots contenu dans des oprandes de 64 bits.

Algorithme SI dest(31..0) >= source(31..0) ALORS dest(31..0) FFFFFFFFh SINON dest(31..0) 00000000h FIN SI SI dest(63..32) >= source(63..32) ALORS dest(63..32) FFFFFFFFh SINON dest(63..32) 00000000h FIN SI

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la comparaison d'galit ou de supriorit d'un paquet de double mots contenu dans des oprandes de 64 bits.

PFCMPGE mm,mm/m64

0Fh 0Fh 90h /r

790

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFCMPGT dest,source

PFCMPGT
Float Point Greater

Description Cette instruction permet d'effectuer la comparaison de supriorit d'un paquet de double mots contenu dans des oprandes de 64 bits.

Algorithme SI dest(31..0) > source(31..0) ALORS dest(31..0) FFFFFFFFh SINON dest(31..0) 00000000h FIN SI SI dest(63..32) > source(63..32) ALORS dest(63..32) FFFFFFFFh SINON dest(63..32) 00000000h FIN SI

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la comparaison de supriorit d'un paquet de double mots contenu dans des oprandes de 64 bits.

PFCMPGT mm,mm/m64

0Fh 0Fh A0h /r

791

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFMAX dest,source

PFMAX
Float Point Maximum

Description Cette instruction permet de retourner la valeur maximal de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme SI source(31..0) > dest(31..0) ALORS dest(31..0) source(31..0) FIN SI SI source(63..32) > dest(63..32) ALORS dest(63..32) source(63..32) FIN SI

Mnmonique Instruction Opcode Description Cette instruction permet de retourner la valeur maximal de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFMAX mm,mm/m64

0Fh 0Fh A4h /r

792

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFMIN dest,source

PFMIN
Float Point Minimum

Description Cette instruction permet de retourner la valeur minimal de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme SI source(31..0) < dest(31..0) ALORS dest(31..0) source(31..0) FIN SI SI source(63..32) < dest(63..32) ALORS dest(63..32) source(63..32) FIN SI

Mnmonique Instruction Opcode Description Cette instruction permet de retourner la valeur minimal de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFMIN mm,mm/m64

0Fh 0Fh 94h /r

793

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFMUL dest,source

PFMUL
Float Point Multiplication

Description Cette instruction permet d'effectuer la multiplication de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme dest(31..0) dest(31..0) * source(31..0) dest(63..32) dest(63..32) * source(63..32)

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la multiplication de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFMUL mm,mm/m64

0Fh 0Fh B4h /r

794

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFNACC dest,source

PFNACC
Float Point Negative Accumulate

Description Cette instruction permet d'effectuer l'accumulation ngative de double mots.

Algorithme dest(31..0) dest(31..0) - dest(63..32) dest(63..32) source(31..0) - source(63..32)

Mnmonique Instruction PFNACC mm,mm/m64 Opcode 0Fh 0Fh 8Ah /r Description Cette instruction permet d'effectuer l'accumulation ngative de double mots.

795

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFPNACC dest,source

PFPNACC
Packed Floating Point Mixed Positive

Description Cette instruction permet d'effectuer un mixe d'accumulation positive et ngative de double mots.

Algorithme dest(31..0) dest(31..0) - dest(63..32) dest(63..32) source(31..0) + source(63..32)

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer un mixe d'accumulation positive et ngative de double mots.

PFPNACC mm,mm/m64

0Fh 0Fh 8Eh /r

796

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFRCP dest,source

PFRCP
Float Point Reciprocal Approximation

Description Cette instruction permet d'effectuer la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme dest(31..0) Reciprocal(source(31..0)) dest(63..32) Reciprocal(source(63..32))

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFRCP mm,mm/m64

0Fh 0Fh 96h /r

797

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFRCIT1 dest,source

PFRCPIT1
Float Point Reciprocal, First iteration Step

Description Cette instruction permet d'effectuer la premire tape d'itration de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme dest(31..0) First_Step_Reciprocal(source(31..0)) dest(63..32) First_Step_Reciprocal(source(63..32))

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la premire tape d'itration de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFRCIT1 mm,mm/m64

0Fh 0Fh A6h /r

798

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFRCPIT2 dest,source

PFRCPIT2
Float Point Reciprocal, Second iteration Step

Description Cette instruction permet d'effectuer la deuxime tape d'itration de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme dest(31..0) Second_Step_Reciprocal(source(31..0)) dest(63..32) Second_Step_Reciprocal(source(63..32))

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la deuxime tape d'itration de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFRCPIT2 mm,mm/m64

0Fh 0Fh B6h /r

799

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFRSQIT1 dest,source

PFRSQIT1
Float Point Reciprocal Square Root, First iteration step

Description Cette instruction permet d'effectuer la premire tape d'itration de la racine carr de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme dest(31..0) First_Step_Reciprocal_Square_Root(source(31..0)) dest(63..32) First_Step_Reciprocal_Square_Root(source(63..32))

Mnmonique Instruction PFRSQIT1 mm,mm/m64 Opcode 0Fh 0Fh A7h /r Description Cette instruction permet d'effectuer la premire tape d'itration de la racine carr de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

800

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFRSQRT dest,source

PFRSQRT
Float Point Reciprocal Square Root Approximation

Description Cette instruction permet d'effectuer la racine carr approximative de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme dest(31..0) Reciprocal_Square_Root(source(31..0)) dest(63..32) Reciprocal_Square_Root(source(63..32))

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la racine carr approximative de la rciproque de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFRSQRT mm,mm/m64

0Fh 0Fh 97h /r

801

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFSUB dest,source

PFSUB
Float Point Subtraction

Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme dest(31..0) dest(31..0) - source(31..0) dest(63..32) dest(63..32) - source(63..32)

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFSUB mm,mm/m64

0Fh 0Fh 9Ah /r

802

Assembleur 80x86
AMD 3DNow!+
Syntaxe PFSUBR dest,source

PFSUBR
Float Point Reverse Subtraction

Description Cette instruction permet d'effectuer la soustraction invers de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme dest(31..0) source(31..0) - dest(31..0) dest(63..32) source(63..32) - dest(63..32)

Mnmonique Instruction Opcode Description Cette instruction permet d'effectuer la soustraction invers de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

PFSUBR mm,mm/m64

0Fh 0Fh AAh /r

803

Assembleur 80x86
SSSE3+

PHADDD
Packed Horizontal Add Doubleword

Syntaxe
PHADDD dest,source

Description Cette instruction permet d'effectuer l'addition de double mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

Algorithme
SI taille d'oprande = 64 bits ALORS dest(31..0) dest(63..32) + dest(31..0) dest(63..32) source(63..32) + source(31..0) SINON SI taille d'oprande = 128 bits ALORS dest(31..0) dest(63..32) + dest(31..0) dest(63..32) dest(127..96) + dest(95..64) dest(95..64) source(63..32) + source(31..0) dest(127..96) source(127..96) + source(95..64) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer l'addition de double mot entier horizontallement adjacent d'un oprande source et oprande

PHADDD mm1,mm2/m64

0Fh 38h 02h /r

804

destination et met le rsultat dans l'oprande destination. Cette instruction permet d'effectuer l'addition de double mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

PHADDD xmm1,xmm2/m128

66h 0Fh 38h 02h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 123 125.

805

Assembleur 80x86
SSSE3+

PHADDSW
Packed Horizontal Add and Saturate Word

Syntaxe
PHADDSW dest,source

Description Cette instruction permet d'effectuer l'addition de mot entier horizontallement adjacent avec saturation d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

Algorithme
SI taille d'oprande = 64 bits ALORS dest(15..0) SaturateToSignedWord((dest(31..16) + dest(15..0)) dest(31..16) SaturateToSignedWord(dest(63..48) + dest(47..32)) dest(47..32) SaturateToSignedWord(source(31..16) + source(15..0)) dest(63..48) SaturateToSignedWord(source(63..48) + source(47..32)) SINON SI taille d'oprande = 128 bits ALORS dest(15..0) SaturateToSignedWord(dest(31..16) + dest(15..0)) dest(31..16) SaturateToSignedWord(dest(63..48) + dest(47..32)) dest(47..32) SaturateToSignedWord(dest(95..80) + dest(79..64)) dest(63..48) SaturateToSignedWord(dest(127..112) + dest(111..96)) dest(79..64) SaturateToSignedWord(source(31..16) + source(15..0)) dest(95..80) SaturateToSignedWord(source(63..48) + source(47..32)) dest(111..96) SaturateToSignedWord(source(95..80) + source(79..64)) dest(127..112) SaturateToSignedWord(source(127..112) + source(111..96)) FIN SI

Mnmonique

806

Instruction

Opcode

Description Cette instruction permet d'effectuer l'addition de mot entier horizontallement adjacent avec saturation d'un oprande source et oprande destination et met le rsultat dans l'oprande destination. Cette instruction permet d'effectuer l'addition de mot entier horizontallement adjacent avec saturation d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

PHADDSW mm1,mm2/m64

0Fh 38h 03h /r

PHADDSW xmm1,xmm2/m128

66h 0Fh 38h 03h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 126 128.

807

Assembleur 80x86
SSSE3+

PHADDW
Packed Horizontal Add Word

Syntaxe
PHADDW dest,source

Description Cette instruction permet d'effectuer l'addition de mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

Algorithme
SI taille d'oprande = 64 bits ALORS dest(15..0) dest(31..16) + dest(15..0) dest(31..16) dest(63..48) + dest(47..32) dest(47..32) source(31..16) + source(15..0) dest(63..48) source(63..48) + source(47..32) SINON SI taille d'oprande = 128 bits ALORS dest(15..0) dest(31..16) + dest(15..0) dest(31..16) dest(63..48) + dest(47..32) dest(47..32) dest(95..80) + dest(79..64) dest(63..48) dest(127..112) + dest(111..96) dest(79..64) source(31..16) + source(15..0) dest(95..80) source(63..48) + source(47..32) dest(111..96) source(95..80) + source(79..64) dest(127..112) source(127..112) + source(111..96) FIN SI

Mnmonique

808

Instruction

Opcode

Description Cette instruction permet d'effectuer l'addition de mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination. Cette instruction permet d'effectuer l'addition de mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

PHADDW mm1,mm2/m64

0Fh 38h 01h /r

PHADDW xmm1,xmm2/m128

66h 0Fh 38h 01h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 123 125.

809

Assembleur 80x86
SSE4.1+

PHMINPOSUW
Packed Horizontal Word Minimum

Syntaxe
PHMINPOSUW dest,source

Description Cette instruction permet de demander le minimum des valeurs de mot de l'oprande source et place dans la partie basse de l'oprande le mot.

Algorithme
INDEX 0 MIN source(15..0) SI source(31..16) < MIN ALORS INDEX 1 MIN SRC(31..16) FIN SI SI source(47..32) < MIN ALORS INDEX 2 MIN source(47..32) FIN SI SI source(63..48) < MIN ALORS INDEX 3 MIN source(63..48) FIN SI SI source(79..64) < MIN ALORS INDEX 4 MIN source(79..64) FIN SI SI source(95..80) < MIN ALORS INDEX 5 MIN source(95..80) 810

FIN SI SI source(111..96) < MIN ALORS INDEX 6 MIN source(111..96) FIN SI SI source(127..112) < MIN ALORS INDEX 7 MIN source(127..112) FIN SI dest(15..0) MIN dest(18..16) INDEX dest(127..19) 0000000000000000000000000000h

Mnmonique
Instruction Opcode Description Cette instruction permet de demander le minimum des valeurs de mot de l'oprande source et place dans la partie basse de l'oprande le mot.

PHMINPOSUW xmm1,xmm2/m128 66h 0Fh 38h 41h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 129 131.

811

Assembleur 80x86
SSSE3+

PHSUBD
Packed Horizontal Subtract Doubleword

Syntaxe
PHSUBD dest,source

Description Cette instruction permet d'effectuer la soustraction de double mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

Algorithme
SI taille d'oprande = 64 bits ALORS dest(31..0) dest(31..0) - dest(63..32) dest(63..32) source(31..0) - source(63..32) SINON SI taille d'oprande = 128 bits ALORS dest(31..0) dest(31..0) - dest(63..32) dest(63..32) dest(95..64) - dest(127..96) dest(95..64) source(31..0) - source(63..32) dest(127..96) source(95..64) - source(127..96) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la soustraction de double mot entier horizontallement adjacent d'un oprande source et oprande

PHSUBD mm1,mm2/m64

0Fh 38h 06h /r

812

destination et met le rsultat dans l'oprande destination. Cette instruction permet d'effectuer la soustraction de double mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

PHSUBD xmm1,xmm2/m128

66h 0Fh 38h 06h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 132 135.

813

Assembleur 80x86
SSSE3+

PHSUBSW
Packed Horizontal Subtract and Saturate

Syntaxe
PHSUBSW dest,source

Description Cette instruction permet d'effectuer la soustraction de mot entier horizontallement adjacent avec saturation d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

Algorithme
SI taille d'oprande = 64 bits ALORS dest(15..0) SaturateToSignedWord(dest(15..0) - dest(31..16)) dest(31..16) SaturateToSignedWord(dest(47..32) - dest(63..48)) dest(47..32) SaturateToSignedWord(source(15..0) - source(31..16)) dest(63..48) SaturateToSignedWord(source(47..32) - source(63..48)) SINON SI taille d'oprande = 128 bits ALORS dest(15..0) SaturateToSignedWord(dest(15..0) - dest(31..16)) dest(31..16) SaturateToSignedWord(dest(47..32) - dest(63..48)) dest(47..32) SaturateToSignedWord(dest(79..64) - dest(95..80)) dest(63..48) SaturateToSignedWord(dest(111..96) - dest(127..112)) dest(79..64) SaturateToSignedWord(source(15..0) - source(31..16)) dest(95..80) SaturateToSignedWord(source(47..32) - source(63..48)) dest(111..96) SaturateToSignedWord(source(79..64) - source(95..80)) dest(127..112) SaturateToSignedWord(source(111..96) - source(127..112)) FIN SI

Mnmonique

814

Instruction

Opcode

Description Cette instruction permet d'effectuer la soustraction de mot entier horizontallement adjacent avec saturation d'un oprande source et oprande destination et met le rsultat dans l'oprande destination. Cette instruction permet d'effectuer la soustraction de mot entier horizontallement adjacent avec saturation d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

PHSUBSW mm1,mm2/m64

0Fh 38h 07h /r

PHSUBSW xmm1,xmm2/m128

66h 0Fh 38h 07h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 136 138.

815

Assembleur 80x86
SSSE3+

PHSUBW
Packed Horizontal Subtract Word

Syntaxe
PHSUBW dest,source

Description Cette instruction permet d'effectuer la soustraction de mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

Algorithme
SI taille d'oprande = 64 bits ALORS dest(15..0) dest(15..0) - dest(31..16) dest(31..16) dest(47..32) - dest(63..48) dest(47..32) source(15..0) - source(31..16) dest(63..48) source(47..32) - source(63..48) SINON SI taille d'oprande = 128 bits ALORS dest(15..0) dest(15..0) - dest(31..16) dest(31..16) dest(47..32) - dest(63..48) dest(47..32) dest(79..64) - dest(95..80) dest(63..48) dest(111..96) - dest(127..112) dest(79..64) source(15..0) - source(31..16) dest(95..80) source(47..32) - source(63..48) dest(111..96) source(79..64) - source(95..80) dest(127..112) source(111..96) - source(127..112) FIN SI

Mnmonique

816

Instruction

Opcode

Description Cette instruction permet d'effectuer la soustraction de mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination. Cette instruction permet d'effectuer la soustraction de mot entier horizontallement adjacent d'un oprande source et oprande destination et met le rsultat dans l'oprande destination.

PHSUBW mm1,mm2/m64

0Fh 38h 05h /r

PHSUBW xmm1,xmm2/m128

66h 0Fh 38h 05h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 132 135.

817

Assembleur 80x86
AMD 3DNow!+
Syntaxe PI2FD dest,source

PI2FD
Integer To Float Point

Description Cette instruction permet de convertir un paquet de format d'entier 32 bits double mots d'un format rel.

Algorithme dest(31..0) (rel) source(31..0) dest(63..32) (rel) source(63..32)

Mnmonique Instruction Opcode Description Cette instruction permet de convertir un paquet de format d'entier 32 bits double mots d'un format rel.

PI2FD mm,mm/m64

0Fh 0Fh 0Dh /r

818

Assembleur 80x86
AMD 3DNow!+
Syntaxe PI2FW dest,source

PI2FW
Integer To Float Point Word

Description Cette instruction permet de convertir un paquet de format d'entier 16 bits double mots d'un format rel.

Algorithme dest(31..0) (rel) source(15..0) dest(63..32) (rel) source(47..32)

Mnmonique Instruction Opcode Description Cette instruction permet de convertir un paquet de format d'entier 16 bits double mots d'un format rel.

PI2FW mm,mm/m64

0Fh 0Fh 0Ch /r

819

Assembleur 80x86
SSE4.1+

PINSRB
Insert Byte

Syntaxe
PINSRW dest,source,compteur

Description Cette instruction permet d'effectuer une copie d'un octet d'un oprande source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande.

Algorithme
SEL compteur(3..0) MASK (0FFh << (SEL x 8)) TEMP (((source(7..0) << (SEL x 8)) MASK) dest ((dest MASK) U TEMP)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une copie d'un octet d'un oprande source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande.

PINSRB xmm1,r32/m8, imm8

66h 0Fh 3Ah 20h /r ib

Rfrences
820

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 139 141.

821

Assembleur 80x86
SSE4.1+

PINSRD
Insert Doubleword

Syntaxe
PINSRD dest,source,compteur

Description Cette instruction permet d'effectuer une copie d'un double mot d'un oprande source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande.

Algorithme
SEL compteur (1..0) MASK (0FFFFFFFFh << (SEL x 32)) TEMP (((source << (SEL x 32)) AND MASK) dest ((dest MASK) U TEMP)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une copie d'un double mot d'un oprande source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande.

PINSRD xmm1,r/m32, imm8

66h 0Fh 3Ah 22h /r ib

822

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 139 141.

823

Assembleur 80x86
SSE4.1+

PINSRQ
Insert Quadword

Syntaxe
PINSRQ dest,source,compteur

Description Cette instruction permet d'effectuer une copie d'un quadruple mot d'un oprande source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande.

Algorithme
SEL compteur(0) MASK (0FFFFFFFFFFFFFFFFh << (SEL x 64)) TEMP (((source << (SEL x 64)) MASK) dest ((dest MASK) U TEMP)

Mnmonique
Instruction Opcode Description

PINSRQ xmm1,r/m64, imm8

Cette instruction permet d'effectuer une copie d'un quadruple mot d'un oprande 66h REX.W 0Fh 3Ah 22h /r ib source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande.

824

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 139 141.

825

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

PINSRW
Insert Word

Syntaxe
PINSRW dest,source,compteur

Description Cette instruction permet d'effectuer une copie d'un mot d'un oprande source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande.

Algorithme
SI oprande dest est 128 bits ALORS compteur compteur 07h EVALUER CAS compteur CAS 0: masque 0000000000000000000000000000FFFFh CAS 1: masque 000000000000000000000000FFFF0000h CAS 2: masque 00000000000000000000FFFF00000000h CAS 3: masque 0000000000000000FFFF000000000000h CAS 4: masque 000000000000FFFF0000000000000000h CAS 5: masque 00000000FFFF00000000000000000000h CAS 6: masque 0000FFFF000000000000000000000000h CAS 7: masque FFFF0000000000000000000000000000h FIN EVALUE CAS SINON compteur compteur 03h EVALUER CAS compteur CAS 0: masque 000000000000FFFFh CAS 1: masque 00000000FFFF0000h CAS 2: masque 0000FFFF00000000h 826

CAS 3: masque FFFF000000000000h FIN EVALUE CAS FIN SI dest (dest (masque)) U ((source << (compteur x 16)) masque)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer une copie d'un mot d'un oprande source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande. Cette instruction permet d'effectuer une copie d'un mot d'un oprande source et de l'insrer dans l'oprande de destination de l'emplacement spcifi par un compteur d'oprande.

PINSRW mm, r32/m16, imm8

0Fh C4h /r ib

PINSRW xmm, r32/m16, imm8

66h 0Fh C4h /r ib

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 142 144.

827

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PMACHRIW destination, source

PMACHRIW
Packed Multiply and Accumulate with Rounding

Description Cette instruction permet d'effectuer une multiplication de 2 oprandes sources en utilisant la mthode dcrite par PMULHRW et accumule le rsultat avec la valeur dans un registre de destination en utilisant un arrondissement arithmtique.

Algorithme destination(15..0) destination(15..0) + (destination(15..0) x source(15..0) + 00004000h)(30..15) destination(31..16) destination(31..16) + (destination(31..16) x source(31..16) + 00004000h)(30..15) destination(47..32) destination(47..32) + (destination(47..32) x source(47..32) + 00004000h)(30..15) destination(63..48) destination(63..48) + (destination(63..48) x source(63..48) + 00004000h)(30..15)

Mnmonique Instruction PMACHRIW mm,m64 Opcode 0Fh 5Eh /r Description Cette instruction permet d'effectuer une multiplication de 2 oprandes sources en utilisant la mthode dcrite par PMULHRW et accumule le rsultat avec la valeur dans un registre de destination en utilisant un arrondissement arithmtique.

828

829

Assembleur 80x86
SSSE3+

PMADDUBSW
Multiply and Add Packed Signed and Unsigned Bytes

Syntaxe
PMADDUBSW dest,source

Description Cette instruction permet d'effectuer une multiplication vertical de chacun des octets d'un oprande de destination avec les octets (entier) d'un oprande source et produit des entiers 16 bits intermdiaire.

Algorithme
SI oprande dest est 128 bits ALORS dest(15..0) SaturateToSignedWord(source(15..8) x dest(15..8) + source(7..0) x dest(7..0)) dest(127..112) SaturateToSignedWord(source(127..120) x dest(127..120) + source(119..112) x dest(119..112)) SINON dest(15..0) SaturateToSignedWord(source(15..8) x dest(15..8) + source(7..0) x dest(7..0)) dest(31..16) SaturateToSignedWord(source(31..24) x dest(31..24) + source(23..16) x dest(23..16)) dest(47..32) SaturateToSignedWord(source(47..40) x dest(47..40) + source(39..32) x dest(39..32)) dest(63..48) SaturateToSignedWord(source(63..56) x dest(63..56) + source(55..48) x dest(55..48)) FIN SI dest (dest (masque)) U ((source << (compteur x 16)) masque)

Mnmonique
Instruction Opcode Description

830

PMADDUBSW mm1, mm2/m64

0Fh 38h 04h /r

Cette instruction permet d'effectuer une multiplication vertical de chacun des octets d'un oprande de destination avec les octets (entier) d'un oprande source et produit des entiers 16 bits intermdiaire. Cette instruction permet d'effectuer une multiplication vertical de chacun des octets d'un oprande de destination avec les octets (entier) d'un oprande source et produit des entiers 16 bits intermdiaire.

PMADDUBSW xmm1,xmm2/m128 66h 0Fh 38h 04h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 145 147.

831

Assembleur 80x86
INTEL Pentium Pro+

PMADDWD
Packed Multiply and Add Dwords

Syntaxe
PMADDWD destination, source

Description Cette instruction permet d'effectuer une multiplication de 2 registres MMX contenant dans un paquet de mots d'un emplacement/mmoire.

Algorithme
destination(31..0) destination(15..0) x source(15..0) + destination(31..16) x source(31..16) destination(63..32) destination(47..32) x source(47..32) + destination(63..48) x source(63..48)

Mnmonique
Instruction PMADDWD mm,mm/m64 Opcode 0Fh F5h /r Description Cette instruction permet d'effectuer une multiplication de 2 registres MMX contenant dans un paquet de mots d'un emplacement/mmoire.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 148 151.

832

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PMAGW destination, source

PMAGW
Packed Magnitude

Description Cette instruction permet d'effectuer la comparaison de la valeur absolue d'un paquet de mots de l'oprande source et de l'ensemble des mots de destination et fixe l'oprande de destination avec la valeur de la plus large magntude.

Algorithme SI ABS(source(15..0)) > ABS(source(15..0)) ALORS destination(15..0) source(15..0) FIN SI SI ABS(source(31..16)) > ABS(source(31..16)) ALORS destination(31..16) source(31..16) FIN SI SI ABS(source(47..32)) > ABS(source(47..32)) ALORS destination(47..32) source(47..32) FIN SI SI ABS(source(63..56)) > ABS(source(63..56)) ALORS destination(63..56) source(63..56) FIN SI

Mnmonique Instruction PMAGW mm,mm/m64 Opcode 0Fh 52h /r Description Cette instruction permet d'effectuer la comparaison de la valeur absolue d'un paquet de mots de l'oprande source et de l'ensemble des mots de destination et fixe l'oprande de destination avec la valeur de la plus large
833

magntude.

834

Assembleur 80x86
SSE4.1+

PMAXSB
Maximum of Packed Signed Byte Integers

Syntaxe
PMAXSB destination, source

Description Cette instruction permet de retourner la valeur maximal de chacun des octets (entier) des paquets contenu dans deux oprandes.

Algorithme
SI destination(7..0) > source(7..0) ALORS destination(7..0) destination(7..0) SINON destination(7..0) source(7..0) FIN SI SI destination(15..8) > source(15..8) ALORS destination(15..8) destination(15..8) SINON destination(15..8) source(15..8) FIN SI SI destination(23..16) > source(23..16) ALORS destination(23..16) destination(23..16) SINON destination(23..16) SRC(23..16) FIN SI SI destination(31..24) > source(31..24) ALORS destination(31..24) destination(31..24) SINON destination(31..24) SRC(31..24) FIN SI SI destination(39..32) > source(39..32) ALORS 835

destination(39..32) destination(39..32) SINON destination(39..32) source(39..32) FIN SI SI destination(47..40) > source(47..40) ALORS destination(47..40) destination(47..40) SINON destination(47..40) source(47..40) FIN SI SI destination(55..48) > source(55..48) ALORS destination(55..48) destination(55..48) SINON destination(55..48) source(55..48) FIN SI SI destination(63..56) > source(63..56) ALORS destination(63..56) destination(63..56) SINON destination(63..56) source(63..56) FIN SI SI destination(71..64) > source(71..64) ALORS destination(71..64) destination(71..64) SINON destination(71..64) source(71..64) FIN SI SI destination(79..72) > source(79..72) ALORS destination(79..72) destination(79..72) SINON destination(79..72) source(79..72) FIN SI SI destination(87..80) > source(87..80) ALORS destination(87..80) destination(87..80) SINON destination(87..80) source(87..80) FIN SI SI destination(95..88) > source(95..88) ALORS destination(95..88) destination(95..88) SINON destination(95..88) source(95..88) FIN SI SI destination(103..96) > source(103..96) ALORS destination(103..96) destination(103..96) 836

SINON destination(103..96) source(103..96) FIN SI SI destination(111..104) > source(111..104) ALORS destination(111..104) destination(111..104) SINON destination(111..104) source(111..104) FIN SI SI destination(119..112) > source(119..112) ALORS destination(119..112) destination(119..112) SINON destination(119..112) source(119..112) FIN SI SI destination(127..120) > source(127..120) ALORS destination(127..120) destination(127..120) SINON destination(127..120) source(127..120) FIN SI

Mnmonique
Instruction PMAXSB xmm1,xmm2/m128 Opcode 66h 0Fh 38h 3Ch /r Description Cette instruction permet de retourner la valeur maximal de chacun des octets (entier) des paquets contenu dans deux oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 152 154.

837

Assembleur 80x86
SSE4.1+

PMAXSD
Maximum of Packed Signed Dword Integers

Syntaxe
PMAXSD destination, source

Description Cette instruction permet de retourner la valeur maximal de chacun des doubles mots des paquets contenu dans deux oprandes.

Algorithme
SI destination(31..0) > source(31..0) ALORS destination(31..0) destination(31..0) SINON destination(31..0) source(31..0) FIN SI SI destination(63..32) > source(63..32) ALORS destination(63..32) destination(63..32) SINON destination(63..32) source(63..32) FIN SI SI destination(95..64) > SRC(95..64) ALORS destination(95..64) destination(95..64) SINON destination(95..64) source(95..64) FIN SI SI destination(127..96) > SRC(127..96) ALORS destination(127..96) destination(127..96) SINON destination(127..96) source(127..96) FIN SI

838

Mnmonique
Instruction PMAXSD xmm1,xmm2/m128 Opcode 66h 0Fh 38h 3Dh /r Description Cette instruction permet de retourner la valeur maximal de chacun des doubles mots des paquets contenu dans deux oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 155 157.

839

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

PMAXSW
Packed Signed Integer Word Maximum

Syntaxe
PMAXSW destination, source

Description Cette instruction permet de retourner la valeur maximal de chacun des mots (entier) des paquets contenu dans deux oprandes.

Algorithme
SI taille de l'oprande = 64 bits ALORS SI destination(0..15) <= source(0..15) ALORS destination(0..15) source(0..15) FIN SI SI destination(16..31) <= source[16..31]) ALORS destination(16..31) source(16..31) FIN SI SI destination(32..47) <= source(32..47) ALORS destination(32..47) source(32..47) FIN SI SI destination(48..63) <= source(48..63) ALORS destination(48..63) source(48..63) FIN SI SINON SI destination(0..15) <= source(0..15) ALORS destination(0..15) source(0..15) FIN SI SI destination(16..31) <= source(16..31) ALORS destination(16..31) source(16..31) 840

FIN SI SI destination(32..47) <= source(32..47) ALORS destination(32..47) source(32..47) FIN SI SI destination(48..63) <= source(48..63) ALORS destination(48..63) source(48..63) FIN SI SI destination(64..79) <= source(64..79) ALORS destination(64..79) source(64..79) FIN SI SI destination(80..95) <= source(80..95) ALORS destination(80..95) source(80..95) FIN SI SI destination(96..111) <= source(96..111) ALORS destination(96..111) source(96..111) FIN SI SI destination(112..127) <= source(112..127) ALORS destination(112..127) source(112..127) FIN SI FIN SI

Mnmonique
Instruction PMAXSW mm1,mm2/m64 Opcode 0Fh EEh /r Description Cette instruction permet de retourner la valeur maximal de chacun des mots (entier) des paquets contenu dans deux oprandes. Cette instruction permet de retourner la valeur maximal de chacun des mots (entier) des paquets contenu dans deux oprandes.

PMAXSW xmm1,xmm2/m128

66h 0Fh EEh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
841

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 158 160.

842

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

PMAXUB
Packed Unsigned Integer Byte Maximum

Syntaxe
PMAXUB destination, source

Description Cette instruction permet de retourner la valeur maximal de chacun des octets des paquets contenu dans deux oprandes.

Algorithme
SI taille de l'oprande = 64 bits ALORS SI destination(7..0) <= source(7..0) ALORS destination(7..0) source(7..0) FIN SI SI destination(8..15) <= source(8..15) ALORS destination(8..15) source(8..15) FIN SI SI destination(16..23) <= source(16..23) ALORS destination(16..23) source(16..23) FIN SI SI destination(24..31) <= source(24..31) ALORS Destination(24..31) Source(24..31) FIN SI SI destination(32..39) <= source(32..39) ALORS Destination(32..39) Source(32..39) FIN SI SI destination(40..47) <= source(40..47) ALORS Destination(40..47) Source(40..47) 843

FIN SI SI destination(48..55) <= source(48..55) ALORS Destination(48..55) Source(48..55) FIN SI SI destination(63..56) <= source(63..56) ALORS destination(63..56) source(63..56) FIN SI SINON SI destination(7..0) <= source(7..0) ALORS destination(7..0) source(7..0) FIN SI SI destination(8..15) <= source(8..15) ALORS destination(8..15) source(8..15) FIN SI SI destination(16..23) <= source(16..23) ALORS destination(16..23) source(16..23) FIN SI SI destination(24..31) <= source(24..31) ALORS destination(24..31) source(24..31) FIN SI SI destination(32..39) <= source(32..39) ALORS destination(32..39) source(32..39) FIN SI SI destination(40..47) <= source(40..47) ALORS destination(40..47) source(40..47) FIN SI SI destination(48..55) <= source(48..55) ALORS destination(48..55) source(48..55) FIN SI SI destination(56..63) <= source(56..63) ALORS destination(56..63) source(56..63) FIN SI SI destination(64..71) <= source(64..71) ALORS destination(64..71) source(64..71) FIN SI SI destination(72..79) <= source(72..79) ALORS destination(72..79) source(72..79) FIN SI SI destination(80..87) <= source(80..87) ALORS destination(80..87) source(80..87) FIN SI 844

SI destination(88..95) <= source(88..95) ALORS destination(88..95) source(88..95) FIN SI SI destination(96..103) <= source(96..103) ALORS destination(96..103) source(96..103) FIN SI SI destination(104..111) <= source(104..111) ALORS destination(104..111) source(104..111) FIN SI SI destination(112..119) <= source(112..119) ALORS destination(112..119) source(112..119) FIN SI SI destination(127..120) <= source(127..120) ALORS (destination(127..120) source(127..120) FIN SI FIN SI

Mnmonique
Instruction PMAXUB mm1,mm2/m64 Opcode 0Fh DEh /r Description Cette instruction permet de retourner la valeur maximal de chacun des octets des paquets contenu dans deux oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 161 163.

845

Assembleur 80x86
SSE4.1+

PMAXUD
Maximum of Packed Unsigned Dword Integers

Syntaxe
PMAXUD destination, source

Description Cette instruction permet de retourner la valeur maximal de chacun des doubles mots (naturel) des paquets contenu dans deux oprandes.

Algorithme
SI destination(31..0) > source(31..0) ALORS destination(31..0) destination(31..0) SINON destination(31..0) source(31..0) FIN SI SI destination(63..32) > source(63..32) ALORS destination(63..32) destination(63..32) SINON destination(63..32) source(63..32) FIN SI SI destination(95..64) > source(95..64) ALORS destination(95..64) destination(95..64) SINON destination(95..64) source(95..64) FIN SI SI destination(127..96) > source(127..96) ALORS destination(127..96) destination(127..96) SINON destination(127..96) source(127..96) FIN SI

846

Mnmonique
Instruction PMAXUD xmm1,xmm2/m128 Opcode 66h 0Fh 38h 3Fh /r Description Cette instruction permet de retourner la valeur maximal de chacun des doubles mots (naturel) des paquets contenu dans deux oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 164 166.

847

Assembleur 80x86
SSE4.1+

PMAXUW
Maximum of Packed Unsigned Word

Syntaxe
PMAXUW destination, source

Description Cette instruction permet de retourner la valeur maximal de chacun des mots (naturel) des paquets contenu dans deux oprandes.

Algorithme
SI destination(15..0) > source(15..0) ALORS destination(15..0) destination(15..0) SINON destination(15..0) source(15..0) FIN SI SI destination(31..16) > source(31..16) ALORS destination(31..16) destination(31..16) SINON destination(31..16) source(31..16) FIN SI SI destination(47..32) > source(47..32) ALORS destination(47..32) destination(47..32) SINON destination(47..32) source(47..32) FIN SI SI destination(63..48) > source(63..48) ALORS destination(63..48) destination(63..48) SINON destination(63..48) source(63..48) FIN SI SI destination(79..64) > source(79..64) ALORS 848

destination(79..64) destination(79..64) SINON destination(79..64) source(79..64) FIN SI SI destination(95..80) > source(95..80) ALORS destination(95..80) destination(95..80) SINON destination(95..80) source(95..80) FIN SI SI destination(111..96) > source(111..96) ALORS destination(111..96) destination(111..96) SINON destination(111..96) source(111..96) FIN SI SI destination(127..112) > source(127..112) ALORS destination(127..112) destination(127..112) SINON destination(127..112) source(127..112) FIN SI

Mnmonique
Instruction PMAXUW xmm1,xmm2/m128 Opcode 66h 0Fh 38h 3Eh /r Description Cette instruction permet de retourner la valeur maximal de chacun des mots (naturel) des paquets contenus dans deux oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 167 169.

849

Assembleur 80x86
SSE4.1+

PMINSB
Minimum of Packed Signed Byte Integers

Syntaxe
PMINSB destination, source

Description Cette instruction permet de retourner la valeur minimal de chacun des octets (entier) des paquets contenu dans deux oprandes.

Algorithme
SI destination(7..0) < source(7..0) ALORS destination(7..0) destination(7..0) SINON destination(7..0) source(7..0) FIN SI SI destination(15..8) < source(15..8) ALORS destination(15..8) destination(15..8) SINON destination(15..8) source(15..8) FIN SI SI destination(23..16) < source(23..16) ALORS destination(23..16) destination(23..16) SINON destination(23..16) source(23..16) FIN SI SI destination(31..24) < source(31..24) ALORS destination(31..24) destination(31..24) SINON destination(31..24) source(31..24) FIN SI SI destination(39..32) < source(39..32) ALORS 850

destination(39..32) destination(39..32) SINON destination(39..32) source(39..32) FIN SI SI destination(47..40) < source(47..40) ALORS destination(47..40) destination(47..40) SINON destination(47..40) source(47..40) FIN SI SI destination(55..48) < source(55..48) ALORS destination(55..48) destination(55..48) SINON destination(55..48) source(55..48) FIN SI SI destination(63..56) < source(63..56) ALORS destination(63..56) destination(63..56) SINON destination(63..56) source(63..56) FIN SI SI destination(71..64) < source(71..64) ALORS destination(71..64) destination(71..64) SINON destination(71..64) source(71..64) FIN SI SI destination(79..72) < source(79..72) ALORS destination(79..72) destination(79..72) SINON destination(79..72) source(79..72) FIN SI SI destination(87..80) < source(87..80) ALORS destination(87..80) destination(87..80) SINON destination(87..80) source(87..80) FIN SI SI destination(95..88) < source(95..88) ALORS destination(95..88) destination(95..88) SINON destination(95..88) source(95..88) FIN SI SI destination(103..96) < source(103..96) ALORS destination(103..96) destination(103..96) 851

SINON destination(103..96) source(103..96) FIN SI SI destination(111..104) < source(111..104) ALORS destination(111..104) destination(111..104) SINON destination(111..104) source(111..104) FIN SI SI destination(119..112) < source(119..112) ALORS destination(119..112) destination(119..112) SINON destination(119..112) source(119..112) FIN SI SI destination(127..120) < source(127..120) ALORS destination(127..120) destination(127..120) SINON destination(127..120) source(127..120) FIN SI

Mnmonique
Instruction PMINSB xmm1,xmm2/m128 Opcode 66h 0Fh 38h 38h /r Description Cette instruction permet de retourner la valeur minimal de chacun des octets (entier) des paquets contenu dans deux oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 170 172.

852

Assembleur 80x86
SSE4.1+

PMINSD
Minimum of Packed Signed Double word

Syntaxe
PMINSD destination, source

Description Cette instruction permet de retourner la valeur minimal de chacun des doubles mots des paquets contenu dans deux oprandes.

Algorithme
SI destination(31..0) < source(31..0) ALORS destination(31..0) destination(31..0) SINON destination(31..0) source(31..0) FIN SI SI destination(63..32) < source(63..32) ALORS destination(63..32) destination(63..32) SINON destination(63..32) source(63..32) FIN SI SI destination(95..64) < source(95..64) ALORS destination(95..64) destination(95..64) SINON destination(95..64) source(95..64) FIN SI SI destination(127..96) < source(127..96) ALORS destination(127..96) destination(127..96) SINON destination(127..96) source(127..96) FIN SI

853

Mnmonique
Instruction PMINSD xmm1,xmm2/m128 Opcode 66h 0Fh 38h 39h /r Description Cette instruction permet de retourner la valeur minimal de chacun des doubles mots des paquets contenu dans deux oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 173 175.

854

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

PMINSW
Packed Signed Integer Word Minimum

Syntaxe
PMINSW destination, source

Description Cette instruction permet de retourner la valeur minimal de chacun des mots des paquets contenu dans deux oprandes.

Algorithme
SI taille de l'oprande = 64 bits ALORS SI destination(0..15) >= source(0..15) ALORS destination(0..15) source(0..15) FIN SI SI destination(16..31) >= source[16..31]) ALORS destination(16..31) source(16..31) FIN SI SI destination(32..47) >= source(32..47) ALORS destination(32..47) source(32..47) FIN SI SI destination(48..63) >= source(48..63) ALORS destination(48..63) source(48..63) FIN SI SINON SI destination(0..15) >= source(0..15) ALORS destination(0..15) source(0..15) FIN SI SI destination(16..31) >= source(16..31) ALORS destination(16..31) source(16..31) 855

FIN SI SI destination(32..47) >= source(32..47) ALORS destination(32..47) source(32..47) FIN SI SI destination(48..63) >= source(48..63) ALORS destination(48..63) source(48..63) FIN SI SI destination(64..79) >= source(64..79) ALORS destination(64..79) source(64..79) FIN SI SI destination(80..95) >= source(80..95) ALORS destination(80..95) source(80..95) FIN SI SI destination(96..111) >= source(96..111) ALORS destination(96..111) source(96..111) FIN SI SI destination(112..127) >= source(112..127) ALORS destination(112..127) source(112..127) FIN SI

Mnmonique
Instruction PMINSW mm1,mm2/m64 Opcode 0Fh EAh /r Description Cette instruction permet de retourner la valeur minimal de chacun des mots des paquets contenu dans deux oprandes. Cette instruction permet de retourner la valeur minimal de chacun des mots des paquets contenu dans deux oprandes.

PMINSW xmm1,xmm2/m128

66h 0Fh EAh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction

856

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 176 178.

857

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

PMINUB
Packed Unsigned Integer Byte Minimum

Syntaxe
PMINUB destination, source

Description Cette instruction permet de retourner la valeur minimal de chacun des octets des paquets contenu dans deux oprandes.

Algorithme
SI taille de l'oprande = 64 bits ALORS SI destination(7..0) >= source(7..0) ALORS destination(7..0) source(7..0) FIN SI SI destination(8..15) >= source(8..15) ALORS destination(8..15) source(8..15) FIN SI SI destination(16..23) >= source(16..23) ALORS destination(16..23) source(16..23) FIN SI SI destination(24..31) >= source(24..31) ALORS Destination(24..31) Source(24..31) FIN SI SI destination(32..39) >= source(32..39) ALORS Destination(32..39) Source(32..39) FIN SI SI destination(40..47) >= source(40..47) ALORS Destination(40..47) Source(40..47) 858

FIN SI SI destination(48..55) >= source(48..55) ALORS Destination(48..55) Source(48..55) FIN SI SI destination(63..56) >= source(63..56) ALORS destination(63..56) source(63..56) FIN SI SINON SI destination(7..0) >= source(7..0) ALORS destination(7..0) source(7..0) FIN SI SI destination(8..15) >= source(8..15) ALORS destination(8..15) Source(8..15) FIN SI SI destination(16..23) >= source(16..23) ALORS destination(16..23) source(16..23) FIN SI SI destination(24..31) >= source(24..31) ALORS destination(24..31) source(24..31) FIN SI SI destination(32..39) >= source(32..39) ALORS destination(32..39) source(32..39) FIN SI SI destination(40..47) >= source(40..47) ALORS destination(40..47) source(40..47) FIN SI SI destination(48..55) >= source(48..55) ALORS destination(48..55) source(48..55) FIN SI SI destination(56..63) >= source(56..63) ALORS destination(56..63) source(56..63) FIN SI SI destination(64..71) >= source(64..71) ALORS destination(64..71) source(64..71) FIN SI SI destination(72..79) >= source(72..79) ALORS destination(72..79) source(72..79) FIN SI SI destination(80..87) >= source(80..87) ALORS destination(80..87) source(80..87) FIN SI 859

SI destination(88..95) >= source(88..95) ALORS destination(88..95) source(88..95) FIN SI SI destination(96..103) >= source(96..103) ALORS destination(96..103) source(96..103) FIN SI SI destination(104..111) >= source(104..111) ALORS destination(104..111) source(104..111) FIN SI SI destination(112..119) >= source(112..119) ALORS destination(112..119) source(112..119) FIN SI SI destination(127..120) >= source(127..120) ALORS (destination(127..120) source(127..120) FIN SI FIN SI

Mnmonique
Instruction PMINUB mm1,mm2/m64 Opcode 0Fh DAh /r Description Cette instruction permet de retourner la valeur minimal de chacun des octets des paquets contenu dans deux oprandes. Cette instruction permet de retourner la valeur minimal de chacun des octets des paquets contenu dans deux oprandes.

PMINUB xmm1,xmm2/m128

66h 0Fh DAh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 179 181.

860

Assembleur 80x86
SSE4.1+

PMINUD
Minimum of Packed Unsigned Doubleword

Syntaxe
PMINUD destination, source

Description Cette instruction permet de retourner la valeur minimal de chacun des doubles mots (naturel) des paquets contenu dans deux oprandes.

Algorithme
SI destination(31..0) < source(31..0) ALORS destination(31..0) destination(31..0) SINON destination(31..0) source(31..0) FIN SI SI destination(63..32) < source(63..32) ALORS destination(63..32) destination(63..32) SINON destination(63..32) source(63..32) FIN SI SI destination(95..64) < source(95..64) ALORS destination(95..64) destination(95..64) SINON destination(95..64) source(95..64) FIN SI SI destination(127..96) < source(127..96) ALORS destination(127..96) destination(127..96) SINON destination(127..96) source(127..96) FIN SI

861

Mnmonique
Instruction PMINUD xmm1,xmm2/m128 Opcode 66h 0Fh 38h 3Bh /r Description Cette instruction permet de retourner la valeur minimal de chacun des doubles mots (naturel) des paquets contenu dans deux oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 182 184.

862

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

PMOVMSKB
Move Byte Mask

Syntaxe
PMOVMSKB destination, source

Description Cette instruction permet de copis les masques de chacun des octets d'un paquet contenu dans une oprande.

Algorithme
SI taille de l'oprande = 64 bits ALORS destination(0) source(7) destination(1) source(15) destination(2) source(23) destination(3) source(31) destination(4) source(39) destination(5) source(47) destination(6) source(55) destination(7) source(63) destination(8..31) 0 SINON destination(0) source(7) destination(1) source(15) destination(2) source(23) destination(3) source(31) destination(4) source(39) destination(5) source(47) destination(6) source(55) destination(7) source(63) 863

destination(8) source(71) destination(9) source(79) destination(10) source(87) destination(11) source(95) destination(12) source(103) destination(13) source(111) destination(14) source(119) destination(15) source(127) destination(16..31) 0 FIN SI

Mnmonique
Instruction PMOVMSKB r32,mm Opcode 0Fh D7h /r Description Cette instruction permet de copis les masques de chacun des octets d'un paquet contenu dans une oprande. Cette instruction permet de copis les masques de chacun des octets d'un paquet contenu dans une oprande. Cette instruction permet de copis les masques de chacun des octets d'un paquet contenu dans une oprande.

PMOVMSKB r64,mm

(REX.W) 0Fh D7h /r

PMOVMSKB reg,xmm

66h 0Fh D7h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 188 190.

864

Assembleur 80x86
SSE4.1+

PMOVSXBD
Packed Move with Sign Extend

Syntaxe
PMOVSXBD destination, source

Description Cette instruction permet d'tendre les signes du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 32 bits dans l'oprande de destination.

Algorithme
destination(31..0) SignExtend(source(7..0)) destination(63..32) SignExtend(source(15..8)) destination(95..64) SignExtend(source(23..16)) destination(127..96) SignExtend(source(31..24))

Mnmonique
Instruction PMOVSXBD xmm1,xmm2/m32 Opcode 66h 0Fh 38h 21h /r Description Cette instruction permet d'tendre les signes du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 32 bits dans l'oprande de destination.

Rfrences

865

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 191 194.

866

Assembleur 80x86
SSE4.1+

PMOVSXBQ
Packed Move with Sign Extend

Syntaxe
PMOVSXBQ destination, source

Description Cette instruction permet d'tendre les signes du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

Algorithme
destination(63..0) SignExtend(source(7..0)) destination(127..64) SignExtend(source(15..8))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les signes du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

PMOVSXBQ xmm1,xmm2/m16 66h 0Fh 38h 22h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 191 194.
867

Assembleur 80x86
SSE4.1+

PMOVSXBW
Packed Move with Sign Extend

Syntaxe
PMOVSXBW destination, source

Description Cette instruction permet d'tendre les signes du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 16 bits dans l'oprande de destination.

Algorithme
destination(15..0) SignExtend(source(7..0)) destination(31..16) SignExtend(source(15..8)) destination(47..32) SignExtend(source(23..16)) destination(63..48) SignExtend(source(31..24)) destination(79..64) SignExtend(source(39..32)) destination(95..80) SignExtend(source(47..40)) destination(111..96) SignExtend(source(55..48)) destination(127..112) SignExtend(source(63..56))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les signes du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 16 bits dans l'oprande de destination.

PMOVSXBW xmm1,xmm2/m64 66h 0Fh 38h 20h /r

868

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 191 194.

869

Assembleur 80x86
SSE4.1+

PMOVSXDQ
Packed Move with Sign Extend

Syntaxe
PMOVSXDQ destination, source

Description Cette instruction permet d'tendre les signes du paquet des entiers de 32 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

Algorithme
DEST(63..0) SignExtend(SRC(31..0)) DEST(127..64) SignExtend(SRC(63..32))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les signes du paquet des entiers de 32 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

PMOVSXDQ xmm1,xmm2/m64 66h 0Fh 38h 25h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 148 151.
870

Assembleur 80x86
SSE4.1+

PMOVSXWD
Packed Move with Sign Extend

Syntaxe
PMOVSXWD destination, source

Description Cette instruction permet d'tendre les signes du paquet des entiers de 16 bits de la partie basse de l'oprande source en entiers 32 bits dans l'oprande de destination.

Algorithme
destination(31..0) SignExtend(source(15..0)) destination(63..32) SignExtend(source(31..16)) destination(95..64) SignExtend(source(47..32)) destination(127..96) SignExtend(source(63..48))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les signes du paquet des entiers de 16 bits de la partie basse de l'oprande source en entiers 32 bits dans l'oprande de destination.

PMOVSXWD xmm1,xmm2/m64 66 0f 38 23 /r

Rfrences

871

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 191 194.

872

Assembleur 80x86
SSE4.1+

PMOVSXWQ
Packed Move with Sign Extend

Syntaxe
PMOVSXWQ destination, source

Description Cette instruction permet d'tendre les signes du paquet des entiers de 16 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

Algorithme
destination(63..0) SignExtend(source(15..0)) destination(127..64) SignExtend(source(31..16))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les signes du paquet des entiers de 16 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

PMOVSXWQ xmm1,xmm2/m32 66h 0Fh 38h 24h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 191 194.
873

Assembleur 80x86
SSE4.1+

PMOVZXBD
Packed Move with Zero Extend

Syntaxe
PMOVZXBD destination, source

Description Cette instruction permet d'tendre les zros du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 32 bits dans l'oprande de destination.

Algorithme
destination(31..0) ZeroExtend(source(7..0)) destination(63..32) ZeroExtend(source(15..8)) destination(95..64) ZeroExtend(source(23..16)) destination(127..96) ZeroExtend(source(31..24))

Mnmonique
Instruction PMOVZXBD xmm1,xmm2/m32 Opcode 66h 0Fh 38h 31h /r Description Cette instruction permet d'tendre les zros du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 32 bits dans l'oprande de destination.

Rfrences

874

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 195 197.

875

Assembleur 80x86
SSE4.1+

PMOVZXBQ
Packed Move with Zero Extend

Syntaxe
PMOVZXBQ destination, source

Description Cette instruction permet d'tendre les zros du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

Algorithme
destination(63..0) ZeroExtend(source(7..0)) destination(127..64) ZeroExtend(source(15..8))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les zros du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

PMOVZXBQ xmm1,xmm2/m16 66h 0Fh 38h 32h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 195 197.
876

Assembleur 80x86
SSE4.1+

PMOVZXBW
Packed Move with Zero Extend

Syntaxe
PMOVZXBW destination, source

Description Cette instruction permet d'tendre les zros du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 16 bits dans l'oprande de destination.

Algorithme
destination(15..0) ZeroExtend(source(7..0)) destination(31..16) ZeroExtend(source(15..8)) destination(47..32) ZeroExtend(source(23..16)) destination(63..48) ZeroExtend(source(31..24)) destination(79..64) ZeroExtend(source(39..32)) destination(95..80) ZeroExtend(source(47..40)) destination(111..96) ZeroExtend(source(55..48)) destination(127..112) ZeroExtend(source(63..56))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les zros du paquet des entiers de 8 bits de la partie basse de l'oprande source en entiers 16 bits dans l'oprande de destination.

PMOVZXBW xmm1,xmm2/m64 66h 0Fh 38h 30h /r

877

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 195 197.

878

Assembleur 80x86
SSE4.1+

PMOVZXDQ
Packed Move with Zero Extend

Syntaxe
PMOVZXDQ destination, source

Description Cette instruction permet d'tendre les zros du paquet des entiers de 32 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

Algorithme
destination(63..0) ZeroExtend(source(31..0)) destination(127..64) ZeroExtend(source(63..32))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les zros du paquet des entiers de 32 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

PMOVZXDQ xmm1,xmm2/m64 66h 0Fh 38h 35h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 195 197.
879

Assembleur 80x86
SSE4.1+

PMOVZXWD
Packed Move with Zero Extend

Syntaxe
PMOVZXWD destination, source

Description Cette instruction permet d'tendre les zros du paquet des entiers de 16 bits de la partie basse de l'oprande source en entiers 32 bits dans l'oprande de destination.

Algorithme
destination(31..0) ZeroExtend(source(15..0)) destination(63..32) ZeroExtend(source(31..16)) destination(95..64) ZeroExtend(source(47..32)) destination(127..96) ZeroExtend(source(63..48))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les zros du paquet des entiers de 16 bits de la partie basse de l'oprande source en entiers 32 bits dans l'oprande de destination.

PMOVZXWD xmm1,xmm2/m64 66h 0Fh 38h 33h /r

Rfrences

880

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 195 197.

881

Assembleur 80x86
SSE4.1+

PMOVZXWQ
Packed Move with Zero Extend

Syntaxe
PMOVZXWQ destination, source

Description Cette instruction permet d'tendre les zros du paquet des entiers de 16 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

Algorithme
destination(63..0) ZeroExtend(source(15..0)) destination(127..64) ZeroExtend(source(31..16))

Mnmonique
Instruction Opcode Description Cette instruction permet d'tendre les zros du paquet des entiers de 16 bits de la partie basse de l'oprande source en entiers 64 bits dans l'oprande de destination.

PMOVZXWQ xmm1,xmm2/m32 66h 0Fh 38h 34h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 195 197.
882

Assembleur 80x86
SSE4.1+

PMULDQ
Multiply Packed Signed Dword Integers

Syntaxe
PMULDQ destination, source

Description Cette instruction permet d'effectuer la multiplication de deux valeurs signs de deux paires de double mots entier et entrepose les rsultats dans un oprande en paquet de 64 bits.

Algorithme
destination(63..0) destination(31..0) x source(31..0) destination(127..64) destination(95..64) x source(95..64)

Mnmonique
Instruction PMULDQ xmm1,xmm2/m128 Opcode 66h 0Fh 38h 28h /r Description Cette instruction permet d'effectuer la multiplication de deux valeurs signs de deux paires de double mots entier et entrepose les rsultats dans un oprande en paquet de 64 bits.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
883

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 199 201.

884

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PMULHRIW mmi, source

PMULHRIW
Packed Multiply High with Rounding, result to Implied Register

Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination vaut 0 et effectue se traitement pour chacun des 8 octets du paquet.

Algorithme mmi(15..0) (mmi(15..0) x source(15..0) + 00004000h)(30..15) mmi(31..16) (mmi(31..16) x source(31..16) + 00004000h)(30..15) mmi(47..32) (mmi(47..32) x source(47..32) + 00004000h)(30..15) mmi(63..48) (mmi(63..48) x source(63..48) + 00004000h)(30..15)

Mnmonique Instruction PMULHRIW mm,mm/m64 Opcode 0Fh 5Dh /r Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination vaut 0 et effectue se traitement pour chacun des 8 octets du paquet.

885

Assembleur 80x86
SSSE3+

PMULHRSW
Packed Multiply High with Round and Scale

Syntaxe
PMULHRSW destination, source

Description Cette instruction permet d'effectuer multiplication vertical de chaque entier de 16 bits de l'oprande de destination avec l'oprande source et produit un rsultat d'entiers de 32 bits dans l'oprande de destination.

Algorithme
SI taille de l'oprande = 64 bits ALORS temp0(31..0) INT32 ((destination(15..0) x source(15..0)) >> 14) + 1 temp1(31..0) INT32 ((destination(31..16) x source(31..16)) >> 14) + 1 temp2(31..0) INT32 ((destination(47..32) x source(47..32)) >> 14) + 1 temp3(31..0) INT32 ((destination(63..48) x source(63..48)) >> 14) + 1 destination(15..0) temp0(16..1) destination(31..16) temp1(16..1) destination(47..32) temp2(16..1) destination(63..48) temp3(16..1) SINON SI taille de l'oprande = 128 bits ALORS temp0(31..0) INT32 ((destination(15..0) x source(15..0)) >> 14) + 1 temp1(31..0) INT32 ((destination(31..16) x source(31..16)) >> 14) + 1 temp2(31..0) INT32 ((destination(47..32) x source(47..32)) >> 14) + 1 temp3(31..0) INT32 ((destination(63..48) x source(63..48)) >> 14) + 1 temp4(31..0) INT32 ((destination(79..64) x source(79..64)) >> 14) + 1 temp5(31..0) INT32 ((destination(95..80) x source(95..80)) >> 14) + 1 temp6(31..0) INT32 ((destination(111..96) x source(111..96)) >> 14) + 1 temp7(31..0) INT32 ((destination(127..112) x source(127..112)) >> 14) + 1 destination(15..0) temp0(16..1) destination(31..16) temp1(16..1) 886

destination(47..32) temp2(16..1) destination(63..48) temp3(16..1) destination(79..64) temp4(16..1) destination(95..80) temp5(16..1) destination(111..96) temp6(16..1) destination(127..112) temp7(16..1) FIN SI

Mnmonique
Instruction PMULHRSW mm1,mm2/m64 Opcode 0Fh 38h 0Bh /r Description Cette instruction permet d'effectuer multiplication vertical de chaque entier de 16 bits de l'oprande de destination avec l'oprande source et produit un rsultat d'entiers de 32 bits dans l'oprande de destination. Cette instruction permet d'effectuer multiplication vertical de chaque entier de 16 bits de l'oprande de destination avec l'oprande source et produit un rsultat d'entiers de 32 bits dans l'oprande de destination.

PMULHRSW xmm1,xmm2/m128 66h 0Fh 38h 0Bh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 201 203.

887

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PMULHRW destination, source

PMULHRW
Packed Multiply High with Rounding

Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination vaut 0 et effectue se traitement pour chacun des 8 octets du paquet.

Algorithme destination(15..0) (destination(15..0) x source(15..0) + 00004000h)(30..15) destination(31..16) (destination(31..16) x source(31..16) + 00004000h)(30..15) destination(47..32) (destination(47..32) x source(47..32) + 00004000h)(30..15) destination(63..48) (destination(63..48) x source(63..48) + 00004000h)(30..15)

Mnmonique Instruction PMULHRW mm,mm/m64 Opcode 0Fh 59h /r Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination vaut 0 et effectue se traitement pour chacun des 8 octets du paquet.

888

Assembleur 80x86
Pentium III (KNI/MMX2)+

PMULHUW
Packed Multiply high unsigned word

Syntaxe
PMULHUW destination, source

Description Cette instruction permet d'effectuer la multiplication de la partie haute de chacun des entiers des 2 paquets d'oprandes.

Algorithme
temp1 destination(15..0) x source(15..0) temp2 destination(31..16) x source(31..16) temp3 destination(47..32) x source(47..32) temp4 destination(63..48) x source(63..48) destination(15..0) temp1(31..16) destination(31..16) temp2(31..16) destination(47..32) temp3(31..16) destination(63..48) temp4(31..16)

Mnmonique
Instruction PMULHUW mm,m64 Opcode 0Fh E4h /r Description Cette instruction permet d'effectuer la multiplication de la partie haute de chacun des entiers des 2 paquets d'oprandes.

889

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 204 207.

890

Assembleur 80x86
INTEL Pentium Pro+

PMULHW
Packed Multiply High by Words

Syntaxe
PMULHW destination, source

Description Cette instruction permet d'effectuer la multiplication de la partie haute de chacun des mots des 2 paquets d'oprandes.

Algorithme
destination(15..0) (destination(15..0) x source(15..0)) (31..16) destination(31..16) (destination(31..16) x source(31..16)) (31..16) destination(47..32) (destination(47..32) x source(47..32)) (31..16) destination(63..48) (destination(63..48) x source(63..48)) (31..16)

Mnmonique
Instruction PMULHW mm,m64 Opcode 0Fh E5h /r Description Cette instruction permet d'effectuer la multiplication de la partie haute de chacun des mots des 2 paquets d'oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
891

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 208 211.

892

Assembleur 80x86
SSE4.1+

PMULLD
Multiply Packed Signed Dword Integers and Store Low

Syntaxe
PMULLD destination, source

Description Cette instruction permet d'effectuer la multiplication de la partie basse de chacun des double mots des 2 paquets d'oprandes.

Algorithme
Temp0(63..0) destination(31..0) x source(31..0) Temp1(63..0) destination(63..32) x source(63..32) Temp2(63..0) destination(95..64) x source(95..64) Temp3(63..0) destination(127..96) x source(127..96) destination(31..0) Temp0(31..0) destination(63..32) Temp1(31..0) destination(95..64) Temp2(31..0) destination(127..96) Temp3(31..0)

Mnmonique
Instruction PMULLD xmm1,xmm2/m128 Opcode 66h 0Fh 38h 40h /r Description Cette instruction permet d'effectuer la multiplication de la partie basse de chacun des double mots des 2 paquets d'oprandes.

893

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 212 214.

894

Assembleur 80x86
INTEL Pentium Pro+

PMULLW
Packed Multiply Low by Words

Syntaxe
PMULLW destination, source

Description Cette instruction permet d'effectuer la multiplication de la partie basse de chacun des mots des 2 paquets d'oprandes.

Algorithme
destination(15..0) (destination(15..0) x source(15..0)) (15..0) destination(31..16) (destination(31..16) x source(31..16)) (15..0) destination(47..32) (destination(47..32) x source(47..32)) (15..0) destination(63..48) (destination(63..48) x source(63..48)) (15..0)

Mnmonique
Instruction PMULLW mm,m64 Opcode 0Fh D5h /r Description Cette instruction permet d'effectuer la multiplication de la partie basse de chacun des mots des 2 paquets d'oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
895

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 215 218.

896

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PMULUDQ
Multiply Packed Unsigned Doubleword Integers

Syntaxe
PMULUDQ destination, source

Description Cette instruction permet d'effectuer la multiplication de paquets d'oprandes de double mots.

Algorithme
SI taille de l'oprande = 64 bits ALORS destination(0..63) destination(0..31) x source(0..31) SINON destination(0..63) destination(0..31) x source(0..31) destination(64..127) destination(64..95) x source(64..95) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la multiplication de paquets d'oprandes de double mots. Cette instruction permet d'effectuer la multiplication de paquets d'oprandes de double mots.

PMULUDQ mm1, mm2/m64

0Fh F4h /r

PMULUDQ xmm1, xmm2/m128 66h 0Fh F4h /r

897

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 219 221.

898

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PMVGEZB destination, source

PMVGEZB
Packed Conditional Move Great Zero Byte

Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination est suprieur 0 et effectue se traitement pour chacun des 8 octets du paquet.

Algorithme SI destination(7..0) >= 0 ALORS destination(7..0) source(7..0) FIN SI SI destination(15..8) >= 0 ALORS destination(15..8) source(15..8) FIN SI SI destination(23..16) >= 0 ALORS destination(23..16) source(23..16) FIN SI SI destination(31..24) >= 0 ALORS destination(31..24) source(31..24) FIN SI SI destination(39..32) >= 0 ALORS destination(39..32) source(39..32) FIN SI SI destination(47..40) >= 0 ALORS destination(47..40) source(47..40) FIN SI SI destination(55..48) >= 0 ALORS destination(55..48) source(55..48) FIN SI SI destination(63..56) >= 0 ALORS destination(63..56) source(63..56) FIN SI

899

Mnmonique Instruction PMVGEZB mm,m64 Opcode 0Fh 5Ch /r Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination est suprieur 0 et effectue se traitement pour chacun des 8 octets du paquet.

900

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PMVLZB destination, source

PMVLZB
Packed Conditional Move Less Zero Byte

Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination est infrieur 0 et effectue se traitement pour chacun des 8 octets du paquet.

Algorithme SI destination(7..0) < 0 ALORS destination(7..0) source(7..0) FIN SI SI destination(15..8) < 0 ALORS destination(15..8) source(15..8) FIN SI SI destination(23..16) < 0 ALORS destination(23..16) source(23..16) FIN SI SI destination(31..24) < 0 ALORS destination(31..24) source(31..24) FIN SI SI destination(39..32) < 0 ALORS destination(39..32) source(39..32) FIN SI SI destination(47..40) < 0 ALORS destination(47..40) source(47..40) FIN SI SI destination(55..48) < 0 ALORS destination(55..48) source(55..48) FIN SI SI destination(63..56) < 0 ALORS destination(63..56) source(63..56) FIN SI

901

Mnmonique Instruction PMVLZB mm,m64 Opcode 0Fh 5Bh /r Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination est infrieur 0 et effectue se traitement pour chacun des 8 octets du paquet.

902

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PMVNZB destination, source

PMVNZB
Packed Conditional Move Not Zero Byte

Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprnade source dans l'oprande de destination si l'octet de l'oprande destination ne vaut pas 0 et effectue se traitement pour chacun des 8 octets du paquet.

Algorithme SI destination(7..0) <> 0 ALORS destination(7..0) source(7..0) FIN SI SI destination(15..8) <> 0 ALORS destination(15..8) source(15..8) FIN SI SI destination(23..16) <> 0 ALORS destination(23..16) source(23..16) FIN SI SI destination(31..24) <> 0 ALORS destination(31..24) source(31..24) FIN SI SI destination(39..32) <> 0 ALORS destination(39..32) source(39..32) FIN SI SI destination(47..40) <> 0 ALORS destination(47..40) source(47..40) FIN SI SI destination(55..48) <> 0 ALORS destination(55..48) source(55..48) FIN SI SI destination(63..56) <> 0 ALORS destination(63..56) source(63..56) FIN SI

903

Mnmonique Instruction PMVNZB mm,mm/m64 Opcode 0Fh 5Ah /r Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprnade source dans l'oprande de destination si l'octet de l'oprande destination ne vaut pas 0 et effectue se traitement pour chacun des 8 octets du paquet.

904

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PMVZB mmi, source

PMVZB
Packed Conditional Move Zero Byte

Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination vaut 0 et effectue se traitement pour chacun des 8 octets du paquet.

Algorithme SI mmi(7..0) = 0 ALORS mmi(7..0) source(7..0) FIN SI SI mmi(15..8) = 0 ALORS mmi(15..8) source(15..8) FIN SI SI mmi(23..16) = 0 ALORS mmi(23..16) source(23..16) FIN SI SI mmi(31..24) = 0 ALORS mmi(31..24) source(31..24) FIN SI SI mmi(39..32) = 0 ALORS mmi(39..32) source(39..32) FIN SI SI mmi(47..40) = 0 ALORS mmi(47..40) source(47..40) FIN SI SI mmi(55..48) = 0 ALORS mmi[55..48] source(55..48) FIN SI SI mmi(63..56) = 0 ALORS mmi(63..56) source(63..56) FIN SI

905

Mnmonique Instruction PMVZB mm,m64 Opcode 0Fh 58h /r Description Cette instruction permet de copier l'octet de paquet correspondant de l'oprande source dans l'oprande de destination si l'octet de l'oprande destination vaut 0 et effectue se traitement pour chacun des 8 octets du paquet.

906

Assembleur 80x86 INTEL 8088+

POP Pop Value Of Stack

Syntaxe
POP oprande

Description Cette instruction permet de dsempiler de la pile une mot ou un double mot et la met dans une oprande.

Algorithme
SI taille de l'adresse de pile = 32 bits ALORS SI taille de oprande = 32 bits ALORS oprande SS:ESP ESP ESP + 4 SINON oprande SS:ESP ESP ESP + 2 FIN SI SINON SI taille de l'oprande = 16 bits ALORS oprande SS:SP SP SP + 2 SINON oprande SS:SP SP SP + 4 FIN SI FIN SI

Mnmonique

907

Instruction

Opcode

Description Dsempile du sommet de la pile une valeur et la met dans un emplacement mmoire ou registre 16 bits. Dsempile du sommet de la pile une valeur et la met dans un emplacement mmoire ou registre 32 bits. Il n'y a pas de prfix en mode 64 bits. Dsempile du sommet de la pile une valeur et la met dans un emplacement mmoire ou registre 64 bits. Dsempile du sommet de la pile une valeur et la met dans le registre 16 bits. Dsempile du sommet de la pile une valeur et la met dans un registre 32 bits. Il n'y a pas de prfix en mode 64 bits. Dsempile du sommet de la pile une valeur et la met dans un registre 64 bits. Dsempile du sommet de la pile une valeur et la met dans le registre DS. Invalide en mode 64 bits. Dsempile du sommet de la pile une valeur et la met dans le registre ES. Invalide en mode 64 bits.

POP reg/mem16

8Fh /0

POP reg/mem32

8Fh /0

POP reg/mem64

8Fh /0

POP reg16

58h +rw

POP reg32

58h +rd

POP reg64

58h +rq

POP DS

1Fh

POP ES

07h

908

POP SS

17h

Dsempile du sommet de la pile une valeur et la met dans le registre SS. Invalide en mode 64 bits. Dsempile du sommet de la pile une valeur et la met dans le registre FS. Dsempile du sommet de la pile une valeur et la met dans le registre GS.

POP FS

0Fh A1h

POP GS

0Fh A9h

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Les instructions POP DS, POP ES ou POP SS sont excuts en mode 64 bits. Les registres DS, ES, FS ou GS sont chargs dans un slecteur de segment non-nulle et le segment est marqu non prsent. Une adresse mmoire dpasse la limite du segment de

#UD(Opcode invalide)

#NP(Slecteur)

#SS(Pile)

909

pile ou n'est pas canonique Le registre SS est charg avec un slecteur nonnulle et le segment est marqu non prsent. Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Un registre de segment est charg, mais le descripteur de segment dpasse la

#SS(Slecteur)

#GP(Protection gnral)

#GP(Slecteur)

910

limite de la table du descripteur. X Un registre de segment est charg et le bit TI de slecteur de segment est fix, mais le slecteur LDT est un slecteur nulle. Le registre SS est charg avec un slecteur de segment nulle dans un mode non 64 bits ou avec CPL = 3. Le registre SS est charg et le slecteur de segment RPL et le descripteur de segment DPL n'est pas gale au CPL. Le registre SS est charg et le segment pointe dans un segment

911

de donnes non crivable. X Le registre DS, ES, FS ou GS est charg et le segment pointe sur des donnes ou un segment de code nonconforme, mais le RPL ou CPL est suprieur au DPL. Le registre DS, ES, FS ou GS est charg et le segment ne pointe pas sur un segment de donnes ou un segment de code en lecture. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est

#PF(Faute de page)

#AC(Vrifie l'alignement)

912

effectu quand une vrification d'alignement est activ

Voir Instruction assembleur 80x86 Instruction

galement PUSH

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 825 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 412 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 222 228. 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 185 186.

913

Assembleur 80x86 INTEL 80286+

POPA Pop All General Registers

Syntaxe
POPA

Description Cette instruction permet de dsempiler de la pile respectivement les registres DI, SI, BP, SP, BX, DX, CX et AX.

Algorithme
DI SS:SP SP SP + 2 SI SS:SP SP SP + 2 BP SS:SP SP SP + 2 * Ne depile jamais le SP SP SP + 2 BX SS:SP SP SP + 2 DX SS:SP SP SP + 2 CX SS:SP SP SP + 2 AX SS:SP SP SP + 2

Mnmonique
Instruction Opcode Description

914

POPA

61h

Dsempile les registres DI, SI, BP, SP, BX, DX, CX et AX. Invalide en mode 64 bits.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Cette instructions est excut en mode 64 bits. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#UD(Opcode invalide)

#SS(Pile)

#PF(Faute de page)

#AC(Vrifie l'alignement)

915

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement PUSHA PUSHAD

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 826 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 229 231. 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 187.

916

Assembleur 80x86 INTEL 80386+

POPAD Pop All General Registers Double

Syntaxe
POPAD

Description Cette instruction permet de dsempiler de la pile respectivement les registres EDI, ESI, EBP, ESP, EBX, EDX, ECX et EAX.

Algorithme
EDI SS:(E)SP (E)SP (E)SP + 2 ESI SS:(E)SP (E)SP (E)SP + 2 EBP SS:(E)SP (E)SP (E)SP + 2 * Ne depile jamais le ESP (E)SP (E)SP + 2 EBX SS:(E)SP (E)SP (E)SP + 2 EDX SS:(E)SP (E)SP (E)SP + 2 ECX SS:(E)SP (E)SP (E)SP + 2 EAX SS:(E)SP (E)SP (E)SP + 2

Mnmonique
Instruction Opcode Description

917

POPAD

61h

Dsempile les registres EDI, ESI, EBP, ESP, EBX, EDX, ECX et EAX. Invalide en mode 64 bits.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Cette instructions est excut en mode 64 bits. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#UD(Opcode invalide)

#SS(Pile)

#PF(Faute de page)

#AC(Vrifie l'alignement)

918

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement PUSHA PUSHAD

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 826 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 229 231. 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 187.

919

Assembleur 80x86
AMD K10 (SSE4a)+

POPCNT
Bit Population Count

Syntaxe
POPCNT regdest, source

Description Cette instruction permet de compter le nombre de bits 1 que possde une oprande source et place le rsultat dans un registre destinataire.

Algorithme
Count 0 BOUCLE POUR i 0 JUSQU'A taille de l'oprande SAUT 1 SI source(i) = 1 ALORS Count Count + 1 FIN SI FIN BOUCLE DEST Count

Mnmonique
Instruction Opcode Description Compte les 1 dans les registres ou mmoire 16 bits. Compte les 1 dans les registres ou mmoire 32 bits.

POPCNT reg16, reg/mem16

F3h 0Fh B8h /r

POPCNT reg32, reg/mem32

F3h 0Fh B8h /r

920

POPCNT reg64, reg/mem64

F3h 0Fh B8h /r

Compte les 1 dans les registres ou mmoire 32 bits.

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description Cette instruction n'est pas support, comme indiqu par le bit 23 du registre ECX de la fonction 0000_00001h de l'instruction CPUID. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique

#UD(Opcode invalide) X

#SS(Pile)

#GP(Protection gnral)

921

Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement BSF BSR LZCNT

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 232 232.

922

Assembleur 80x86 INTEL 8088+

POPF Pop Flags

Syntaxe
POPF

Description Cette instruction permet de dsempiler de la pile le registre 16 bits de drapeau contenant les indicateurs d'tat.

Algorithme
Registre de drapeaux SS:(E)SP (E)SP (E)SP + 2

Mnmonique
Instruction Opcode Description Dsempile le mot de la pile et la met dans le registres des drapeaux (FLAGS).

POPF

9Dh

Exceptions
Message #SS(Pile noncanonique) Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la

923

limite du segment de pile ou n'est pas canonique #GP(Protection gnral) X Le niveau de prvilge d'entre/sortie est infrieur 3 et CR4.VME vaut 0. Le niveau de prvilge d'entre/sortie est infrieur 3 et une oprande est de taille de 32 bits. Le niveau de prvilge d'entre/sortie est infrieur 3 et les bits EFLAGS.VIP et le nouveau EFLAGS.IF valent 1. Le niveau de prvilge d'entre/sortie est infrieur 3 et le nouveau EFLAGS.TF vaut 1.

924

#PF(Faute de page)

Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#AC(Vrifie l'alignement)

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement PUSHF PUSHFD PUSHFQ

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 826 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 412 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 234 237. 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 190.

925

Assembleur 80x86 INTEL 80386+

POPFD Pop Flags Double

Syntaxe
POPFD

Description Cette instruction permet de dsempiler de la pile le registre 32 bits de drapeau contenant les indicateurs d'tat.

Algorithme
Registre de drapeaux SS:(E)SP (E)SP (E)SP + 4

Mnmonique
Instruction Opcode Description Dsempile le double mot de la pile et la met dans le registres 32 bits des drapeaux (EFLAGS). Il n'y a pas de prfix en mode 64 bits.

POPFD

9Dh

Exceptions
Message Mode rel X Virtuel 8086 X Mode protg X Description Une adresse mmoire

#SS(Pile non-

926

canonique)

dpasse la limite du segment de pile ou n'est pas canonique X Le niveau de prvilge d'entre/sortie est infrieur 3 et CR4.VME vaut 0. Le niveau de prvilge d'entre/sortie est infrieur 3 et une oprande est de taille de 32 bits. Le niveau de prvilge d'entre/sortie est infrieur 3 et les bits EFLAGS.VIP et le nouveau EFLAGS.IF valent 1. Le niveau de prvilge d'entre/sortie est infrieur 3 et le nouveau EFLAGS.TF vaut 1.

#GP(Protection gnral)

927

#PF(Faute de page)

Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#AC(Vrifie l'alignement)

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement PUSHF PUSHFD PUSHFQ

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 234 237.

928

Assembleur 80x86
x86-64+

POPFQ
POP to rFLAGS Quadword

Syntaxe
POPFQ

Description Cette instruction permet de dsempiler de la pile le registre 64 bits de drapeau (RFLAGS) contenant les indicateurs d'tat.

Algorithme
Registre de drapeaux SS:(E)SP (E)SP (E)SP + 8

Mnmonique
Instruction Opcode Description Dsempile le quadruple mot de la pile et la met dans le registres 64 bits des drapeaux (RFLAGS).

POPFQ

9Dh

Exceptions
Message Mode rel X Virtuel 8086 X Mode protg X Description Une adresse mmoire

#SS(Pile non-

929

canonique)

dpasse la limite du segment de pile ou n'est pas canonique X Le niveau de prvilge d'entre/sortie est infrieur 3 et CR4.VME vaut 0. Le niveau de prvilge d'entre/sortie est infrieur 3 et une oprande est de taille de 32 bits. Le niveau de prvilge d'entre/sortie est infrieur 3 et les bits EFLAGS.VIP et le nouveau EFLAGS.IF valent 1. Le niveau de prvilge d'entre/sortie est infrieur 3 et le nouveau EFLAGS.TF vaut 1.

#GP(Protection gnral)

930

#PF(Faute de page)

Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#AC(Vrifie l'alignement)

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement PUSHF PUSHFD PUSHFQ

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 234 237.

931

Assembleur 80x86
INTEL Pentium MMX+

POR
Bitwise Logical OR

Syntaxe
POR destination, source

Description Cette instruction permet d'effectuer un OU BINAIRE d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM.

Algorithme
destination destination U source

Mnmonique
Instruction POR mm,m64 Opcode 0Fh EBh /r Description Cette instruction permet d'effectuer un OU BINAIRE d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 238 240.

932

Assembleur 80x86
AMD K6-2+

PREFETCH
Prefetch L1 Data-Cache Line

Syntaxe
PREFETCH mem8

Description Cette instruction permet d'effectuer le chargement de l'entre d'une squence d'alignement de mmoire de 64 bits de l'adresse mmoire spcifi dans le cache de donnes L1 du microprocesseur.

Mnmonique
Instruction Opcode Description Charge la ligne de cache dans les donnes de cache de la ligne L1

PREFETCH mem8

0Fh 0Dh /0

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description Cette instruction n'est pas support, comme indiqu par le bit 8 du registre ECX de la fonction

#UD(Opcode invalide) X

933

8000_00001h de l'instruction CPUID. X X X Le mode long n'est pas support, comme indiqu par le bit 29 du registre EDX de la fonction 8000_00001h de l'instruction CPUID. Les instructions 3DNow! ne sont pas supports, comme indiqu par le bit 31 du registre EDX de la fonction 8000_00001h de l'instruction CPUID. L'oprande est un registre.

Voir

galement

934

Instruction assembleur 80x86 Instruction Instruction assembleur 80x86 Instruction Instruction assembleur 80x86 - Instruction PREFETCH2

PREFETCH0 PREFETCH1

935

Assembleur 80x86
INTEL Pentium III (SSE)+

PREFETCH0
Prefetch Data to Cache Level T0

Syntaxe
PREFETCH0 mem8

Description Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T0 du microprocesseur. Alias de PREFETCHT0.

Mnmonique
Instruction Opcode Description Copie les donnes du processeur en utilisant la rfrence T0.

PREFETCH0 mem8

0Fh 18h /1

Exception Aucune

Voir Instruction assembleur 80x86 Instruction Instruction assembleur 80x86 - Instruction PREFETCHW

galement PREFETCH

936

Assembleur 80x86
INTEL Pentium III (SSE)+

PREFETCH1
Prefetch Data to Cache Level T1

Syntaxe
PREFETCH1 mem8

Description Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T1 du microprocesseur. Alias de PREFETCHT1.

Mnmonique
Instruction Opcode Description Copie les donnes du processeur en utilisant la rfrence T1.

PREFETCH1 mem8

0Fh 18h /2

Exception Aucune

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement PREFETCH PREFETCHW

937

Assembleur 80x86
INTEL Pentium III (SSE)+

PREFETCH2
Prefetch Data to Cache Level T2

Syntaxe
PREFETCH2 mem8

Description Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T2 du microprocesseur. Alias de PREFETCHT2.

Mnmonique
Instruction Opcode Description Copie les donnes du processeur en utilisant la rfrence T2.

PREFETCH2 mem8

0Fh 18h /3

Exception Aucune

Voir Instruction assembleur 80x86 Instruction Instruction assembleur 80x86 - Instruction PREFETCHW

galement PREFETCH

938

Assembleur 80x86
INTEL Pentium III (SSE)+

PREFETCHNTA
Prefetch Data to Cache Level NTA

Syntaxe
PREFETCHNTA mem8

Description Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes NTA du microprocesseur.

Mnmonique
Instruction Opcode Description Copie les donnes du processeur en utilisant la rfrence NTA.

PREFETCHNTA mem8

0Fh 18h /0

Exception Aucune

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 241 243.

939

Assembleur 80x86
INTEL Pentium III (SSE)+

PREFETCHT0
Prefetch Data to Cache Level T0

Syntaxe
PREFETCHT0 mem8

Description Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T0 du microprocesseur. Alias de PREFETCH0.

Mnmonique
Instruction Opcode Description Copie les donnes du processeur en utilisant la rfrence T0.

PREFETCHT0 mem8

0Fh 18h /1

Exception Aucune

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement PREFETCH PREFETCHW

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
940

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 241 243.

941

Assembleur 80x86
INTEL Pentium III (SSE)+

PREFETCHT1
Prefetch Data to Cache Level T1

Syntaxe
PREFETCHT1 mem8

Description Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T1 du microprocesseur. Alias de PREFETCH1.

Mnmonique
Instruction Opcode Description Copie les donnes du processeur en utilisant la rfrence T1.

PREFETCHT1 mem8

0Fh 18h 2

Exception Aucune

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement PREFETCH PREFETCHW

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
942

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 241 243.

943

Assembleur 80x86
INTEL Pentium III (SSE)+

PREFETCHT2
Prefetch Data to Cache Level T2

Syntaxe
PREFETCHT2 mem8

Description Cette instruction permet d'effectuer le chargement de la ligne de cache de l'adresse mmoire spcifi dans le cache de donnes T2 du microprocesseur. Alias de PREFETCH2.

Mnmonique
Instruction Opcode Description Copie les donnes du processeur en utilisant la rfrence T2.

PREFETCHT2 mem8

0Fh 18h /3

Exception Aucune

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement PREFETCH PREFETCHW

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
944

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 241 243.

945

Assembleur 80x86
AMD K6-2+

PREFETCHW
Prefetch L1 Data-Cache Line Write

Syntaxe
PREFETCHW mem8

Description Cette instruction permet d'effectuer le chargement de l'entre d'une squence d'alignement de mmoire de 64 bits de l'adresse mmoire spcifi dans le cache de donnes L1 du microprocesseur dans un tat de modification.

Mnmonique
Instruction Opcode Description Charge la ligne de cache dans les donnes de cache de la ligne L1 et marque qu'il est modifi.

PREFETCHW mem8

0Fh 0Dh /1

Exceptions
Message Mode rel Virtuel 8086 X Mode protg X Description Cette instruction n'est pas support, comme indiqu par le bit 8 du registre ECX

#UD(Opcode invalide) X

946

de la fonction 8000_00001h de l'instruction CPUID. X X X Le mode long n'est pas support, comme indiqu par le bit 29 du registre EDX de la fonction 8000_00001h de l'instruction CPUID. Les instructions 3DNow! ne sont pas supports, comme indiqu par le bit 31 du registre EDX de la fonction 8000_00001h de l'instruction CPUID. L'oprande est un registre.

Voir
947

galement

Instruction assembleur 80x86 Instruction Instruction assembleur 80x86 Instruction Instruction assembleur 80x86 - Instruction PREFETCH2

PREFETCH0 PREFETCH1

948

Assembleur 80x86
INTEL Pentium III (SSE)+

PSADBW
Compute Sum of Absolute Differences

Syntaxe
PSADBW destination, source

Description Cette instruction permet d'effectuer le calcul la valeur de absolue de la diffrence des octets de paquet contenu dans une oprande source et destination.

Algorithme
SI taille de l'oprande = 64 bits ALORS Temporaire0 | destination(0..7) - source(0..7) | Temporaire1 | destination(8..15) - source(8..15) | Temporaire2 | destination(16..23) - source(16..23) | Temporaire3 | destination(24..31) - source(24..31) | Temporaire4 | destination(32..39) - source(32..39) | Temporaire5 | destination(40..47) - source(40..47) | Temporaire6 | destination(48..55) - source(48..55) | Temporaire7 | destination(56..63) - source(56..63) | destination(0..15) SOMME(Temporaire0..Temporaire7) destination(16..63) 0 SINON Temporaire0 | destination(0..7) - source(0..7) | Temporaire1 | destination(8..15) - source(8..15) | Temporaire2 | destination(16..23) - source(16..23) | Temporaire3 | destination(24..31) - source(24..31) | Temporaire4 | destination(32..39) - source(32..39) | Temporaire5 | destination(40..47) - source(40..47) | Temporaire6 | destination(48..55) - source(48..55) | Temporaire7 | destination(56..63) - source(56..63) | Temporaire8 | destination(64..71) - source(64..71) | 949

Temporaire9 | destination(72..79) - source(72..79) | Temporaire10 | destination(80..87) - source(80..87) | Temporaire11 | destination(88..95) - source(88..95) | Temporaire12 | destination(96..103) - source(96..103) | Temporaire13 | destination(104..111) - source(104..111) | Temporaire14 | destination(112..119) - source(112..119) | Temporaire15 | destination(120..127) - source(120..127) | Destination(0..15) SOMME(Temporaire0...Temporaire7) Destination(16..63) 0 Destination(64..79) SOMME(Temporaire8...Temporaire15) Destination(80..127) 0 FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer le calcul la valeur de absolue de la diffrence des octets de paquet contenu dans une oprande source et destination. Cette instruction permet d'effectuer le calcul la valeur de absolue de la diffrence des octets de paquet contenu dans une oprande source et destination.

PSADBW mm1, mm2/m64

0F F6 /r

PSADBW xmm1, xmm2/m128

66 0F F6 /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 244 247.

950

Assembleur 80x86
SSSE3+

PSHUFB
Packed Shuffle Bytes

Syntaxe
PSHUFB destination, source

Description Cette instruction permet d'effectuer un mlange des octets en place dans l'oprande de destination avec un masque de contrle dans l'oprande source.

Algorithme
SI taille de l'oprande = 64 bits ALORS POUR POUR i 0 JUSQU'A 7 SI source((i x 8) + 7) = 1 ALORS destination((i x 8) + 7 ..(i x 8) + 0) 0 SINON index(2..0) source((i x 8) + 2 .. (i x 8) + 0) destination((i x 8) + 7 ..(i x 8) + 0) destination((index x 8 + 7)..(index x 8 + 0)) FIN SI FIN BOUCLE POUR SINON SI taille de l'oprande = 128 bits ALORS BOUCLE POUR i 0 JUSQU'A 15 SI source((i x 8) + 7) = 1 ALORS destination((i x 8) + 7 .. (i x 8) + 0) 0 SINON index(3..0) source((i x 8) + 3 .. (i x 8) + 0) destination((i x 8) + 7 .. (i x 8) + 0) destination((index x 8 + 7)..(index x 8 + 0)) FIN SI FIN BOUCLE POUR FIN SI

951

Mnmonique
Instruction PSHUFB mm1,mm2/m64 Opcode 0Fh 38h 00h /r Description Cette instruction permet d'effectuer un mlange des octets en place dans l'oprande de destination avec un masque de contrle dans l'oprande source. Cette instruction permet d'effectuer un mlange des octets en place dans l'oprande de destination avec un masque de contrle dans l'oprande source.

PSHUFB xmm1,xmm2/m128

66h 0Fh 38h 00h /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 247 251.

952

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PSHUFD
Shuffle Packed Doublewords

Syntaxe
PSHUFD destination, source, ordre

Description Cette instruction permet de copier un double mots d'un oprande source avec emplacement spcifi par un oprande immdiate dans un oprande de destination.

Algorithme
destination(0..31) (source >> (ordre(0..1) x 32))(0..31) destination(32..63) (source >> (ordre(2..3) x 32))(0..31) destination(64..95) (source >> (ordre(4..5) x 32))(0..31) destination(96..127) (source >> (ordre(6..7) x 32))(0..31)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un double mots d'un oprande source avec emplacement spcifi par un oprande immdiate dans un oprande de destination.

PSHUFD xmm1, xmm2/m128, imm8 66h 0Fh 70h /r ib

Rfrences
953

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 252 254.

954

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PSHUFHW
Shuffle Packed High Words

Syntaxe
PSHUFHW destination, source, ordre

Description Cette instruction permet de copier un mot d'une oprande source avec emplacement spcifi par un oprande immdiate dans la partie haute d'un oprande de destination.

Algorithme
destination(0..63) source(0..63) destination(64..79) (source >> (ordre(0..1) x 16))(64..79) destination(80..95) (source >> (ordre(2..3) x 16))(64..79) destination(96..111) (source >> (ordre(4..5) x 16))(64..79) destination(112..127) (source >> (ordre(6..7) x 16))(64..79)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un mot d'une oprande source avec emplacement spcifi par un oprande immdiate dans la partie haute d'un oprande de destination.

PSHUFHW xmm1, xmm2/m128, imm8 F3h 0Fh 70h /r ib

955

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 255 257.

956

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PSHUFLW
Shuffle Packed Low Words

Syntaxe
PSHUFLW destination, source, ordre

Description Cette instruction permet de copier un mot d'une oprande source avec emplacement spcifi par un oprande immdiate dans la partie basse d'un oprande de destination.

Algorithme
destination(0..15) (source >> (ordre(0..1) x 16))(0..15) destination(16..31) (source >> (ordre(2..3) x 16))(0..15) destination(32..47) (source >> (ordre(4..5) x 16))(0..15) destination(48..63) (source >> (ordre(6..7) x 16))(0..15) destination(64..127) source(64..127)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier un mot d'une oprande source avec emplacement spcifi par un oprande immdiate dans la partie basse d'un oprande de destination.

PSHUFLW xmm1, xmm2/m128, imm8 F2h 0Fh 70h /r ib

957

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 258 260.

958

Assembleur 80x86
INTEL Pentium III (SSE)+

PSHUFW
Shuffle Packed Words

Syntaxe
PSHUFW destination, source, ordre

Description Cette instruction permet de copier une double mots d'un oprande source avec emplacement spcifi par un oprande immdiate dans un oprande de destination.

Algorithme
destination(0..15) (source >> (ordre(0..1) x 16))(0..15) destination(16..31) (source >> (ordre(2..3) x 16))(0..15) destination(32..47) (source >> (ordre(4..5) x 16))(0..15) destination(48..63) (source >> (ordre(6..7) x 16))(0..15)

Mnmonique
Instruction Opcode Description Cette instruction permet de copier une double mots d'un oprande source avec emplacement spcifi par un oprande immdiate dans un oprande de destination.

PSHUFW mm1, mm2/m64, imm8

0Fh 70h /r ib

Rfrences
959

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 261 263.

960

Assembleur 80x86
SSSE3+

PSIGNB
Packed Sign Byte

Syntaxe
PSIGNB destination, source

Description Cette instruction permet d'effectuer la ngation de chaque octets de l'oprande de destination si la valeur du signe de l'entier des octets correspondant l'oprande source est infrieur 0.

Algorithme
SI taille de l'oprande = 64 bits ALORS SI source(7..0) < 0 ALORS destination(7..0) Neg(destination(7..0)) SINON SI source(7..0) = 0 ALORS DEST(7..0) 0 SINON SI source(7..0) > 0 ALORS destination(7..0) destination(7..0) FIN SI SI source(15..8) < 0 ALORS destination(15..8) Neg(destination(15..8)) SINON SI source(15..8) = 0 ALORS destination(15..8) 0 SINON SI source(15..8) > 0 ALORS destination(15..8) destination(15..8) FIN SI SI source(23..16) < 0 ALORS destination(23..16) Neg(destination(23..16)) SINON SI source(23..16) = 0 ALORS 961

destination(23..16) 0 SINON SI source(23..16) > 0 ALORS destination(23..16) destination(23..16) FIN SI SI source(31..24) < 0 ALORS destination(31..24) Neg(destination(31..24)) SINON SI source(31..24) = 0 ALORS destination(31..24) 0 SINON SI source(31..24) > 0 ALORS destination(31..24) destination(31..24) FIN SI SI source(39..32) < 0 ALORS destination(39..32) Neg(destination(39..32)) SINON SI source(39..32) = 0 ALORS destination(39..32) 0 SINON SI source(39..32) > 0 ALORS destination(39..32) destination(39..32) FIN SI SI source(47..40) < 0 ALORS destination(47..40) Neg(destination(47..40)) SINON SI source(47..40) = 0 ALORS destination(47..40) 0 SINON SI source(47..40) > 0 ALORS destination(47..40) destination(47..40) FIN SI SI source(55..48) < 0 ALORS destination(55..48) Neg(destination(55..48)) SINON SI source(55..48) = 0 ALORS destination(55..48) 0 SINON SI source(55..48) > 0 ALORS destination(55..48) destination(55..48) FIN SI SI source(63..56) < 0 ALORS destination(63..56) Neg(destination(63..56)) SINON SI source(63..56) = 0 ALORS destination(63..56) 0 SINON SI source(63..56) > 0 ALORS destination(63..56) destination(63..56) FIN SI SINON SI taille de l'oprande = 128 bits ALORS SI source(7..0) < 0 ALORS 962

destination(7..0) Neg(destination(7..0)) SINON SI source(7..0) = 0 ALORS destination(7..0) 0 SINON SI source(7..0) > 0 ALORS destination(7..0) destination(7..0) FIN SI SI source(15..8) < 0 ALORS destination(15..8) Neg(destination(15..8)) SINON SI source(15..8) = 0 ALORS destination(15..8) 0 SINON SI source(15..8) > 0 ALORS destination(15..8) destination(15..8) FIN SI SI source(23..16) < 0 ALORS destination(23..16) Neg(destination(23..16)) SINON SI source(23..16) = 0 ALORS destination(23..16) 0 SINON SI source(23..16) > 0 ALORS destination(23..16) destination(23..16) FIN SI SI source(31..24) < 0 ALORS destination(31..24) Neg(destination(31..24)) SINON SI source(31..24) = 0 ALORS destination(31..24) 0 SINON SI source(31..24) > 0 ALORS destination(31..24) destination(31..24) FIN SI SI source(39..32) < 0 ALORS destination(39..32) Neg(destination(39..32)) SINON SI source(39..32) = 0 ALORS destination(39..32) 0 SINON SI source(39..32) > 0 ALORS destination(39..32) destination(39..32) FIN SI SI source(47..40) < 0 ALORS destination(47..40) Neg(destination(47..40)) SINON SI source(47..40) = 0 ALORS destination(47..40) 0 SINON SI source(47..40) > 0 ALORS destination(47..40) destination(47..40) FIN SI 963

SI source(55..48) < 0 ALORS destination(55..48) Neg(destination(55..48)) SINON SI source(55..48) = 0 ALORS destination(55..48) 0 SINON SI source(55..48) > 0 ALORS destination(55..48) destination(55..48) FIN SI SI source(63..56) < 0 ALORS destination(63..56) Neg(destination(63..56)) SINON SI source(63..56) = 0 ALORS destination(63..56) 0 SINON SI source(63..56) > 0 ALORS destination(63..56) destination(63..56) FIN SI SI source(71..64) < 0 ALORS destination(71..64) Neg(destination(71..64)) SINON SI source(71..64) = 0 ALORS destination(71..64) 0 SINON SI source(71..64) > 0 ALORS destination(71..64) destination(71..64) FIN SI SI source(79..72) < 0 ALORS destination(79..72) Neg(destination(79..72)) SINON SI source(79..72) = 0 ALORS destination(79..72) 0 SINON SI source(79..72) > 0 ALORS destination(79..72) destination(79..72) FIN SI SI source(87..80) < 0 ALORS destination(87..80) Neg(destination(87..80)) SINON SI source(87..80) = 0 ALORS destination(87..80) 0 SINON SI source(87..80) > 0 ALORS destination(87..80) destination(87..80) FIN SI SI source(95..88) < 0 ALORS destination(95..88) Neg(destination(95..88)) SINON SI source(95..88) = 0 ALORS destination(95..88) 0 SINON SI source(95..88) > 0 ALORS destination(95..88) destination(95..88) 964

FIN SI SI source(103..96) < 0 ALORS destination(103..96) Neg(destination(103..96)) SINON SI source(103..96) = 0 ALORS destination(103..96) 0 SINON SI source(103..96) > 0 ALORS destination(103..96) destination(103..96) FIN SI SI source(111..104) < 0 ALORS destination(111..104) Neg(destination(111..104)) SINON SI source(111..104) = 0 ALORS destination(111..104) 0 SINON SI source(111..104) > 0 ALORS destination(111..104) destination(111..104) FIN SI SI source(119..112) < 0 ALORS destination(119..112) Neg(destination(119..112)) SINON SI source(119..112) = 0 ALORS destination(119..112) 0 SINON SI source(119..112) > 0 ALORS destination(119..112) destination(119..112) FIN SI SI source(127..120) < 0 ALORS destination(127..120) Neg(destination(127..120)) SINON SI source(127..120) = 0 ALORS destination(127..120) 0 SINON SI SRC(127..120) > 0 ALORS destination(127..120) destination(127..120) FIN SI FIN SI

Mnmonique
Instruction PSIGNB mm1,mm2/m64 Opcode 0Fh 38h 08h /r Description Cette instruction permet d'effectuer la ngation de chaque octets de l'oprande de destination si la valeur du signe de l'entier des octets

965

correspondant l'oprande source est infrieur 0. PSIGNB xmm1,xmm2/m128 66h 0Fh 38h 08h /r Cette instruction permet d'effectuer la ngation de chaque octets de l'oprande de destination si la valeur du signe de l'entier des octets correspondant l'oprande source est infrieur 0.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 264 269.

966

Assembleur 80x86
SSSE3+

PSIGND
Packed Sign Doubleword

Syntaxe
PSIGND destination, source

Description Cette instruction permet d'effectuer la ngation de chaque double mots de l'oprande de destination si la valeur du signe de l'entier des double mots correspondant l'oprande source est infrieur 0.

Algorithme
SI taille de l'oprande = 64 bits ALORS SI source(31..0) < 0 ALORS destination(31..0) Neg(destination(31..0)) SINON SI source(31..0) = 0 ALORS destination(31..0) 0 SINON SI source(31..0) > 0 ALORS destination(31..0) destination(31..0) FIN SI SI source(63..32) < 0 ALORS destination(63..32) Neg(destination(63..32)) SINON SI source(63..32) = 0 ALORS destination(63..32) 0 SINON SI source(63..32) > 0 ALORS destination(63..32) destination(63..32) FIN SI SINON SI taille de l'oprande = 128 bits ALORS SI source(31..0) < 0 ALORS destination(31..0) Neg(destination(31..0)) SINON SI source(31..0) = 0 ALORS destination(31..0) 0 967

SINON SI source(31..0) > 0 ALORS destination(31..0) destination(31..0) FIN SI SI source(63..32) < 0 ALORS destination(63..32) Neg(destination(63..32)) SINON SI source(63..32) = 0 ALORS destination(63..32) 0 SINON SI source(63..32) > 0 ALORS destination(63..32) destination(63..32) FIN SI SI source(95..64) < 0 ALORS destination(95..64) Neg(destination(95..64)) SINON SI source(95..64) = 0 ALORS destination(95..64) 0 SINON SI source(95..64) > 0 ALORS destination(95..64) destination(95..64) FIN SI SI source(127..96) < 0 ALORS destination(127..96) Neg(destination(127..96)) SINON SI source(127..96) = 0 ALORS destination(127..96) 0 SINON SI source(127..96) > 0 ALORS destination(127..96) destination(127..96) FIN SI FIN SI

Mnmonique
Instruction PSIGND mm1,mm2/m64 Opcode 0Fh 38h 0Ah /r Description Cette instruction permet d'effectuer la ngation de chaque double mots de l'oprande de destination si la valeur du signe de l'entier des double mots correspondant l'oprande source est infrieur 0. Cette instruction permet d'effectuer la ngation de chaque double mots

PSIGND xmm1,xmm2/m128

66h 0Fh 38h 0Ah /r

968

de l'oprande de destination si la valeur du signe de l'entier des double mots correspondant l'oprande source est infrieur 0.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 264 269.

969

Assembleur 80x86
SSSE3+

PSIGNW
Packed Sign Word

Syntaxe
PSIGNW destination, source

Description Cette instruction permet d'effectuer la ngation de chaque mots de l'oprande de destination si la valeur du signe de l'entier des mots correspondant l'oprande source est infrieur 0.

Algorithme
SI taille de l'oprande = 64 bits ALORS SI source(15..0) < 0 ALORS destination(15..0) Neg(destination(15..0)) SINON SI source(15..0) = 0 ALORS destination(15..0) 0 SINON SI source(15..0) > 0 ALORS destination(15..0) destination(15..0) FIN SI SI source(31..16) < 0 ALORS destination(31..16) Neg(destination(31..16)) SINON SI source(31..16) = 0 ALORS destination(31..16) 0 SINON SI source(31..16) > 0 ALORS destination(31..16) destination(31..16) FIN SI SI source(47..32) < 0 ALORS destination(47..32) Neg(destination(47..32)) SINON SI source(47..32) = 0 ALORS destination(47..32) 0 SINON SI source(47..32) > 0 ALORS destination(47..32) destination(47..32) FIN SI SI source(63..48) < 0 ALORS 970

destination(63..48) Neg(destination(63..48)) SINON SI source(63..48) = 0 ALORS destination(63..48) 0 SINON SI source(63..48) > 0 ALORS destination(63..48) destination(63..48) FIN SI SINON SI taille de l'oprande = 128 bits ALORS SI source(15..0) < 0 ALORS destination(15..0) Neg(destination(15..0)) SINON SI source(15..0) = 0 ALORS destination(15..0) 0 SINON SI source(15..0) > 0 ALORS destination(15..0) destination(15..0) FIN SI SI source(31..16) < 0 ALORS destination(31..16) Neg(destination(31..16)) SINON SI source(31..16) = 0 ALORS destination(31..16) 0 SINON SI source(31..16) > 0 ALORS destination(31..16) destination(31..16) FIN SI SI source(47..32) < 0 ALORS destination(47..32) Neg(destination(47..32)) SINON SI source(47..32) = 0 ALORS destination(47..32) 0 SINON SI source(47..32) > 0 ALORS destination(47..32) destination(47..32) FIN SI SI source(63..48) < 0 ALORS destination(63..48) Neg(destination(63..48)) SINON SI source(63..48) = 0 ALORS destination(63..48) 0 SINON SI source(63..48) > 0 ALORS destination(63..48) destination(63..48) FIN SI SI source(79..64) < 0 ALORS destination(79..64) Neg(destination(79..64)) SINON SI source(79..64) = 0 ALORS destination(79..64) 0 SINON SI source(79..64) > 0 ALORS destination(79..64) destination(79..64) FIN SI 971

SI source(95..80) < 0 ALORS destination(95..80) Neg(destination(95..80)) SINON SI source(95..80) = 0 ALORS destination(95..80) 0 SINON SI source(95..80) > 0 ALORS destination(95..80) destination(95..80) FIN SI SI source(111..96) < 0 ALORS destination(111..96) Neg(destination(111..96)) SINON SI source(111..96) = 0 ALORS destination(111..96) 0 SINON SI source(111..96) > 0 ALORS destination(111..96) destination(15..0) FIN SI SI source(127..112) < 0 ALORS destination(127..112) Neg(destination(127..112)) SINON SI source(127..112) = 0 ALORS destination(127..112) 0 SINON SI source(127..112) > 0 ALORS destination(127..112) destination(127..112) FIN SI FIN SI

Mnmonique
Instruction PSIGNW mm1,mm2/m64 Opcode 0Fh 38h 09h /r Description Cette instruction permet d'effectuer la ngation de chaque mots de l'oprande de destination si la valeur du signe de l'entier des mots correspondant l'oprande source est infrieur 0. Cette instruction permet d'effectuer la ngation de chaque mots de l'oprande de destination si la valeur du signe de l'entier des mots correspondant l'oprande source

PSIGNW xmm1,xmm2/m128

66h 0Fh 38h 09h /r

972

est infrieur 0.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 264 269.

973

Assembleur 80x86
INTEL Pentium Pro+

PSLLD
Packed Shift Left Logical Dwords

Syntaxe
PSLLD destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un paquet de double mots.

Algorithme
destination(31..0) destination(31..0) << source destination(63..32) destination(63..32) << source

Mnmonique
Instruction PSLLD mm,mm/m64 Opcode 0Fh F2h /r Description Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un paquet de double mots. Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un paquet de double mots.

PSLLD mm,Imm8

0Fh 72h /6 Imm8

Rfrences

974

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 272 277.

975

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PSLLDQ
Packed Shift Double Quadword Left Logical

Syntaxe
PSLLDQ destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un paquet de double quadruple mots.

Algorithme
Temporaire source SI Temporaire > 15 ALORS Temporaire 16 FIN SI destination destination << (Temporaire x 8)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un paquet de double quadruple mots.

PSLLDQ xmm1, imm8

66h 0Fh 73h /7 ib

Rfrences
976

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 270 271.

977

Assembleur 80x86
INTEL Pentium Pro+

PSLLQ
Packed Shift Left Logical Qwords

Syntaxe
PSLLQ destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un quadruple mot.

Algorithme
destination(63..0) destination(63..0) << source

Mnmonique
Instruction PSLLQ mm,mm/m64 Opcode 0Fh F3h /r Description Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un quadruple mot. Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un quadruple mot.

PSLLQ mm,Imm8

0Fh 73h /6 Imm8

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction

978

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 270 271.

979

Assembleur 80x86
INTEL Pentium Pro+

PSLLW
Packed Shift Left Logical Words

Syntaxe
PSLLW destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un paquet de mots.

Algorithme
destination(15..0) destination(15..0) << source destination(31..16) destination(31..16) << source destination(47..32) destination(47..32) << source destination(63..48) destination(63..48) << source

Mnmonique
Instruction PSLLW mm,mm/m64 Opcode 0Fh F1h /r Description Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un paquet de mots. Cette instruction permet d'effectuer le dcalage de bits vers la gauche d'un paquet de mots.

PSLLW mm,Imm8

0Fh 71h /6 Imm8

980

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 270 271.

981

Assembleur 80x86
INTEL Pentium Pro+

PSRAD
Packed Shift Right Arithmetic Dwords

Syntaxe
PSRAD destination, source

Description Cette instruction permet d'effectuer le dcalage arithmtique de bits vers la droite d'un paquet de double mots.

Algorithme
destination(31..0) SignExtend(destination(31..0)) >> source destination(63..32) SignExtend(destination(63..32)) >> source

Mnmonique
Instruction PSRAD mm,mm/m64 Opcode 0Fh E2h /r Description Cette instruction permet d'effectuer le dcalage arithmtique de bits vers la droite d'un paquet de double mots. Cette instruction permet d'effectuer le dcalage arithmtique de bits vers la droite d'un paquet de double mots.

PSRAD mm,Imm8

0Fh 72h /4 Imm8

Rfrences

982

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 278 282.

983

Assembleur 80x86
INTEL Pentium Pro+

PSRAW
Packed Shift Right Arithmetic Words

Syntaxe
PSRAW destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de mots.

Algorithme
destination(15..0) SignExtend(destination(15..0)) >> source destination(31..16) SignExtend(destination(31..16)) >> source destination(47..32) SignExtend(destination(47..32)) >> source destination(63..48) SignExtend(destination(63..48)) >> source

Mnmonique
Instruction PSRAW mm,mm/m64 Opcode 0Fh E1h /r Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de mots. Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de mots.

PSRAW mm,Imm8

0Fh 71h /4 Imm8

Rfrences
984

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 278 282.

985

Assembleur 80x86
INTEL Pentium Pro+

PSRLD
Packed Shift Right Logical Dwords

Syntaxe
PSRLD destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de double mots.

Algorithme
destination(31..0) destination(31..0) >> source destination(63..32) destination(63..32) >> source

Mnmonique
Instruction PSRLD mm,mm/m64 Opcode 0Fh D2h /r Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de double mots./td> Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de double mots.

PSRLD mm,Imm8

0Fh 72h /2 Imm8

Rfrences

986

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 285 289.

987

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PSRLDQ
Shift Double Quadword Right Logical

Syntaxe
PSRLDQ destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de double quadruple mots.

Algorithme
Temporaire source SI Temporaire > 15 ALORS Temporaire 16 FIN SI destination = destination >> (Temporaire x 8)

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de double quadruple mots.

PSRLDQ xmm1, imm8

66h 0Fh 73h /3 ib

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
988

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 283 284.

989

Assembleur 80x86
INTEL Pentium Pro+

PSRLQ
Packed Shift Right Logical Qwords

Syntaxe
PSRLQ destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un quadruple mot.

Algorithme
destination(63..0) destination(63..0) >> source

Mnmonique
Instruction PSRLQ mm,mm/m64 Opcode 0Fh D3h /r Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un quadruple mot. Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un quadruple mot.

PSRLQ mm,Imm8

0Fh 73h /2 Imm8

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction

990

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 285 289.

991

Assembleur 80x86
INTEL Pentium Pro+

PSRLW
Packed Shift Right Logical Words

Syntaxe
PSRLW destination, source

Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de mots.

Algorithme
destination(15..0) destination(15..0) >> source destination(31..16) destination(31..16) >> source destination(47..32) destination(47..32) >> source destination(63..48) destination(63..48) >> source

Mnmonique
Instruction PSRLW mm,mm/m64 Opcode 0Fh D1h /r Description Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de mots. Cette instruction permet d'effectuer le dcalage de bits vers la droite d'un paquet de mots.

PSRLW mm,Imm8

0Fh 71h /2 Imm8

Rfrences
992

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 285 289.

993

Assembleur 80x86
INTEL Pentium Pro+

PSUBB
Packed Subtract Bytes

Syntaxe
PSUBB destination, source

Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des octets d'un paquet contenu dans des oprandes de 64 bits.

Algorithme
destination(7..0) destination(7..0) - source(7..0) destination(15..8) destination(15..8) - source(15..8) destination(23..16) destination(23..16) - source(23..16) destination(31..24) destination(31..24) - source(31..24) destination(39..32) destination(39..32) - source(39..32) destination(47..40) destination(47..40) - source(47..40) destination(55..48) destination(55..48) - source(55..48) destination(63..56) destination(63..56) - source(63..56)

Mnmonique
Instruction PSUBB mm,mm/m64 Opcode 0Fh F8h /r Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des octets d'un paquet contenu dans des oprandes de 64 bits.

994

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 290 293.

995

Assembleur 80x86
INTEL Pentium Pro+

PSUBD
Packed Subtract Dwords

Syntaxe
PSUBD destination, source

Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme
destination(31..0) destination(31..0) - source(31..0) destination(63..32) destination(63..48) - source(63..32)

Mnmonique
Instruction PSUBD mm,mm/m64 Opcode 0Fh FAh /r Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des doubles mots d'un paquet contenu dans des oprandes de 64 bits.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 290 293.
996

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PSUBQ
Subtract Packed Quadword

Syntaxe
PSUBQ destination, source

Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des quadruples mots d'un paquet contenu dans des oprandes.

Algorithme
SI taille de l'oprande = 64 bits ALORS destination(0..63) destination(0..63) - source(0..63) SINON destination(0..63) destination(0..63) - source(0..63) destination(64..127) destination(64..127) - source(64..127) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des quadruples mots d'un paquet contenu dans des oprandes. Cette instruction permet d'effectuer la soustraction de la valeur de chacun

PSUBQ mm1, mm2/m64

0Fh FBh /r

PSUBQ xmm1, xmm2/m128

66h 0Fh FBh /r

997

des quadruples mots d'un paquet contenu dans des oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 294 296.

998

Assembleur 80x86
INTEL Pentium Pro+

PSUBSB
Packed Subtract with Saturation Bytes

Syntaxe
PSUBSB destination, source

Description Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des octets signs d'un paquet contenu dans des oprandes de 64 bits.

Algorithme
destination(7..0) SaturateToSignedByte(destination(7..0) - source(7..0)) destination(15..8) SaturateToSignedByte(destination(15..8) - source(15..8)) destination(23..16) SaturateToSignedByte(destination(23..16) - source(23..16)) destination(31..24) SaturateToSignedByte(destination(31..24) - source(31..24)) destination(39..32) SaturateToSignedByte(destination(39..32) - source(39..32)) destination(47..40) SaturateToSignedByte(destination(47..40) - source(47..40)) destination(55..48) SaturateToSignedByte(destination(55..48) - source(55..48)) destination(63..56) SaturateToSignedByte(destination(63..56) - source(63..56))

Mnmonique
Instruction PSUBSB mm,mm/m64 Opcode 0Fh E8h /r Description Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des octets signs d'un paquet contenu dans des oprandes de 64 bits.

999

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 297 300.

1000

Assembleur 80x86
Cyrix 6x86MX (EMMX)+
Syntaxe PSUBSIW dest, source

PSUBSIW
Packed Subtract with Saturation, using Implied Destination

Description Cette instruction permet d'effectuer la soustraction du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit le rsultat dans le registre MMX.

Algorithme mmi(15..0) SaturateToSignedWord(dest(15..0) - source(15..0)) mmi(31..16) SaturateToSignedWord(dest(31..16) - source(31..16)) mmi(47..32) SaturateToSignedWord(dest(47..32) - source(47..32)) mmi(63..48) SaturateToSignedWord(dest(63..48) - source(63..48))

Mnmonique Instruction PSUBSIW mm,mm/m64 Opcode 0Fh 55h /r Description Cette instruction permet d'effectuer la soustraction du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit le rsultat dans le registre MMX.

1001

Assembleur 80x86
INTEL Pentium Pro+

PSUBSW
Packed Subtract with Saturation

Syntaxe
PSUBSW dest, source

Description Cette instruction permet d'effectuer la soustraction du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit le rsultat dans l'oprande destinataire.

Algorithme
dest(15..0) SaturateToSignedWord(dest(15..0) - source(15..0)) dest(31..16) SaturateToSignedWord(dest(31..16) - source(31..16)) dest(47..32) SaturateToSignedWord(dest(47..32) - source(47..32)) dest(63..48) SaturateToSignedWord(dest(63..48) - source(63..48))

Mnmonique
Instruction PSUBSW mm,mm/m64 Opcode 0Fh E9h /r Description Cette instruction permet d'effectuer la soustraction du mot de format entier de l'oprande source au mot de format entier de l'oprande de destination et crit le rsultat dans l'oprande destinataire.

1002

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 297 300.

1003

Assembleur 80x86
INTEL Pentium Pro+

PSUBUSB
Packed Subtract Unsigned with Saturation Bytes

Syntaxe
PSUBUSB destination, source

Description Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des octets d'un paquet contenu dans des oprandes de 64 bits.

Algorithme
destination(7..0) SaturateToUnsignedByte(destination(7..0) - source(7..0)) destination(15..8) SaturateToUnsignedByte(destination(15..8) - source(15..8)) destination(23..16) SaturateToUnsignedByte(destination(23..16) - source(23..16)) destination(31..24) SaturateToUnsignedByte(destination(31..24) - source(31..24)) destination(39..32) SaturateToUnsignedByte(destination(39..32) - source(39..32)) destination(47..40) SaturateToUnsignedByte(destination(47..40) - source(47..40)) destination(55..48) SaturateToUnsignedByte(destination(55..48) - source(55..48)) destination(63..56) SaturateToUnsignedByte(destination(63..56) - source(63..56))

Mnmonique
Instruction PSUBUSB mm,mm/m64 Opcode 0Fh D8h /r Description Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des octets d'un paquet contenu dans des oprandes de 64 bits.

1004

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 301 305.

1005

Assembleur 80x86
INTEL Pentium Pro+

PSUBUSW
Packed Subtract Unsigned with Saturation Word

Syntaxe
PSUBUSW dest, source

Description Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des mots d'un paquet contenu dans des oprandes de destinations.

Algorithme
dest(15..0) SaturateToUnsignedWord(dest(15..0) - source(15..0)) dest(31..16) SaturateToUnsignedWord(dest(31..16) - source(31..16)) dest(47..32) SaturateToUnsignedWord(dest(47..32) - source(47..32)) dest(63..48) SaturateToUnsignedWord(dest(63..48) - source(63..48))

Mnmonique
Instruction PSUBUSW mm,mm/m64 Opcode 0Fh D9h /r Description Cette instruction permet d'effectuer la soustraction avec saturation de la valeur de chacun des mots d'un paquet contenu dans des oprandes de destinations.

Rfrences

1006

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 301 305.

1007

Assembleur 80x86
INTEL Pentium Pro+

PSUBW
Packed Subtract Words

Syntaxe
PSUBW dest, source

Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des mots d'un paquet contenu dans des oprandes de 64 bits.

Algorithme
dest(15..0) dest(15..0) - source(15..0) dest(31..16) dest(31..16) - source(31..16) dest(47..32) dest(47..32) - source(47..32) dest(63..48) dest(63..48) - source(63..48)

Mnmonique
Instruction PSUBW mm,mm/m64 Opcode 0Fh F9h /r Description Cette instruction permet d'effectuer la soustraction de la valeur de chacun des mots d'un paquet contenu dans des oprandes de 64 bits.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
1008

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 290 293.

1009

Assembleur 80x86
3DNow!
Syntaxe PSWAPD destination, source

PSWAPD
Packed Swap Doubleword

Description Cette instruction permet d'effectuer l'change de la partie basse de 32 bits avec la partie haute de 32 bits dans des oprandes source de 64 bits et met le rsultat dans une oprande 64 bits destinataire.

Algorithme destination(63..32) source(31..0) destination(31..0) source(63..32)

Mnmonique Instruction PSWAPD mm,mm/m64 Opcode 0Fh 0Fh BBh /r Description Cette instruction permet d'effectuer l'change de la partie basse de 32 bits avec la partie haute de 32 bits dans des oprandes source de 64 bits et met le rsultat dans une oprande 64 bits destinataire.

1010

Assembleur 80x86
SSE4.1+

PTEST
Packed Test

Syntaxe
PTEST destination, source

Description Cette instruction permet d'effectuer une comparaison de paquet avec un Et binaire sans modifier les oprandes.

Algorithme
SI source(127..0) destination(127..0) = 0 ALORS ZF 1 SINON ZF 0 FIN SI SI source(127..0) destination(127..0) = 0 ALORS CF 1 SINON CF 0 FIN SI AF 0 OF 0 PF 0 SF 0

Mnmonique
Instruction Opcode Description

1011

PTEST xmm1,xmm2/m128

66h 0Fh 38h 17h /r

Cette instruction permet d'effectuer une comparaison de paquet avec un Et binaire sans modifier les oprandes.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 306 308.

1012

Assembleur 80x86
INTEL Pentium Pro+

PUNPCKHBW
Unpack High Bytes to Words

Syntaxe
PUNPCKHBW destination, source

Description Cette instruction permet de dcompacter des octets en mots dans le haut d'un paquets de 64 bits.

Algorithme
destination(63..56) source(63..56) destination(55..48) destination(63..56) destination(47..40) source(55..48) destination(39..32) destination(55..48) destination(31..24) source(47..40) destination(23..16) destination(47..40) destination(15..8) source(39..32) destination7..0) destination(39..32)

Mnmonique
Instruction PUNPCKHBW mm,mm/m64 Opcode 0Fh 68h /r Description Cette instruction permet de dcompacter des octets en mots dans le haut d'un paquets de 64 bits.

1013

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 309 314.

1014

Assembleur 80x86
INTEL Pentium Pro+

PUNPCKHDQ
Unpack High Dwords to Qwords

Syntaxe
PUNPCKHDQ destination, source

Description Cette instruction permet de dcompacter des doubles mots en quadruples mots dans le haut d'un paquets de 64 bits.

Algorithme
destination(63..32) source(63..32) destination(31..0) destination(63..32)

Mnmonique
Instruction PUNPCKHDQ mm,mm/m64 Opcode 0Fh 6Ah /r Description Cette instruction permet de dcompacter des doubles mots en quadruples mots dans le haut d'un paquets de 64 bits.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 309 314.

1015

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PUNPCKHQDQ
Unpack High Data Quadword

Syntaxe
PUNPCKHQDQ destination, source

Description Cette instruction permet de dcompacter des doubles mots en quadruples mots dans le haut d'un paquets de 128 bits.

Algorithme
destination(0..63) destination(64..127) destination(64..127) source(64..127)

Mnmonique
Instruction Opcode Description Cette instruction permet de dcompacter des doubles mots en quadruples mots dans le haut d'un paquets de 128 bits.

PUNPCKHQDQ xmm1, xmm2/m128 66h 0Fh 6Dh /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 309 314.

1016

Assembleur 80x86
INTEL Pentium Pro+

PUNPCKHWD
Unpack High Words to Dwords

Syntaxe
PUNPCKHWD destination, source

Description Cette instruction permet de dcompacter des mots en double mots dans le haut d'un paquets de 64 bits.

Algorithme
destination(63..56) source(63..48) destination(47..32) destination(63..48) destination(31..16) source(47..32) destination(15..0) destination(47..32)

Mnmonique
Instruction PUNPCKHWD mm,mm/m64 Opcode 0Fh 69h /r Description Cette instruction permet de dcompacter des mots en double mots dans le haut d'un paquet de 64 bits.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
1017

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 309 314.

1018

Assembleur 80x86
INTEL Pentium Pro+

PUNPCKLBW
Unpack Low Bytes to Words

Syntaxe
PUNPCKLBW destination, source

Description Cette instruction permet de dcompacter des octets en mots dans le bas d'un paquets de 64 bits.

Algorithme
destination(63..56) source(31..24) destination(55..48) destination(31..24) destination(47..40) source(23..16) destination(39..32) destination(23..16) destination(31..24) source(15..8) destination(23..16) destination(15..8) destination(15..8) source(7..0) destination(7..0) destination(7..0)

Mnmonique
Instruction PUNPCKLBW mm,mm/m32 Opcode 0Fh 60h /r Description Cette instruction permet de dcompacter des octets en mots dans le bas d'un paquets de 64 bits.

1019

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 315 320.

1020

Assembleur 80x86
INTEL Pentium Pro+

PUNPCKLDQ
Unpack Low Dwords to Qwords

Syntaxe
PUNPCKLDQ destination, source

Description Cette instruction permet de dcompacter des doubles mots en quadruples mots dans le bas d'un paquets de 64 bits.

Algorithme
destination(63..32) source(31..0) destination(31..0) destination(31..0)

Mnmonique
Instruction PUNPCKLDQ mm,mm/m32 Opcode 0Fh 62h /r Description Cette instruction permet de dcompacter des doubles mots en quadruples mots dans le bas d'un paquets de 64 bits.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 315 320.

1021

Assembleur 80x86
INTEL Pentium 4 (SSE2)+

PUNPCKLQDQ
Unpack Low Data Quadword

Syntaxe
PUNPCKLQDQ destination, source

Description Cette instruction permet de dcompacter des doubles mots en quadruples mots dans le bas d'un paquets de 128 bits.

Algorithme
destination(0..63) destination(0..63) destination(64..127) source(0..63)

Mnmonique
Instruction Opcode Description Cette instruction permet de dcompacter des doubles mots en quadruples mots dans le bas d'un paquets de 128 bits.

PUNPCKLQDQ xmm1, xmm2/m128 66h 0Fh 6Ch /r

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 315 320.

1022

Assembleur 80x86
INTEL Pentium Pro+

PUNPCKLWD
Unpack Low Words to Dwords

Syntaxe
PUNPCKLWD destination, source

Description Cette instruction permet de dcompacter des mots en double mots dans le bas d'un paquets de 64 bits.

Algorithme
destination(63..48) source(31..16) destination(47..32) destination(31..16) destination(31..16) source(15..0) destination(15..0) destination(15..0)

Mnmonique
Instruction PUNPCKLWD mm,mm/m32 Opcode 0Fh 61h /r Description Cette instruction permet de dcompacter des mots en double mots dans le bas d'un paquets de 64 bits.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction
1023

Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 315 320.

1024

Assembleur 80x86 INTEL 8088+

PUSH Push Value Onto Stack

Syntaxe
PUSH oprande

Description Cette instruction permet d'empiler une mot ou un double mot dans la pile.

Algorithme
SI taille de l'adresse = 32 bits ALORS SI taille de l'oprande = 32 bits ALORS ESP ESP - 4 SS:ESP oprande SINON ESP ESP - 2 SS:ESP oprande FIN SI SINON SI taille de l'oprande = 16 bits ALORS SP SP - 2 SS:SP oprande SINON SP SP - 4 SS:SP oprande FIN SI FIN SI

Mnmonique

1025

Instruction

Opcode

Description Empile le contenu d'une oprande registre ou mmoire 16 bits dans la pile. Empile le contenu d'une oprande registre ou mmoire 32 bits dans la pile. Il n'y a pas de prfixe en mode 64 bits. Empile le contenu d'une oprande registre ou mmoire 64 bits dans la pile. Empile le contenu d'un registre 16 bits dans la pile. Empile le contenu d'un registre 32 bits dans la pile. Il n'y a pas de prfixe en mode 64 bits. Empile le contenu d'un registre 64 bits dans la pile. Empile le contenu d'une valeur immdiate 8 bits dans la pile. Empile le contenu d'une valeur immdiate 16 bits dans la pile. Empile le contenu d'une valeur immdiate 32 bits dans la pile. Il n'y a pas de prfixe en mode 64 bits. Empile le contenu d'une valeur immdiate 32 bits dans la pile. Il n'y a pas de prfixe en mode 64 bits.

PUSH reg/mem16

FFh /6

PUSH reg/mem32

FFh /6

PUSH reg/mem64

FFh /6

PUSH reg16

50h +rw

PUSH reg32

50h +rd

PUSH reg64

50h +rq

PUSH imm8

6Ah ib

PUSH imm16

68h iw

PUSH imm32

68h id

PUSH imm64

68h id

1026

PUSH CS

0Eh

Empile le contenu du registre CS dans la pile. Invalide en mode 64 bits. Empile le contenu du registre DS dans la pile. Invalide en mode 64 bits. Empile le contenu du registre ES dans la pile. Invalide en mode 64 bits. Empile le contenu du registre FS dans la pile. Empile le contenu du registre GS dans la pile. Empile le contenu du registre SS dans la pile. Invalide en mode 64 bits.

PUSH DS

1Eh

PUSH ES

06h

PUSH FS

0Fh A0h

PUSH GS

0Fh A8h

PUSH SS

16h

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Les instructions PUSH CS, PUSH DS, PUSH ES ou PUSH SS sont excuts en mode 64 bits. Une adresse mmoire dpasse la limite du segment de pile ou n'est

#UD(Opcode invalide)

#SS(Pile)

1027

pas canonique #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction assembleur 80x86 Instruction

galement POP

1028

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 826 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 413 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 197. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 321 325.

1029

Assembleur 80x86 INTEL 80286+

PUSHA Push All General Registers

Syntaxe
PUSHA

Description Cette instruction permet d'empiler respectivement les registres DI, SI, BP, SP, BX, DX, CX et AX dans la pile.

Algorithme temp ESP (E)SP (E)SP - 2 SS:(E)SP AX (E)SP (E)SP - 2 SS:(E)SP CX (E)SP (E)SP - 2 SS:(E)SP DX (E)SP (E)SP - 2 SS:(E)SP BX (E)SP (E)SP - 2 SS:(E)SP temp (E)SP (E)SP - 2 SS:(E)SP BP (E)SP (E)SP - 2 SS:(E)SP SI (E)SP (E)SP - 2 SS:(E)SP DI

Mnmonique

1030

Instruction

Opcode

Description Empile le contenu des registres AX, CX, DX, BX, SP avant l'appel de cette instruction, BP, SI et DI dans la pile. Invalide en mode 64 bits.

PUSHA

60h

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Cette instruction est excut en mode 64 bits. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification

#UD(Opcode invalide)

#SS(Pile)

#PF(Faute de page)

#AC(Vrifie l'alignement)

1031

d'alignement est activ

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement POPA POPAD

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 827 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 199. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 326 327.

1032

Assembleur 80x86 INTEL 80386+

PUSHAD Push All General Registers Double

Syntaxe
PUSHAD

Description Cette instruction permet d'empiler respectivement les registres EDI, ESI, EBP, ESP, EBX, EDX, ECX et EAX dans la pile.

Algorithme temp ESP (E)SP (E)SP - 2 SS:(E)SP EAX (E)SP (E)SP - 2 SS:(E)SP ECX (E)SP (E)SP - 2 SS:(E)SP EDX (E)SP (E)SP - 2 SS:(E)SP EBX (E)SP (E)SP - 2 SS:(E)SP temp (E)SP (E)SP - 2 SS:(E)SP EBP (E)SP (E)SP - 2 SS:(E)SP ESI (E)SP (E)SP - 2 SS:(E)SP EDI

Mnmonique

1033

Instruction

Opcode

Description Empile le contenu des registres EAX, ECX, EDX, EBX, ESP avant l'appel de cette instruction, EBP, ESI et EDI dans la pile. Invalide en mode 64 bits.

PUSHAD

60h

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Cette instruction est excut en mode 64 bits. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification

#UD(Opcode invalide)

#SS(Pile)

#PF(Faute de page)

#AC(Vrifie l'alignement)

1034

d'alignement est activ

Voir Instruction Instruction assembleur assembleur 80x86 80x86 Instruction Instruction

galement POPA POPAD

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 827 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 199. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 326 327.

1035

Assembleur 80x86 INTEL 8088+

PUSHF Push Flags

Syntaxe
PUSHF

Description Cette instruction permet d'empiler respectivement le registre 16 bits de drapeau des indicateurs d'tat dans la pile.

Algorithme
(E)SP (E)SP - 2 SS:(E)SP Registre de drapeaux (FLAGS)

Mnmonique
Instruction Opcode Description Empile le mot du registre de drapeaux 16 bits (FLAGS) dans la pile.

PUSHF

9Ch

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du

#SS(Pile)

1036

segment de pile ou n'est pas canonique Le niveau de prvilge d'entre/sortie est infrieur 3 et le VME n'est pas actif ou la taille de l'oprande n'est pas 16 bits. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#GP(Protection gnrale)

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement POPF POPFD POPFQ

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 827
1037

Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 413 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 200. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 328 330.

1038

Assembleur 80x86 INTEL 80386+

PUSHFD Push Flags Double

Syntaxe
PUSHFD

Description Cette instruction permet d'empiler respectivement le registre 32 bits de drapeau des indicateurs d'tat dans la pile.

Algorithme
(E)SP (E)SP - 4 SS:(E)SP Registre de drapeaux (EFLAGS)

Mnmonique
Instruction Opcode Description Empile le double mot du registre de drapeaux 32 bits (EFLAGS) dans la pile.

PUSHFD

9Ch

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la

#SS(Pile)

1039

limite du segment de pile ou n'est pas canonique Le niveau de prvilge d'entre/sortie est infrieur 3 et le VME n'est pas actif ou la taille de l'oprande n'est pas 16 bits. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#GP(Protection gnrale)

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement POPF POPFD POPFQ

Rfrences

1040

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 328 330.

1041

Assembleur 80x86
x86-64+

PUSHFQ
Push rFLAGS onto Stack

Syntaxe
PUSHFQ

Description Cette instruction permet d'empiler respectivement le registre 64 bits de drapeau (RFLAGS) des indicateurs d'tat dans la pile.

Algorithme
(E)SP (E)SP - 8 SS:(E)SP Registre de drapeaux (EFLAGS)

Mnmonique
Instruction Opcode Description Empile le quadruple mot du registre de drapeaux 64 bits (RFLAGS) dans la pile.

PUSHFQ

9Ch

Exceptions
Message #SS(Pile) Mode rel X Virtuel 8086 X Mode protg X Description Une adresse mmoire

1042

dpasse la limite du segment de pile ou n'est pas canonique Le niveau de prvilge d'entre/sortie est infrieur 3 et le VME n'est pas actif ou la taille de l'oprande n'est pas 16 bits. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#GP(Protection gnrale)

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction assembleur 80x86 Instruction assembleur 80x86 Instruction assembleur 80x86 - Instruction POPFQ Instruction Instruction

galement POPF POPFD

1043

Assembleur 80x86
INTEL Pentium MMX+

PXOR
Bitwise Logical Exclusive OR

Syntaxe
PXOR destination, source

Description Cette instruction permet d'effectuer un ou exclusif binaire d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM.

Algorithme
destination destination XOR source

Mnmonique
Instruction PXOR mm,mm/m64 Opcode 0Fh EFh /r Description Cette instruction permet d'effectuer un ou exclusif binaire d'un quadruple mot d'une oprande source avec une oprande destination dans le cas des registres XMM.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 331 333.

1044

Assembleur 80x86 INTEL 8088+

RCL Rotate Through Carry Left

Syntaxe
RCL oprandecible,nombredebits

Description Cette instruction permet d'effectuer une rotation des bits vers la gauche en rinsrant le bit dans l'indicateur de retenue (CF) ainsi que dans le bit le plus droite libr.

Algorithme
temp max (nombredebits, 31) SI temp = 1 ALORS OF highbit(oprandecible) <> CF SINON OF ? FIN SI Valeur concatnation ( CF, oprandecible ) FAIRE TANT QUE temp <> 0 X highbit ( valeur ) valeur ( valeur dcalage gauche 1 ) + X temp temp - 1 FIN DE FAIRE CF highbit ( valeur ) oprandecible valeur

Mnmonique
Instruction Opcode Description

1045

RCL reg/mem8,1

D0h /2

Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 8 bits) d'un seul bit vers la gauche. Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 8 bits) avec le nombre de bits spcifi par le registre CL vers la gauche. Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 8 bits) avec le nombre de bits spcifi par la valeur immdiate vers la gauche. Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 16 bits) d'un seul bit vers la gauche. Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 16 bits) avec le nombre de bits spcifi par le registre CL vers la gauche. Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 16 bits) avec le nombre de bits spcifi par la valeur immdiate vers la gauche.

RCL reg/mem8, CL

D2h /2

RCL reg/mem8, imm8

C0h /2 ib

RCL reg/mem16, 1

D1h /2

RCL reg/mem16, CL

D3h /2

RCL reg/mem16, imm8

C1h /2 ib

1046

RCL reg/mem32, 1

D1h /2

Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 32 bits) d'un seul bit vers la gauche. Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 32 bits) avec le nombre de bits spcifi par le registre CL vers la gauche. Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 32 bits) avec le nombre de bits spcifi par la valeur immdiate vers la gauche. Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 64 bits) d'un seul bit vers la gauche. Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 64 bits) avec le nombre de bits spcifi par le registre CL vers la gauche. Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 64 bits) avec le nombre de bits spcifi par la valeur immdiate vers la gauche.

RCL reg/mem32, CL

D3h /2

RCL reg/mem32, imm8

C1h /2 ib

RCL reg/mem64, 1

D1h /2

RCL reg/mem64, CL

D3h /2

RCL reg/mem64, imm8

C1h /2 ib

1047

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction

#SS(Pile noncanonique)

#GP(Protection gnral)

#PF(Faute de page)

1048

#AC(Vrifie l'alignement)

Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement RCR ROL ROR

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 827 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 413 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 202. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 334 341.

1049

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

RCPPS
Reciprocals of Packed Single-Precision

Syntaxe
RCPPS destination, source

Description Cette instruction permet d'effectuer le calcul de la rciproque d'un paquet de valeurs de rel de simple prcision.

Algorithme
destination(31..0) APPROX(1.0 / source(31..0)) destination(63..32) APPROX(1.0 / source(63..32)) destination(95..64) APPROX(1.0 / source(95..64)) destination(127..96) APPROX(1.0 / source(127..96))

Mnmonique
Instruction RCPPS xmm1,xmm2/m128 Opcode 0Fh 53h /r Description Cette instruction permet d'effectuer le calcul de la rciproque d'un paquet de valeurs de rel de simple prcision.

1050

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 342 345.

1051

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

RCPSS
Reciprocals of Packed Scalar Single-Precision

Syntaxe
RCPSS destination, source

Description Cette instruction permet d'effectuer le calcul de la rciproque d'une valeur de rel de simple prcision.

Algorithme
destination(31..0) APPROX(1.0 / source(31..0))

Mnmonique
Instruction RCPSS xmm1,xmm2/m32 Opcode F3h 0Fh 53h /r Description Cette instruction permet d'effectuer le calcul de la rciproque d'une valeur de rel de simple prcision.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 346 348.

1052

Assembleur 80x86 INTEL 8088+

RCR Rotate Through Carry Right

Syntaxe
RCR oprandecible,nombredebits

Description Cette instruction permet d'effectuer une rotation des bits vers la droite en rinsrant le bit dans l'indicateur de retenue (CF) ainsi que dans le bit le plus gauche libr.

Algorithme
temp max (nombredebits, 31) SI temp = 1 ALORS OF highbit ( oprandecible ) <> highbit ( oprandecible ) dcalage droite ) ) SINON OF ? FIN SI Valeur concatnation ( oprandecible, CF ) FAIRE TANT QUE temp <> 0 X valeur 1 valeur valeur dcalage droite de 1 highbit ( valeur ) x temp temp - 1 FIN DE FAIRE CF highbit ( valeur ) oprandecible valeur

Mnmonique
Instruction Opcode Description

1053

RCR reg/mem8, 1

D0h /3

Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 8 bits) d'un seul bit vers la droite. Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 8 bits) avec le nombre de bits spcifi par le registre CL vers la droite. Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 8 bits) avec le nombre de bits spcifi par la valeur immdiate vers la droite. Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 16 bits) d'un seul bit vers la droite. Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 16 bits) avec le nombre de bits spcifi par le registre CL vers la droite. Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 16 bits) avec le nombre de bits spcifi par la valeur immdiate vers la droite.

RCR reg/mem8,CL

D2h /3

RCR reg/mem8,imm8

C0h /3 ib

RCR reg/mem16,1

D1h /3

RCR reg/mem16,CL

D3h /3

RCR reg/mem16, imm8

C1h /3 ib

1054

RCR reg/mem32,1

D1h /3

Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 32 bits) d'un seul bit vers la droite. Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 32 bits) avec le nombre de bits spcifi par le registre CL vers la droite. Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 32 bits) avec le nombre de bits spcifi par la valeur immdiate vers la droite. Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 64 bits) d'un seul bit vers la droite. Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 64 bits) d'un seul bit vers la droite. Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement registre ou mmoire 64 bits) avec le nombre de bits spcifi par la valeur immdiate vers la droite.

RCR reg/mem32,CL

D3h /3

RCR reg/mem32, imm8

C1h /3 ib

RCR reg/mem64,1

D1h /3

RCR reg/mem64,CL

D3h /3

RCR reg/mem64, imm8

C1h /3 ib

1055

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction

#SS(Pile noncanonique)

#GP(Protection gnral)

#PF(Faute de page)

1056

#AC(Vrifie l'alignement)

Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement RCL ROR ROL

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 828 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 413 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 204. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 334 341.

1057

Assembleur 80x86
INTEL Pentium+

RDMSR
Read from Model Specific Register

Syntaxe
RDMSR

Description Cette instruction permet de charger le contenu du modle de registre 64-bits (MSR) indiquer par le registre ECX dans le couple de registre EDX:EAX.

Algorithme
EDX:EAX MSR(ECX)

Mnmonique
Instruction RDMSR Opcode 0Fh 32h Description Cette instruction permet de charger le contenu du modle de registre 64bits (MSR) indiquer par le registre ECX dans le couple de registre EDX:EAX.

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement WRMSR RDTSC RDPMC

1058

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 349 350.

1059

Assembleur 80x86
INTEL Pentium Pro+

RDPMC
Read Performance-Monitoring Counters

Syntaxe
RDPMC

Description Cette instruction permet d'effectuer la lecture du compteur du moniteur de performance.

Algorithme
SI (ECX = 0 OU ECX = 1) ET ((CR4.PCE = 1) OU ((CR4.PCE = 0) ET (CPL = 0))) ALORS EDX:EAX PMC(ECX) FIN SI

Mnmonique
Instruction RDPMC Opcode 0Fh 33h Description Cette instruction permet d'effectuer la lecture du compteur du moniteur de performance.

Voir Instruction Instruction Rfrences


1060

galement assembleur assembleur 80x86 80x86 Instruction Instruction RDMSR WRMSR

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 351 356.

1061

Assembleur 80x86
Cyrix CX6x86MX+
Syntaxe RDSHR destination

RDSHR
Read SMM Header Pointer Register

Description Cette instruction permet d'effectuer la lecture du registre de pointeur vers l'entte SMM.

Algorithme destination SMHR

Mnmonique Instruction RDMSR Opcode 0Fh 36h /r Description Cette instruction permet d'effectuer la lecture du registre de pointeur vers l'entte SMM.

1062

Assembleur 80x86
INTEL Pentium+

RDTSC
Read Time-Stamp Counter

Syntaxe
RDTSC

Description Cette instruction permet de charger la valeur courante du compteur de temps du microprocesseur dans le couple de registres EDX:EAX.

Algorithme
SI ((CR4.TSD = 0) OU (CR4.TDS = 1)) ET (CPL = 0) ALORS EDX:EAX Compteur de temps SINON EXCEPTION #GP(0) Compteur de temps FIN SI

Mnmonique
Instruction RDTSC Opcode 0Fh 31h Description Cette instruction permet de charger la valeur courante du compteur de temps du microprocesseur dans le couple de registres EDX:EAX.

Voir

galement

1063

Instruction Instruction Instruction Rfrences

assembleur assembleur assembleur

80x86 80x86 80x86

Instruction Instruction Instruction

RDTSCP RDMSR WRMSR

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 357 358.

1064

Assembleur 80x86
x86-64+

RDTSCP
Read Time-Stamp Counter and Processor ID

Syntaxe
RDTSCP

Description Cette instruction permet de charger la valeur courante du compteur de temps du microprocesseur dans le couple de registres EDX:EAX et la valeur du TSC_AUX dans le registre ECX.

Mnmonique
Instruction Opcode Description Cette instruction permet de charger la valeur courante du compteur de temps du microprocesseur dans le couple de registres EDX:EAX et la valeur du TSC_AUX dans le registre ECX.

RDTSCP

0Fh 01h F9h

Voir Instruction Rfrences assembleur 80x86 Instruction

galement RDTSC

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 359 360.

1065

Assembleur 80x86 INTEL 8088+

REP Repeat String Prefix

Syntaxe
REP chaine_d'instruction_paramtre

Description Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions tant que CX ne vaut pas 0.

Algorithme
SI OpCode est [ INS, INSB, INSD, INSW, LODS, LODSB, LODSD, LODSQ, LODSW, MOVS, MOVSB, MOVSD, MOVSQ, MOVSW, OUTS, OUTSB, OUTSD, OUTSW, STOS, STOSB, STOSD, STOSQ, STOSW ] ALORS FAIRE TANT QUE CX <> 0 Excute instruction_paramtre CX CX - 1 FIN DE FAIRE FIN SI SI OpCode est [ CMPS, CMPSB, CMPSD, CMPSQ, CMPSW, SCAS, SCASB, SCASD, SCASW ] ALORS FAIRE TANT QUE CX <> 0 Excute instruction_paramtre CX CX - 1 SI ZF = 0 ALORS Fin de boucle FIN DE FAIRE FIN SI

Mnmonique
Instruction Opcode Description

1066

REP autreinstruction

F3h autreinstruction

Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions tant que CX ne vaut pas 0.

Rfrences Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 413 Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 828 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 361 365.

1067

Assembleur 80x86 INTEL 8088+

REPE

Syntaxe
REPE chaine_d'instruction_paramtre

Description Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que l'indicateur ZF = 0.

Algorithme
SI OpCode est [ INS, INSB, INSD, INSW, LODS, LODSB, LODSD, LODSQ, LODSW, MOVS, MOVSB, MOVSD, MOVSQ, MOVSW, OUTS, OUTSB, OUTSD, OUTSW, STOS, STOSB, STOSD, STOSQ, STOSW ] ALORS FAIRE TANT QUE CX <> 0 OU ZF <> 0 Excute instruction_paramtre CX CX - 1 FIN DE FAIRE FIN SI SI OpCode est [ CMPS, CMPSB, CMPSD, CMPSQ, CMPSW, SCAS, SCASB, SCASD, SCASW ] ALORS FAIRE TANT QUE CX <> 0 OU ZF <> 0 Excute instruction_paramtre CX CX - 1 SI ZF = 0 ALORS Fin de boucle FIN DE FAIRE FIN SI

Mnmonique
Instruction Opcode Description

1068

REPE autreinstruction

F3h autreinstruction

Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que l'indicateur ZF = 0.

Rfrences Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 414 Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 828 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 361 365.

1069

Assembleur 80x86 INTEL 8088+

REPNE

Syntaxe
REPNE chaine_d'instruction_paramtre

Description Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que l'indicateur ZF = 1.

Algorithme
SI OpCode est [ INS, INSB, INSD, INSW, LODS, LODSB, LODSD, LODSQ, LODSW, MOVS, MOVSB, MOVSD, MOVSQ, MOVSW, OUTS, OUTSB, OUTSD, OUTSW, STOS, STOSB, STOSD, STOSQ, STOSW ] ALORS FAIRE TANT QUE CX <> 0 OU ZF <> 1 Excute instruction_paramtre CX CX - 1 FIN DE FAIRE FIN SI SI OpCode est [ CMPS, CMPSB, CMPSD, CMPSQ, CMPSW, SCAS, SCASB, SCASD, SCASW ] ALORS FAIRE TANT QUE CX <> 0 OU ZF <> 1 Excute instruction_paramtre CX CX - 1 SI ZF = 0 ALORS Fin de boucle FIN DE FAIRE FIN SI

Mnmonique
Instruction Opcode Description

1070

REPNE autreinstruction

F2h autreinstruction

Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que l'indicateur ZF = 1.

Rfrences Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 414 Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 829 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 361 365.

1071

Assembleur 80x86 INTEL 8088+

REPNZ

Syntaxe
REPNZ chaine_d'instruction_paramtre

Description Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que l'indicateur ZF = 1.

Algorithme
SI OpCode est [ INS, INSB, INSD, INSW, LODS, LODSB, LODSD, LODSQ, LODSW, MOVS, MOVSB, MOVSD, MOVSQ, MOVSW, OUTS, OUTSB, OUTSD, OUTSW, STOS, STOSB, STOSD, STOSQ, STOSW ] ALORS FAIRE TANT QUE CX <> 0 OU ZF <> 1 Excute instruction_paramtre CX CX - 1 FIN DE FAIRE FIN SI SI OpCode est [ CMPS, CMPSB, CMPSD, CMPSQ, CMPSW, SCAS, SCASB, SCASD, SCASW ] ALORS FAIRE TANT QUE CX <> 0 OU ZF <> 1 Excute instruction_paramtre CX CX - 1 SI ZF = 0 ALORS Fin de boucle FIN DE FAIRE FIN SI

Mnmonique
Instruction Opcode Description

1072

REPNZ autreinstruction

F2h autreinstruction

Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que l'indicateur ZF = 1.

Rfrences Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 414 Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 829 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 361 365.

1073

Assembleur 80x86 INTEL 8088+

REPZ

Syntaxe
REPZ chaine_d'instruction_paramtre

Description Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que l'indicateur ZF = 0.

Algorithme
SI OpCode est [ INS, INSB, INSD, INSW, LODS, LODSB, LODSD, LODSQ, LODSW, MOVS, MOVSB, MOVSD, MOVSQ, MOVSW, OUTS, OUTSB, OUTSD, OUTSW, STOS, STOSB, STOSD, STOSQ, STOSW ] ALORS FAIRE TANT QUE CX <> 0 OU ZF <> 0 Excute instruction_paramtre CX CX - 1 FIN DE FAIRE FIN SI SI OpCode est [ CMPS, CMPSB, CMPSD, CMPSQ, CMPSW, SCAS, SCASB, SCASD, SCASW ] ALORS FAIRE TANT QUE CX <> 0 OU ZF <> 0 Excute instruction_paramtre CX CX - 1 SI ZF = 0 ALORS Fin de boucle FIN DE FAIRE FIN SI

Mnmonique
Instruction Opcode Description

1074

REPZ autreinstruction

F3h autreinstruction

Cette instruction est utilis comme prfixe avec d'autres instructions pour effectuer des rptitions d'instructions jusqu' ce que CX = 0 ou tant que l'indicateur ZF = 0.

Rfrences Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 414 Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 829 Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 361 365.

1075

Assembleur 80x86
AMD Am386SXLV, Am386DXLV
Syntaxe RES3

RES3
Restore All CPU Registers 386

Description Cette instruction permet d'effectuer le chargement de tous les registres de descripteur de cache.

Algorithme (ES:EDI+0000h)(4) CR0 (ES:EDI+0004h)(4) EFLAGS (ES:EDI+0008h)(4) EIP (ES:EDI+000Ch)(4) EDI (ES:EDI+0010h)(4) ESI (ES:EDI+0014h)(4) EBP (ES:EDI+0018h)(4) ESP (ES:EDI+001Ch)(4) EBX (ES:EDI+0020h)(4) EDX (ES:EDI+0024h)(4) ESX (ES:EDI+0028h)(4) EAX (ES:EDI+002Ch)(4) DR6 (ES:EDI+0030h)(4) DR7 (ES:EDI+0034h)(4) TR (16 bits complt par des 0) (ES:EDI+0038h)(4) LDT (ES:EDI+003Ch)(4) GS (16 bits complt par des 0) (ES:EDI+0040h)(4) FS (16 bits complt par des 0) (ES:EDI+0044h)(4) DS (16 bits complt par des 0) (ES:EDI+0048h)(4) SS (16 bits complt par des 0) (ES:EDI+004Ch)(4) CS (16 bits complt par des 0) (ES:EDI+0050h)(4) ES (16 bits complt par des 0) (ES:EDI+0054h)(4) Attribut de TSS (ES:EDI+0058h)(4) Base de TSS (ES:EDI+005Ch)(4) Limite de TSS (ES:EDI+0060h)(4) 0s
1076

(ES:EDI+0064h)(4) Base de IDT (ES:EDI+0068h)(4) Limite de IDT (ES:EDI+006Ch)(4) 0s (ES:EDI+0070h)(4) Base de GDT (ES:EDI+0074h)(4) Limite de GDT (ES:EDI+0078h)(4) Attribut de LDT (ES:EDI+007Ch)(4) Base de LDT (ES:EDI+0080h)(4) Limite de LDT (ES:EDI+0084h)(4) Attribut de GS (ES:EDI+0088h)(4) Base de GS (ES:EDI+008Ch)(4) Limite de GS (ES:EDI+0090h)(4) Attribut de FS (ES:EDI+0094h)(4) Base de FS (ES:EDI+0098h)(4) Limite de FS (ES:EDI+009Ch)(4) Attribut de DS (ES:EDI+00A0h)(4) Base de DS (ES:EDI+00A4h)(4) Limite de DS (ES:EDI+00A8h)(4) Attribut de SS (ES:EDI+00ACh)(4) Base de SS (ES:EDI+00B0h)(4) Limite de SS (ES:EDI+00B4h)(4) Attribut de CS (ES:EDI+00B8h)(4) Base de CS (ES:EDI+00BCh)(4) Limite de CS (ES:EDI+00C0h)(4) Attribut de ES (ES:EDI+00C4h)(4) Base de ES (ES:EDI+00C8h)(4) Limite de ES (ES:EDI+00CCh)(34h) Non utilis (ES:EDI+0100h)(4) Registre temporaire (ES:EDI+0104h)(4) Registre temporaire (ES:EDI+0108h)(4) Registre temporaire (ES:EDI+010Ch)(4) Registre temporaire (ES:EDI+0110h)(4) Registre temporaire (ES:EDI+0114h)(4) Registre temporaire (ES:EDI+0118h)(4) Registre temporaire (ES:EDI+011Ch)(4) Registre temporaire (ES:EDI+0120h)(4) Registre temporaire (ES:EDI+0124h)(4) Dernier instruction EIP pour le redmarrage

Mnmonique Instruction RES3 Opcode 0Fh 07h Description Cette instruction permet d'effectuer la lecture des donnes l'adresse ES:EDI.
1077

Assembleur 80x86
AMD Am386SXLV, Am386DXLV
Syntaxe RES4

RES4
Restore All CPU Registers 486

Description Cette instruction permet d'effectuer le chargement de tous les registres de descripteur de cache.

Algorithme (ES:EDI+0000h)(4) CR0 (ES:EDI+0004h)(4) EFLAGS (ES:EDI+0008h)(4) EIP (ES:EDI+000Ch)(4) EDI (ES:EDI+0010h)(4) ESI (ES:EDI+0014h)(4) EBP (ES:EDI+0018h)(4) ESP (ES:EDI+001Ch)(4) EBX (ES:EDI+0020h)(4) EDX (ES:EDI+0024h)(4) ESX (ES:EDI+0028h)(4) EAX (ES:EDI+002Ch)(4) DR6 (ES:EDI+0030h)(4) DR7 (ES:EDI+0034h)(4) TR (16 bits complt par des 0) (ES:EDI+0038h)(4) LDT (ES:EDI+003Ch)(4) GS (16 bits complt par des 0) (ES:EDI+0040h)(4) FS (16 bits complt par des 0) (ES:EDI+0044h)(4) DS (16 bits complt par des 0) (ES:EDI+0048h)(4) SS (16 bits complt par des 0) (ES:EDI+004Ch)(4) CS (16 bits complt par des 0) (ES:EDI+0050h)(4) ES (16 bits complt par des 0) (ES:EDI+0054h)(4) Attribut de TSS (ES:EDI+0058h)(4) Base de TSS (ES:EDI+005Ch)(4) Limite de TSS (ES:EDI+0060h)(4) 0s
1078

(ES:EDI+0064h)(4) Base de IDT (ES:EDI+0068h)(4) Limite de IDT (ES:EDI+006Ch)(4) 0s (ES:EDI+0070h)(4) Base de GDT (ES:EDI+0074h)(4) Limite de GDT (ES:EDI+0078h)(4) Attribut de LDT (ES:EDI+007Ch)(4) Base de LDT (ES:EDI+0080h)(4) Limite de LDT (ES:EDI+0084h)(4) Attribut de GS (ES:EDI+0088h)(4) Base de GS (ES:EDI+008Ch)(4) Limite de GS (ES:EDI+0090h)(4) Attribut de FS (ES:EDI+0094h)(4) Base de FS (ES:EDI+0098h)(4) Limite de FS (ES:EDI+009Ch)(4) Attribut de DS (ES:EDI+00A0h)(4) Base de DS (ES:EDI+00A4h)(4) Limite de DS (ES:EDI+00A8h)(4) Attribut de SS (ES:EDI+00ACh)(4) Base de SS (ES:EDI+00B0h)(4) Limite de SS (ES:EDI+00B4h)(4) Attribut de CS (ES:EDI+00B8h)(4) Base de CS (ES:EDI+00BCh)(4) Limite de CS (ES:EDI+00C0h)(4) Attribut de ES (ES:EDI+00C4h)(4) Base de ES (ES:EDI+00C8h)(4) Limite de ES (ES:EDI+00CCh)(34h) Non utilis (ES:EDI+0100h)(4) Registre temporaire (ES:EDI+0104h)(4) Registre temporaire (ES:EDI+0108h)(4) Registre temporaire (ES:EDI+010Ch)(4) Registre temporaire (ES:EDI+0110h)(4) Registre temporaire (ES:EDI+0114h)(4) Registre temporaire (ES:EDI+0118h)(4) Registre temporaire (ES:EDI+011Ch)(4) Registre temporaire (ES:EDI+0120h)(4) Registre temporaire (ES:EDI+0124h)(4) Dernier instruction EIP pour le redmarrage (ES:EDI+0128h)(4) PEIP: Pointeur d'instruction sur l'espace SRAM prcdent (ES:EDI+012Eh)(36) Non utilis (ES:EDI+0150h)(4) Registres de pointeur interne de nombre rel (virgule flottante)

Mnmonique Instruction Opcode


1079

Description

RES4

0Fh 07h

Cette instruction permet d'effectuer la lecture des donnes l'adresse ES:EDI.

1080

Assembleur 80x86 INTEL 8088+

RET Return

Syntaxe
RET RET immdiat

Description Cette instruction permet de quitter une procdure. Ainsi, elle indique au microprocesseur qu'il doit dsempiler la valeur du pointeur d'instructions contenu dans la pile et la copier dans les registres CS:IP pour une procdure de type FAR ou dans le registre IP pour une procdure de type NEAR. Ensuite, l'excution du code se poursuit l'instruction suivant l'instruction CALL.

Algorithme
SI instruction = RETN ALORS SI oprande de taille = 32 bits ALORS SI les 12 octets du haut de la pile sont en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI EIP Pop() SINON SI les 6 octets du haut de la pile sont en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI tempEIP Pop() tempEIP tempEIP 0000FFFFh SI tempEIP n'est pas dans limite du segment de code ALORS EXCEPTION #GP(0) FIN SI EIP tempEIP FIN SI

1081

SI instruction a une oprande immdiate ALORS SI taille de l'adresse de la pile = 32 bits ALORS ESP ESP + SRC SINON SP SP + SRC FIN SI FIN SI FIN SI SI ((PE = 0) OU (PE = 1 ET VM = 1)) ET instruction RETF ALORS SI taille de l'oprande = 32 bits ALORS SI les 12 octets du haut de la pile sont en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI EIP Pop() CS Pop() SINON SI les 6 octets du haut de la pile sont en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI tempEIP Pop() tempEIP tempEIP 0000FFFFh SI tempEIP n'est pas dans limite du segment de code ALORS EXCEPTION #GP(0) FIN SI EIP tempEIP CS Pop() FIN SI SI instruction a une oprande immdiate ALORS SP SP + (SRC FFFFh) FIN SI FIN SI SI (PE = 1 ET VM = 0) ET instruction RETF ALORS SI taille de l'oprande = 32 bits ALORS SI le deuxime double mot de la pile est en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI FIN SI SI slecteur de code de retour est nulle ALORS EXCEPTION GP(0) 1082

FIN SI SI adresse du slecteur de retour de code segment est en dehors des limites de la table de descripteur ALORS EXCEPTION GP(selecteur) FIN SI Demande le descripteur avec le point du slecteur de segment de code de retour du descripteur de table SI descripteur de retour de code segment n'est pas un code segment ALORS EXCEPTION #GP(selecteur) FIN SI SI selecteur de retour de segment de code RPL < CPL ALORS EXCEPTION #GP(Slecteur) FIN SI SI descripteur retour de code de segment retour est conforme ET retour de segment de code DPL > slecteur de retour de segment de code RPL ALORS EXCEPTION #GP(Slecteur) FIN SI SI descripteur de retour segment de code n'est pas prsent ALORS EXCEPTION #NP(Slecteur) FIN SI SI slecteur de retour de segment de code RPL > CPL ALORS ALLER A RETURN-OUTER-PRIVILEGE-LEVEL SINON ALLER A RETURN-TO-SAME-PRIVILEGE-LEVEL FIN SI FIN SI RETURN-SAME-PRIVILEGE-LEVEL: SI l'instruction de pointeur n'est pas l'intrieur de la limite de segment de code ALORS EXCEPTION #GP(0) FIN SI SI taille de l'oprande = 32 bits ALORS EIP Pop() CS Pop() ESP ESP + SRC SINON EIP Pop() EIP EIP 0000FFFFh CS Pop() ESP ESP + SRC FIN SI 1083

RETURN-OUTER-PRIVILEGE-LEVEL: SI (16 + SRC) octets du haut de la pile sont en dehors de la limite de la pile ET taille de l'oprande = 32 bits OU (8 + SRC) octets du haut de la pile sont en dehors de la limite de la pile ET taille de l'oprande = 16 ALORS EXCEPTION #SS(0) FIN SI Lecture du slecteur de retour de segment SI slecteur de segment de pile n'est pas nulle ALORS EXCEPTION #GP(0) FIN SI SI index de retour du slecteur de segment n'est pas dans les limites du descripteur de table ALORS EXCEPTION #GP(selector) FIN SI Lecture du descripteur de segment pointant sur le retour de slecteur de segment SI slecteur de segment de pile RPL <> RPL du retour de slecteur de segment de code OU segment de pile n'est pas dans une segment de donnes crivable OU descripteur de segment de pile DPL <> RPL de retour de slecteur de segment de code ALORS EXCEPTION #GP(Selecteur) FIN SI SI segment de pile n'est pas prsent ALORS EXCEPTION #SS(Slecteur de segment de pile) FIN SI SI pointeur de retourn d'instruction n'est pas dans la limite de segment de code ALORS EXCEPTION #GP(0) FIN SI CPL Retour du slecteur de segment de code du RPL SI taille de l'oprande = 32 bits ALORS EIP Pop() CS Pop() CS(RPL) CPL ESP ESP + SRC tempESP Pop() tempSS Pop() ESP tempESP SS tempSS SINON EIP Pop() EIP EIP 0000FFFFh CS Pop() 1084

CS(RPL) CPL ESP ESP + SRC tempESP Pop() tempSS Pop() ESP tempESP SS tempSS FIN SI BOUCLE POUR chaque registre de segment (ES, FS, GS et DS) FAIRE SI registre de segment pointe sur des donnes ou segment de code est non-conforme ET CPL > descripteur de segment DPL ALORS Slecteur de segment 0 FIN SI FIN BOUCLE POUR BOUCLE POUR chaque registre de segment ES, FS, GS et DS FAIRE SI index de slecteur de segment est en dehors de la limite du descripteur de table OU descripteur de segment indique que le segment n'est pas dans des donnes OU lecteur de segment de code si le segment de donnes OU segment de code non-conforme ET descripteur de segment DPL < CPL OU RPL du slecteur de segment de code ALORS Slecteur de egistre de segment Slecteur nulle FIN SI FIN BOUCLE POUR ESP ESP + SRC

Mnmonique
Instruction Opcode Description Retour d'un appel de procdure court. Retour d'un appel de procdure court et spcifie le nombre d'octets retirer de la pile. Retour d'un appel de procdure long. Retour d'un appel de procdure long et spcifie le nombre d'octets

RET

C3h

RET imm16

C2h iw

RET RET imm16

CBh CAh iw

1085

retirer de la pile.

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique Le retour de segment de code est marqu non prsent. Le registre SS est charg avec un slecteur nonnulle et le segment est marqu non prsent.

#SS(Pile)

#GP(Protection gnral)

#NP(Slecteur)

#SS(Slecteur)

1086

#GP(Slecteur)

Le slecteur de code de retour est un slecteur nulle. Le slecteur de retour de pile et de mode de retour n'est pas un mode 64 bits ou CPL vaut 3. Le code de retour ou le descripteur de pile dpasse la limite du descripteur de table. Le code de retour ou le bit TI du slecteur de pile est fix mais le slecteur LDT n'est pas un slecteur nulle. Le descripteur de segment pour le code retour n'est pas un segment de

1087

code. X Le RPL du slecteur du retour de segment de code est infrieur au CPL. Le retour du segment de code n'est pas conforme et le slecteur de segment DPL n'est pas gale au RPL du slecteur de segment de code. Le retour du segment de code est conforme et le slecteur de segment DPL est suprieur au RPL du slecteur de segment de code. Le descripteur de segment pour le retour de pile n'est pas dans segment de

1088

donnes crivable. X Le descripteur de segment de pile DPL n'est pas gale au RPL du slecteur de retour de segment de code. Le slecteur de segment de pile RPL n'est pas gale au RPL du retour de slecteur de segment de code. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

1089

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 830 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 414 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 207. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 366 376.

1090

Assembleur 80x86 INTEL 8088+

RETF Return Far

Syntaxe
RETF RETF immdiat

Description Cette instruction permet de quitter une procdure ayant lieu avec un appel long (FAR CALL). Ainsi, elle indique au microprocesseur qu'il doit dsempiler la valeur du pointeur d'instructions contenu dans la pile et la copier dans les registres CS:IP. Ensuite, l'excution du code se poursuit l'instruction suivant l'instruction CALL.

Algorithme
SI ((PE = 0) OU (PE = 1 ET VM = 1)) ALORS SI taille de l'oprande = 32 bits ALORS SI les 12 octets du haut de la pile sont en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI EIP Pop() CS Pop() SINON SI les 6 octets du haut de la pile sont en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI tempEIP Pop() tempEIP tempEIP 0000FFFFh SI tempEIP n'est pas dans limite du segment de code ALORS EXCEPTION #GP(0) FIN SI EIP tempEIP CS Pop() 1091

FIN SI SI instruction a une oprande immdiate ALORS SP SP + (SRC FFFFh) FIN SI FIN SI SI (PE = 1 ET VM = 0) ALORS SI taille de l'oprande = 32 bits ALORS SI le deuxime double mot de la pile est en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI FIN SI SI slecteur de code de retour est nulle ALORS EXCEPTION GP(0) FIN SI SI adresse du slecteur de retour de code segment est en dehors des limites de la table de descripteur ALORS EXCEPTION GP(selecteur) FIN SI Demande le descripteur avec le point du slecteur de segment de code de retour du descripteur de table SI descripteur de retour de code segment n'est pas un code segment ALORS EXCEPTION #GP(selecteur) FIN SI SI selecteur de retour de segment de code RPL < CPL ALORS EXCEPTION #GP(Slecteur) FIN SI SI descripteur retour de code de segment retour est conforme ET retour de segment de code DPL > slecteur de retour de segment de code RPL ALORS EXCEPTION #GP(Slecteur) FIN SI SI descripteur de retour segment de code n'est pas prsent ALORS EXCEPTION #NP(Slecteur) FIN SI SI slecteur de retour de segment de code RPL > CPL ALORS ALLER A RETURN-OUTER-PRIVILEGE-LEVEL SINON ALLER A RETURN-TO-SAME-PRIVILEGE-LEVEL FIN SI FIN SI

1092

RETURN-SAME-PRIVILEGE-LEVEL: SI l'instruction de pointeur n'est pas l'intrieur de la limite de segment de code ALORS EXCEPTION #GP(0) FIN SI SI taille de l'oprande = 32 bits ALORS EIP Pop() CS Pop() ESP ESP + SRC SINON EIP Pop() EIP EIP 0000FFFFh CS Pop() ESP ESP + SRC FIN SI RETURN-OUTER-PRIVILEGE-LEVEL: SI (16 + SRC) octets du haut de la pile sont en dehors de la limite de la pile ET taille de l'oprande = 32 bits OU (8 + SRC) octets du haut de la pile sont en dehors de la limite de la pile ET taille de l'oprande = 16 ALORS EXCEPTION #SS(0) FIN SI Lecture du slecteur de retour de segment SI slecteur de segment de pile n'est pas nulle ALORS EXCEPTION #GP(0) FIN SI SI index de retour du slecteur de segment n'est pas dans les limites du descripteur de table ALORS EXCEPTION #GP(selector) FIN SI Lecture du descripteur de segment pointant sur le retour de slecteur de segment SI slecteur de segment de pile RPL <> RPL du retour de slecteur de segment de code OU segment de pile n'est pas dans une segment de donnes crivable OU descripteur de segment de pile DPL <> RPL de retour de slecteur de segment de code ALORS EXCEPTION #GP(Selecteur) FIN SI SI segment de pile n'est pas prsent ALORS EXCEPTION #SS(Slecteur de segment de pile) FIN SI SI pointeur de retourn d'instruction n'est pas dans la limite de segment de code ALORS EXCEPTION #GP(0) FIN SI 1093

CPL Retour du slecteur de segment de code du RPL SI taille de l'oprande = 32 bits ALORS EIP Pop() CS Pop() CS(RPL) CPL ESP ESP + SRC tempESP Pop() tempSS Pop() ESP tempESP SS tempSS SINON EIP Pop() EIP EIP 0000FFFFh CS Pop() CS(RPL) CPL ESP ESP + SRC tempESP Pop() tempSS Pop() ESP tempESP SS tempSS FIN SI BOUCLE POUR chaque registre de segment (ES, FS, GS et DS) FAIRE SI registre de segment pointe sur des donnes ou segment de code est non-conforme ET CPL > descripteur de segment DPL ALORS Slecteur de segment 0 FIN SI FIN BOUCLE POUR BOUCLE POUR chaque registre de segment ES, FS, GS et DS FAIRE SI index de slecteur de segment est en dehors de la limite du descripteur de table OU descripteur de segment indique que le segment n'est pas dans des donnes OU lecteur de segment de code si le segment de donnes OU segment de code non-conforme ET descripteur de segment DPL < CPL OU RPL du slecteur de segment de code ALORS Slecteur de egistre de segment Slecteur nulle FIN SI FIN BOUCLE POUR ESP ESP + SRC

Mnmonique

1094

Instruction RETF

Opcode CBh

Description Retour d'un appel de procdure long. Retour d'un appel de procdure long et spcifie le nombre d'octets retirer de la pile.

RETF imm16

CAh iw

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Le retour de segment de code est marqu non prsent. Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Le registre SS est charg avec un slecteur nonnulle et le segment est marqu non prsent. Une adresse mmoire dpasse la

#NP(Slecteur)

#SS(Pile)

#SS(Slecteur)

#GP(Protection gnral)

1095

limite du segment de donnes ou n'est pas canonique #GP(Slecteur) X Le slecteur de code de retour est un slecteur nulle. Le slecteur de retour de pile et de mode de retour n'est pas un mode 64 bits ou CPL vaut 3. Le code de retour ou le descripteur de pile dpasse la limite du descripteur de table. Le code de retour ou le bit TI du slecteur de pile est fix mais le slecteur LDT n'est pas un slecteur nulle.

1096

Le descripteur de segment pour le code retour n'est pas un segment de code. Le RPL du slecteur du retour de segment de code est infrieur au CPL. Le retour du segment de code n'est pas conforme et le slecteur de segment DPL n'est pas gale au RPL du slecteur de segment de code. Le retour du segment de code est conforme et le slecteur de segment DPL est suprieur au RPL du slecteur de segment de code.

1097

Le descripteur de segment pour le retour de pile n'est pas dans segment de donnes crivable. Le descripteur de segment de pile DPL n'est pas gale au RPL du slecteur de retour de segment de code. Le slecteur de segment de pile RPL n'est pas gale au RPL du retour de slecteur de segment de code. Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est

#PF(Faute de page)

#AC(Vrifie l'alignement)

1098

effectu quand une vrification d'alignement est activ

Voir Instruction assembleur 80x86 Instruction assembleur 80x86 - Instruction RET Instruction

galement CALL

1099

Assembleur 80x86 INTEL 8088+

RETN Return Near

Syntaxe
RETN RETN immdiat

Description Cette instruction permet de quitter une procdure. Ainsi, elle indique au microprocesseur qu'il doit dsempiler la valeur du pointeur d'instructions contenu dans la pile et la copie dans le registre IP. Ensuite, l'excution du code se poursuit l'instruction suivant l'instruction CALL.

Algorithme
SI oprande de taille = 32 bits ALORS SI les 12 octets du haut de la pile sont en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI EIP Pop() SINON SI les 6 octets du haut de la pile sont en dehors de la limite de la pile ALORS EXCEPTION #SS(0) FIN SI tempEIP Pop() tempEIP tempEIP 0000FFFFh SI tempEIP n'est pas dans limite du segment de code ALORS EXCEPTION #GP(0) FIN SI EIP tempEIP FIN SI SI instruction a une oprande immdiate ALORS SI taille de l'adresse de la pile = 32 bits ALORS 1100

ESP ESP + SRC SINON SP SP + SRC FIN SI FIN SI

Mnmonique
Instruction Opcode Description Retour d'un appel de procdure court. Retour d'un appel de procdure court et spcifie le nombre d'octets retirer de la pile.

RETN

C3h

RETN imm16

C2h iw

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas

#SS(Pile)

#GP(Protection gnral)

1101

canonique Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir Instruction assembleur 80x86 Instruction assembleur 80x86 - Instruction RET Instruction

galement CALL

1102

Assembleur 80x86 INTEL 8088+

ROL Rotate Left

Syntaxe
ROL oprandecible,nombredebits

Description Cette instruction permet d'effectuer une rotation des bits vers la gauche en rinsrant le bit dans le bit le plus droite libr.

Algorithme
temp max ( compteur, 31) SI temp = 1 ALORS OF highbit ( destination ) <> CF SINON OF ? FIN SI BOUCLE FAIRE TANT QUE temp <> 0 X highbit ( destination ) destination (destination dcalage gauche de 1 ) + x temp temp - 1 FIN BOUCLE DE TANT QUE CF highbit ( destination )

Mnmonique
Instruction Opcode Description Cette instruction effectue une rotation de 8 bits d'un oprande registre ou mmoire 8 bits d'un seul 1103

ROL reg/mem8, 1

D0h /0

bit vers la gauche. Cette instruction effectue une rotation de 8 bits d'un oprande registre ou mmoire 8 bits avec le nombre de bits spcifi par le registre CL vers la gauche. Cette instruction effectue une rotation de 8 bits d'un oprande registre ou mmoire 8 bits avec le nombre de bits spcifi par la valeur immdiate vers la gauche. Cette instruction effectue une rotation de 16 bits d'un oprande registre ou mmoire 16 bits d'un seul bit vers la gauche. Cette instruction effectue une rotation de 16 bits d'un oprande registre ou mmoire 16 bits avec le nombre de bits spcifi par le registre CL vers la gauche. Cette instruction effectue une rotation de 16 bits d'un oprande registre ou mmoire 16 bits avec le nombre de bits spcifi par la valeur immdiate vers la gauche. Cette instruction effectue une rotation de 32 bits d'un oprande registre ou mmoire 32 bits d'un seul bit vers la gauche. Cette instruction effectue une rotation de 32 bits d'un oprande registre ou mmoire 32 bits avec le nombre de bits spcifi par le registre 1104

ROL reg/mem8, CL

D2h /0

ROL reg/mem8, imm8

C0h /0 ib

ROL reg/mem16, 1

D1h /0

ROL reg/mem16, CL

D3h /0

ROL reg/mem16, imm8

C1h /0 ib

ROL reg/mem32, 1

D1h /0

ROL reg/mem32, CL

D3h /0

CL vers la gauche. Cette instruction effectue une rotation de 32 bits d'un oprande registre ou mmoire 32 bits avec le nombre de bits spcifi par la valeur immdiate vers la gauche. Cette instruction effectue une rotation de 64 bits d'un oprande registre ou mmoire 64 bits d'un seul bit vers la gauche. Cette instruction effectue une rotation de 64 bits d'un oprande registre ou mmoire 64 bits avec le nombre de bits spcifi par le registre CL vers la gauche. Cette instruction effectue une rotation de 64 bits d'un oprande registre ou mmoire 64 bits avec le nombre de bits spcifi par la valeur immdiate vers la gauche.

ROL reg/mem32, imm8

C1h /0 ib

ROL reg/mem64, 1

D1h /0

ROL reg/mem64, CL

D3h /0

ROL reg/mem64, imm8

C1h /0 ib

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de pile ou n'est pas canonique Une adresse

#SS(Pile noncanonique)

#GP(Protection

1105

gnral)

mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement est activ

#PF(Faute de page)

#AC(Vrifie l'alignement)

Voir
1106

galement

Instruction Instruction Instruction

assembleur assembleur assembleur

80x86 80x86 80x86

Instruction Instruction Instruction

RCL RCR ROR

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 830 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 415 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 211. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 334 341.

1107

Assembleur 80x86 INTEL 8088+

ROR Rotate Right

Syntaxe
ROR oprandecible,nombredebits

Description Cette instruction permet d'effectuer une rotation des bits vers la droite en rinsrant le bit dans le bit le plus gauche libr.

Algorithme
temp max ( compteur, 31 ) SI temp = 1 ALORS OF highbit ( destination ) <> highbit ( destination dcalage droite ) SINON OF ? FIN SI BOUCLE FAIRE TANT QUE temp <> 0 x valeur 1 valeur valeur dcalage droite de 1 highbit ( valeur ) x temp temp - 1 BOUCLE FIN DE TANT QUE CF highbit ( valeur ) destination valeur

Mnmonique
Instruction Opcode Description

1108

ROR reg/mem8, 1

D0h /1

Cette instruction effectue une rotation de 8 bits d'un oprande registre ou mmoire 8 bits d'un seul bit vers la droite. Cette instruction effectue une rotation de 8 bits d'un oprande registre ou mmoire 8 bits avec le nombre de bits spcifi par le registre CL vers la droite. Cette instruction effectue une rotation de 8 bits d'un oprande registre ou mmoire 8 bits avec le nombre de bits spcifi par la valeur immdiate vers la droite. Cette instruction effectue une rotation de 16 bits d'un oprande registre ou mmoire 16 bits d'un seul bit vers la droite. Cette instruction effectue une rotation de 16 bits d'un oprande registre ou mmoire 16 bits avec le nombre de bits spcifi par le registre CL vers la droite. Cette instruction effectue une rotation de 16 bits d'un oprande registre ou mmoire 16 bits avec le nombre de bits spcifi par la valeur immdiate vers la droite. Cette instruction effectue une rotation de 32 bits d'un oprande registre ou mmoire 32 bits d'un seul bit vers la droite.

ROR reg/mem8, CL

D2h /1

ROR reg/mem8, imm8

C0h /1 ib

ROR reg/mem16, 1

D1h /1

ROR reg/mem16, CL

D3h /1

ROR reg/mem16, imm8

C1h /1 ib

ROR reg/mem32, 1

D1h /1

1109

ROR reg/mem32, CL

D3h /1

Cette instruction effectue une rotation de 32 bits d'un oprande registre ou mmoire 32 bits avec le nombre de bits spcifi par le registre CL vers la droite. Cette instruction effectue une rotation de 32 bits d'un oprande registre ou mmoire 32 bits avec le nombre de bits spcifi par la valeur immdiate vers la droite. Cette instruction effectue une rotation de 64 bits d'un oprande registre ou mmoire 64 bits d'un seul bit vers la droite. Cette instruction effectue une rotation de 64 bits d'un oprande registre ou mmoire 64 bits avec le nombre de bits spcifi par le registre CL vers la droite. Cette instruction effectue une rotation de 64 bits d'un oprande registre ou mmoire 64 bits avec le nombre de bits spcifi par la valeur immdiate vers la droite.

ROR reg/mem32, imm8

C1h /1 ib

ROR reg/mem64, 1

D1h /1

ROR reg/mem64, CL

D3h /1

ROR reg/mem64, imm8

C1h /1 ib

Exceptions
Message Mode rel Virtuel 8086 Mode protg Description Une adresse mmoire dpasse la limite du segment de

#SS(Pile noncanonique)

1110

pile ou n'est pas canonique #GP(Protection gnral) X X X Une adresse mmoire dpasse la limite du segment de donnes ou n'est pas canonique L'oprande de destination n'est pas dans un segment non crivable Un segment de donnes nulle est utilis comme rfrence mmoire Une faute de page rsultat de l'excution de l'instruction Un dsalignement de la rfrence mmoire est effectu quand une vrification d'alignement

#PF(Faute de page)

#AC(Vrifie l'alignement)

1111

est activ

Voir Instruction Instruction Instruction assembleur assembleur assembleur 80x86 80x86 80x86 Instruction Instruction Instruction

galement RCL RCR ROL

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 830 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 415 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 213. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 334 341.

1112

Assembleur 80x86
SSE4.1+

ROUNDPD
Round Packed Double Precision Floating-Point Values

Syntaxe
ROUNDPD destination, source, immediate

Description Cette instruction permet d'effectuer l'arrondissement de 2 valeurs rel de double prcision dans l'oprande source en utilisant le mode spcifi par l'oprande immdiate et place le rsultat dans l'oprande de destination.

Algorithme
SI immediate(2) = 1 ALORS destination(63..0) ConvertDPFPToInteger_M(source(63..0)) destination(127..64) ConvertDPFPToInteger_M(source(127..64)) SINON destination(63..0) ConvertDPFPToInteger_Imm(source(63..0)) destination(127..64) ConvertDPFPToInteger_Imm(source(127..64)) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer l'arrondissement de 2 valeurs rel de double prcision dans l'oprande source en utilisant le mode

ROUNDPD xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 09h /r ib

1113

spcifi par l'oprande immdiate et place le rsultat dans l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 378 381.

1114

Assembleur 80x86
SSE4.1+

ROUNDPS
Round Packed Single Precision Floating-Point Values

Syntaxe
ROUNDPS destination, source, immediate

Description Cette instruction permet d'effectuer l'arrondissement de 4 valeurs rel de simple prcision dans l'oprande source en utilisant le mode spcifi par l'oprande immdiate et place le rsultat dans l'oprande de destination.

Algorithme
SI immediate(2) = 1 ALORS destination(31..0) ConvertSPFPToInteger_M(source(31..0)) destination(63..32) ConvertSPFPToInteger_M(source(63..32)) destination(95..64) ConvertSPFPToInteger_M(source(95..64)) destination(127..96) ConvertSPFPToInteger_M(source(127..96)) SINON destination(31..0) ConvertSPFPToInteger_Imm(source(31..0)) destination(63..32) ConvertSPFPToInteger_Imm(source(63..32)) destination(95..64) ConvertSPFPToInteger_Imm(source(95..64)) destination(127..96) ConvertSPFPToInteger_Imm(source(127..96)) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet

ROUNDPS xmm1,xmm2/m128,imm8 66h 0Fh 3Ah 08h /r ib

1115

d'effectuer l'arrondissement de 4 valeurs rel de simple prcision dans l'oprande source en utilisant le mode spcifi par l'oprande immdiate et place le rsultat dans l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 382 384.

1116

Assembleur 80x86
SSE4.1+

ROUNDSD
Round Scalar Double Precision Floating-Point Values

Syntaxe
ROUNDSD destination, source, immediate

Description Cette instruction permet d'effectuer l'arrondissement scalaire de valeurs rel de double prcision, dans sa partie basse du quadruple mot, dans l'oprande source en utilisant le mode spcifi par l'oprande immdiate et place le rsultat dans l'oprande de destination.

Algorithme
SI immediate(2) = 1 ALORS destination(63..0) ConvertDPFPToInteger_M(source(63..0)) SINON destination(63..0) ConvertDPFPToInteger_Imm(source(63..0)) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer l'arrondissement scalaire de valeurs rel de double prcision, dans sa partie basse du quadruple mot, dans l'oprande source en utilisant le mode spcifi par l'oprande

ROUNDSD xmm1,xmm2/m64, imm8 66h 0Fh 3Ah 0Bh /r ib

1117

immdiate et place le rsultat dans l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 385 386.

1118

Assembleur 80x86
SSE4.1+

ROUNDSS
Round Scalar Single Precision Floating-Point Values

Syntaxe
ROUNDSS destination, source, immediate

Description Cette instruction permet d'effectuer l'arrondissement scalaire de valeurs rel de simple prcision, dans sa partie basse du quadruple mot, dans l'oprande source en utilisant le mode spcifi par l'oprande immdiate et place le rsultat dans l'oprande de destination.

Algorithme
SI immediate(2) = 1 ALORS destination(31..0) ConvertSPFPToInteger_M(source(31..0)) SINON destination(31..0) ConvertSPFPToInteger_Imm(source(31..0)) FIN SI

Mnmonique
Instruction Opcode Description Cette instruction permet d'effectuer l'arrondissement scalaire de valeurs rel de simple prcision, dans sa partie basse du quadruple mot, dans l'oprande source en utilisant le mode spcifi par l'oprande immdiate

ROUNDSS xmm1,xmm2/m32,imm8 66h 0Fh 3Ah 0Ah /r ib

1119

et place le rsultat dans l'oprande de destination.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 387 389.

1120

Assembleur 80x86
Cyrix Cx486S/S2/D/D2/DX/DX2/DX4, IBM BL486DX/DX2, TI 486SLC/DLC/e, TI 486SXL/SXL2/SXLC, TI Potomac
Syntaxe RSDC destination, source

RSDC
Restore Register and Descriptor

Description Cette instruction permet d'effectuer le restauration de la structure des registres et des descripteurs.

Algorithme destination[slecteur, descripteur] source

Mnmonique Instruction RSDC ES,mem80 Opcode Description

0Fh 79h (mm 000b mmm) Cette instruction permet d'effectuer le restauration de la structure des registres et des descripteurs partir du registre de segment ES. 0Fh 79h (mm 001b mmm) Cette instruction permet d'effectuer le restauration de la structure des registres et des descripteurs partir du registre de segment CS.
1121

RSDC CS,mem80

RSDC SS,mem80

0Fh 79h (mm 010b mmm) Cette instruction permet d'effectuer le restauration de la structure des registres et des descripteurs partir du registre de segment SS. 0Fh 79h (mm 011b mmm) Cette instruction permet d'effectuer le restauration de la structure des registres et des descripteurs partir du registre de segment DS. 0Fh 79h (mm 100b mmm) Cette instruction permet d'effectuer le restauration de la structure des registres et des descripteurs partir du registre de segment FS. 0Fh 79h (mm 101b mmm) Cette instruction permet d'effectuer le restauration de la structure des registres et des descripteurs partir du registre de segment GS.

RSDC DS,mem80

RSDC FS,mem80

RSDC GS,mem80

1122

Assembleur 80x86
Cyrix Cx486S/S2/D/D2/DX/DX2/DX4, IBM BL486DX/DX2, TI 486SLC/DLC/e, TI 486SXL/SXL2/SXLC, TI Potomac
Syntaxe RSLDT source

RSLDT
Restore LDTR and Descriptor

Description Cette instruction permet d'effectuer la restauration des LDTR et des descripteurs.

Algorithme LDTR[slecteur, descripteur] source

Mnmonique Instruction RSLDT mem80 Opcode Description

0Fh 7Bh (mm 000b mmm) Cette instruction permet d'effectuer la restauration des LDTR et des descripteurs.

1123

Assembleur 80x86
INTEL 80486+

RSM
Resume from System Management

Syntaxe
RSM

Description Cette instruction permet de retourner le contrle du programme du mode de gestion systme (SMM) pour le programme d'application ou la procdure du systme d'exploitation ayant t interrompu lorsque le microprocesseur recu un signal SSM.

Algorithme
Retourne du SSM ProcessorState Restaure le SSMDump

Mnmonique
Instruction Opcode Description Cette instruction permet de retourner le contrle du programme du mode de gestion systme (SMM) pour le programme d'application ou la procdure du systme d'exploitation ayant t interrompu lorsque le microprocesseur recu un signal SSM.

RSM

0Fh AAh

1124

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 390 391.

1125

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

RSQRTPS
Packed Single-Precision FP Square Root Reciprocal

Syntaxe
RSQRTPS destination, source

Description Cette instruction permet de calculer la rciproque approximative de la racine carr d'un paquet de simple prcision.

Algorithme
destination(31..0) APPROX(1.0 / SQRT(source(31..0))) destination(63..32) APPROX(1.0 / SQRT(source(63..32))) destination(95..64) APPROX(1.0 / SQRT(source(95..64))) destination(127..96) APPROX(1.0 / SQRT(source(127..96)))

Mnmonique
Instruction RSQRTPS xmm1,xmm2/m128 Opcode 0Fh 52h /r Description Cette instruction permet de calculer la rciproque approximative de la racine carr d'un paquet de simple prcision.

Rfrences
1126

Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 392 394.

1127

Assembleur 80x86
INTEL Pentium III (KNI/MMX2)+

RSQRTSS
Scalar Single-Precision FP Square Root Reciprocal

Syntaxe
RSQRTSS destination, source

Description Cette instruction permet de calculer la rciproque approximative de la racine carr d'un scalaire de simple prcision.

Algorithme
destination(31..0) APPROX(1.0 / SQRT(source(31..0)))

Mnmonique
Instruction RSQRTSS xmm1,xmm2/m128 Opcode F3h 0Fh 52h /r Description Cette instruction permet de calculer la rciproque approximative de la racine carr d'un scalaire de simple prcision.

Rfrences Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 395 397.
1128

Assembleur 80x86
Cyrix Cx486S/S2/D/D2/DX/DX2/DX4, IBM BL486DX/DX2, TI 486SLC/DLC/e, TI 486SXL/SXL2/SXLC, TI Potomac
Syntaxe RSTS source

RSTS
Restore TR and Descriptor

Description Cette instruction permet d'effectuer le restauration des TR et des descripteurs.

Algorithme TR[slecteur, descripteur] source

Mnmonique Instruction RSTS mem80 Opcode Description

0Fh 7Dh (mm 000b mmm) Cette instruction permet d'effectuer le restauration des TR et des descripteurs.

1129

Assembleur 80x86 INTEL 8088+

SAHF Store AH Into Flags

Syntaxe
SAHF

Description Cette instruction permet de copier les bits du registre AH dans l'octet de poids faible dans le registre des drapeaux (les indicateurs d'tat).

Algorithme
Registre de drapeaux Registre de drapeaux 0D5h + ( AH D5h )

Mnmonique
Instruction Opcode Description Copie le drapeau de signe, de zro, auxiliaire, de parit et de retenue dans le registre AH.

SAHF

9Eh

Exceptions
Message #UD(Opcode invalide) Mode rel Virtuel 8086 Mode protg X Description Cette instruction n'est pas support en

1130

mode 64 bits, comme indiqu par le bit 0 du registre ECX de la fonction 8000_00001h de l'instruction CPUID.

Voir Instruction assembleur 80x86 Instruction

galement LAHF

Rfrences Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 831 Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 416 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 215. Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 398 399.

1131

Assembleur 80x86 INTEL 8088+

SAL Shift Arithmetic Left

Syntaxe
SAL oprandecible,nombredebits

Description Cette instruction permet d'effectuer une rotation des bits vers la gauche en rinsrant le bit dans l'indicateur de retenue (CF).

Algorithme
temp compteur 001Fh BOUCLE FAIRE TANT QUE temp1 = 0 CF highorder ( destination ) destination destination dcalage gauche de 1 temp temp - 1 BOUCLE FIN DE FAIRE SI count = 1 ALORS OF highorder ( destination ) <> CF SINON OF ? FIN SI

Mnmonique
Instruction Opcode Description Cette instruction effectue un dclage d'un seul bit vers la gauche d'un oprande registre ou mmoire 8 bits.

SAL reg/mem8, 1

D0h /4

1132

SAL reg/mem8, CL

D2h /4

Cette instruction effectue un dclage du nombre de bits spcifi par le registre CL vers la gauche d'un oprande registre ou mmoire 8 bits. Cette instruction effectue un dclage du nombre de bits spcifi par la valeur immdiate vers la gauche de 8 bits d'un oprande registre ou mmoire 8 bits. Cette instru