masm troppopieno divisione
Domanda
sto cercando divide due numeri in assemblea. Sto lavorando fuori dal gruppo Irvine per i computer Intel libro e non riesco a far funzionare la divisione per la vita di me.
Ecco il mio codice
.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
Dove WriteDec dovrebbe scrivere qualunque sia il numero è nel registro EAX (dovrebbe essere impostato al quoziente dopo la chiamata divisione). Invece ogni volta che l'eseguo Studio si blocca visivi (il programma non compila comunque).
Soluzione
È necessario azzerare estendere registrare l'EDX prima di fare la divisione:
mov eax, 4
mov ebx, 2
xor edx, edx ;set edx to zero
div ebx
call WriteDec
la ;set edx to zero
è un commento in MASM. Non so se funzionerà se si utilizza assembly inline in C, in modo da non copiare se siete:)
Altri suggerimenti
Si, è necessario impostare edx
a zero.
Il modo più semplice per farlo è:
xor edx, edx
i che il motivo sopra citato è corretto poiché quando u dividere eax da ebx entrambi sono numeri 32 bit, ma il dividendo deve essere 64 bit divisore è 32 bit e quindi considera edx come msb ... u può fare edx 0 o invece di utilizzare uso 3BX solo bx..in questo modo u dividere un numero a 32 bit da un numero a 16 bit