masm desbordamiento de división
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).
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