Accueil de Gladir.com Notes légal de Gladir.com Flux RSS des nouvelles du site Gladir.com - Assembleur et Pascal - Instruction assembleur 80x86 - Instruction IMUL Section du logiciel DOS «MonsterBook» Inventaire de la bibliothèque de Gladir.com Entrée administrateur


Assembleur 80x86

IMUL

INTEL 8088+

Multiplication entière


Syntaxe

IMUL Opérande INTEL 8088+
IMUL dest, src INTEL 80286+
IMUL dest, src, imm INTEL 80386+


Description

Cette instruction permet d'effectuer une multiplication signée (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 détermine quel registre l'instruction utilisera:

Taille Base Multiplicateur Résultat
Octet AL Opérande AX
Mot AX Opérande DX:AX
Double mot EAX Opérande EDX:EAX


Algorithme

SI Nombre d'opérande = 1 ALORS
   SI Taille de l'opérande en bits = 8 ALORS
      AX ← AL x Opérande
      SI (AH = 00h) OU (AH = FFh) ALORS
         CF ← 0
         OF ← 0
      SINON
         CF ← 1
         OF ← 1
      FIN SI
   SINON SI Taille de l'opérande en bits = 16 ALORS
         DX:AX ← AX x Opérande
         SI (DX = 0000h) OU (DX = FFFFh) ALORS
            CF ← 0
            OF ← 0
         SINON
            CF ← 1
            OF ← 1
         FIN SI
      SINON
         EDX:EAX ← EAX x Opérande
         SI ((EDX = 00000000h) OU (EDX = FFFFFFFFh)) ALORS
            CF ← 0
            OF ← 0
         SINON
            CF ← 1
            OF ← 1
         FIN SI
      FIN SI
   SINON SI Nombre d'opérande = 2 ALORS
      temp ← dest x src
      destdest x src
      SI temp = dest ALORS
         CF ← 1
         OF ← 1
      SINON
         CF ← 0
         OF ← 0
      FIN SI
   SINON
      temp ← dest x src
      destdest x src
      SI temp = dest ALORS
         CF ← 1
         OF ← 1
      SINON
         CF ← 0
         OF ← 0
      FIN SI
   FIN SI
FIN SI


Mnémonique

Instruction Opcode Description
IMUL reg/mem8 F6h /5 Multiplie le contenu du registre AL avec une opérande mémoire ou registre de 8 bits et met le résultat entier dans le registre AX.
IMUL reg/mem16 F7h /5 Multiplie le contenu du registre AX avec une opérande mémoire ou registre de 16 bits et met le résultat entier dans le registre DX:AX.
IMUL reg/mem32 F7h /5 Multiplie le contenu du registre EAX avec une opérande mémoire ou registre de 32 bits et met le résultat entier dans le registre EDX:EAX.
IMUL reg/mem64 F7h /5 Multiplie le contenu du registre RAX avec une opérande mémoire ou registre de 64 bits et met le résultat entier dans le registre RDX:RAX.
IMUL reg16, reg/mem16 0Fh AFh /r Multiplie le contenu d'un registre de destination 16 bits avec une opérande mémoire ou registre de 16 bits et met le résultat entier dans le registre de destination 16 bits.
IMUL reg32, reg/mem32 0Fh AFh /r Multiplie le contenu d'un registre de destination 32 bits avec une opérande mémoire ou registre de 32 bits et met le résultat entier dans le registre de destination 32 bits.
IMUL reg64, reg/mem64 0Fh AFh /r Multiplie le contenu d'un registre de destination 64 bits avec une opérande mémoire ou registre de 64 bits et met le résultat entier dans le registre de destination 64 bits.
IMUL reg16, reg/mem16, imm8 6Bh /r ib Multiplie le contenu d'une opérande mémoire ou registre de 16 bits par une valeur entière immédiate de 8 bits et met le résultat entier dans le registre 16 bits.
IMUL reg32, reg/mem32, imm8 6Bh /r ib Multiplie le contenu d'une opérande mémoire ou registre de 32 bits par une valeur entière immédiate de 8 bits et met le résultat entier dans le registre 32 bits.
IMUL reg64, reg/mem64, imm8 6Bh /r ib Multiplie le contenu d'une opérande mémoire ou registre de 64 bits par une valeur entière immédiate de 8 bits et met le résultat entier dans le registre 64 bits.
IMUL reg16, reg/mem16,imm16 69h /r iw Multiplie le contenu d'une opérande mémoire ou registre de 16 bits par une valeur entière immédiate de 16 bits et met le résultat entier dans le registre 16 bits.
IMUL reg32, reg/mem32,imm32 69h /r id Multiplie le contenu d'une opérande mémoire ou registre de 32 bits par une valeur entière immédiate de 32 bits et met le résultat entier dans le registre 32 bits.
IMUL reg64, reg/mem64,imm32 69h /r id Multiplie le contenu d'une opérande mémoire ou registre de 64 bits par une valeur entière immédiate de 32 bits et met le résultat entier dans le registre 64 bits.


Exceptions

Message Mode réel Virtuel 8086 Mode protégé Description
#AC(Vérifie l'alignement)   X X Un désalignement de la référence mémoire est effectué quand une vérification d'alignement est activé
#GP(Protection général) X X X Une adresse mémoire dépasse la limite du segment de données ou n'est pas canonique
    X Un segment de données nulle est utilisé comme référence mémoire
#PF(Faute de page)   X X Une faute de page résultat de l'exécution de l'instruction
#SS(Pile non-canonique) X X X Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique


Voir également

Instruction assembleur 80x86 - Instruction IDIV
Instruction assembleur 80x86 - Instruction MUL


Références

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 Developer’s Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 563 à 567.

Dernière mise à jour: Lundi, le 28 décembre 2009