Introduction à la programmation en assembleur (processeurs 64 bits de la famille 80x86)
9.1.1. Multiplication non signée
Définition
  • mulb <x8> effectue la multiplication du contenu du registre al avec le contenu de x8 qui est soit l'emplacement d'un octet, soit un registre de 8 bits. Le résultat est stocké dans le registre 16 bits ax.

  • mulw <x16> effectue la multiplication du contenu du registre ax avec le contenu de x16 qui est soit l'emplacement d'un mot de 16 bits, soit un registre 16 bits. Le résultat est stocké dans dx:ax. Autrement dit, le mot (16 bits) de poids faible du résultat est stocké dans ax et le mot (16 bits) de poids fort dans dx. On peut se demander pourquoi le résultat n'est pas stocké dans eax. C'est pour une simple raison historique conservée par les contraintes de compatibilité : le registre eax n'existait pas dans le 8086.

  • mull <x32> effectue la multiplication du contenu du registre eax avec le contenu de x32 qui est soit l'emplacement d'un mot de 32 bits, soit un registre 32 bits. Le résultat est stocké dans edx:eax. Autrement dit, le mot (32 bits) de poids faible du résultat est stocké dans eax et le mot (32 bits) de poids fort dans edx.

  • mulq <x64> effectue la multiplication du contenu du registre rax avec le contenu de x64 qui est soit l'emplacement d'un mot de 64 bits, soit un registre 64 bits. Le résultat est stocké dans rdx:rax. Autrement dit, le mot de 64 bits de poids faible du résultat est stocké dans rax et le mot de 64 bits de poids fort dans rdx.

  • Les drapeaux OF et CF du registre d'état RFLAGS sont mis à 0 si la moitié supérieure des bits du résultat (ah, dx, edx ou rdx) est à 0, les deux drapeaux sont mis à 1 dans le cas contraire.