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).

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top