imul instructions de montage - un opérande?
Je suis l'aide d'un débogueur.
EAX: 0000 0023
EDX: 5555 5556
imul edx
EAX: aaaa aac2
EDX: 0000 000 b
Je suis tout à fait confus, et ne peut pas comprendre comment cela est multiplication de travail. Ce qui se passe ici? Je remarque que dans une semblable la question ici que imul ebx ; result in EDX:EAX
je ne comprends pas le EDX:EAX notation :/
OriginalL'auteur Joshua Enfield | 2010-09-29
Vous devez vous connecter pour publier un commentaire.
Lorsqu'un opérande forme de
imul
est passé d'un argument de 32 bits (comme dans votre cas avecEDX
) cela signifieEAX * EDX
où les deuxEAX
etEDX
sont en 32 bits des registres.Le produit de deux 32 bits n'est pas nécessairement en 32 bits: le plein multiplier le résultat peut prendre jusqu'à 64 bits. Le haut de 32 bits de la réponse sera écrite à la
EDX
registre et le faible 32 bits à laEAX
registre; il est représenté avec laEDX:EAX
notation.Si vous voulez seulement le faible 32 bits du résultat, l'utilisation de la 2-opérande forme de
imul
; il s'exécute plus rapidement et ne pas avoir l'implicite opérandes (de sorte que vous pouvez utiliser tous les registres sont plus pratique).imul ecx, esi
neecx *= esi
comme vous vous attendez, sans toucherEAX
ouEDX
. C'est comme C le casunsigned x=...;
x *= y;
a la même largeur pour le résultat que les entrées.imul
a aussi une forme immédiate:imul ecx, ebx, 1234
neecx = ebx * 1234
. De nombreux assembleurs accepteraimul ecx, 1234
comme à court de main pourimul ecx, ecx, 1234
.Ces 32x32 => 32-bit formes de
imul
fonctionner correctement signés ou non signés; les résultats d'un opérandemul
etimul
ne diffèrent que dans la moitié supérieure (enEDX
), pas le bas de la moitiéEAX
de sortie.Voir Intel instructions du manuel de référence de l'entrée de
imul
.imul
esteax
? Faut-il encore faire la même chose? Que faire si vous lui donnez quelque chose d'autre queeax
ouedx
, commeeax
par exemple?Il existe de nombreuses formes de la imul instruction. La forme que prend un seul 32bit argument (de mémoire ou registre) renvoie toujours le résultat dans le registre EDX:EAX paire.
OriginalL'auteur Chris Taylor