transbordamento da divisão de meras
Pergunta
Estou tentando dividir dois números na montagem. Estou trabalhando fora da Assembléia de Irvine para o Intel Computers Book e não posso fazer a divisão funcionar para a minha vida.
Aqui está o meu 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
Onde o WritedEC deve escrever qualquer número no registro da EAX (deve ser definido como o quociente após a chamada da divisão). Em vez disso, toda vez que eu executar o Visual Studio trava (o programa compila).
Solução
Você precisa zero estender seu registro EDX antes de fazer a divisão:
mov eax, 4
mov ebx, 2
xor edx, edx ;set edx to zero
div ebx
call WriteDec
a ;set edx to zero
é um comentário na MASM. Não sei se funcionará se você estiver usando a montagem embutida em C, então não copie se for :)
Outras dicas
Sim, você precisa definir edx
a zero.
A maneira mais fácil de fazer isso é:
xor edx, edx
Eu acho que a razão acima mencionada está correta porque, quando você divide o EAX pelo EBX, ambos são números de 32 bits, mas o dividendo precisa ser de 64 bits divisor é de 32 bits e, portanto, considera o edx como o msb ... você pode fazer Edx 0 ou, em vez disso, de usar 3bx Use apenas BX..ENTA PORTA, você dividirá um número de 32 bits por um número de 16 bits