débordement de la division masm
Question
Je suis en train Divise deux nombres dans l'assemblage. Je travaille sur l'ensemble Irvine pour les ordinateurs intel livre et je ne peux pas faire le travail de division pour la vie de moi.
Voici mon code
.code
main PROC
call division
exit
main ENDP
division PROC
mov eax, 4
mov ebx, 2
div ebx
call WriteDec
ret
divison ENDP
END main
Où WriteDec devrait écrire ce nombre est dans le registre eax (doit être réglé sur le quotient après l'appel de la division). Au lieu de cela chaque fois que je le lance tombe en panne visual studio (le programme ne compile toutefois).
La solution
Vous devez zéro étendre votre registre EDX avant de faire la division:
mov eax, 4
mov ebx, 2
xor edx, edx ;set edx to zero
div ebx
call WriteDec
;set edx to zero
est un commentaire dans MASM. Je ne sais pas si ça va marcher si vous utilisez l'assembleur en ligne en C, donc ne copie pas si vous êtes:)
Autres conseils
Oui, vous devez définir edx
à zéro.
La façon de faire est plus facile:
xor edx, edx
Je pense que la raison mentionnée ci-dessus est correct parce que quand u diviser EAX par EBX les deux sont 32 numéros de bits, mais le dividende doit être 64 bits diviseur est 32 bits et il considère donc que le EDX msb ... u peut faire EDX 0 ou au lieu d'utiliser uniquement l'utilisation de 3BX bx..in cette façon u diviser un nombre de 32 bits par un nombre de 16 bits