Pregunta

Estoy intentando dividir dos números en el montaje. Estoy trabajando fuera del conjunto de Irvine para el libro de ordenadores Intel y no puedo hacer el trabajo de división para la vida de mí.

Aquí está mi código

.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

Cuando WriteDec debe escribir cualquier número que se encuentra en el registro EAX (debe estar configurado en el cociente después de la llamada división). En su lugar cada vez que ejecuto accidentes estudio visuales (el programa se compila sin embargo).

¿Fue útil?

Solución

Es necesario poner a cero ampliar su registro EDX antes de hacer la división:

mov eax, 4
mov ebx, 2
xor edx, edx          ;set edx to zero
div ebx
call WriteDec

la ;set edx to zero es un comentario en MASM. No sé si funcionará si está utilizando ensamblador en línea en C, por lo que no copiarlo si:)

Otros consejos

Sí, es necesario establecer edx a cero.

La forma más sencilla de hacer esto es:

xor edx, edx

Creo que la razón mencionada anteriormente es correcta, porque cuando u dividen eax por EBX ambos son números de 32 bits, pero el dividendo es necesario que haya 64 bits divisor es de 32 bits y por lo que considera EDX como el bit más significativo ... u puede hacer EDX 0 o en lugar de utilizar únicamente el uso 3BX bx..in de esa manera u se divide un número de 32 bits por un número de 16 bits

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top