2012-03-20 10 views
5

Sto cercando di eseguire il seguente codice in assembly:Ottenere floating eccezione punto durante il tentativo di utilizzare div in assemblea

mov  %si, %ax 
    mov  $15, %si 
    div  %si 
    mov  %eax, %esi 

Quando faccio il mio programma, si compila, ma in fase di esecuzione mi dà una virgola mobile eccezione. Ho provato a sostituire i parametri dell'ultima riga con %ah e %si.

In breve, sto cercando di dividere %esi per 15. Voglio solo uno int e non ho bisogno di uno double.

Grazie

risposta

13

L'istruzione div divide il parametro di due parole dx/ax dalla operando. Se il quoziente è troppo grande per rientrare in una parola, genererà quell'eccezione.

Riferimento: http://siyobik.info.gf/main/reference/instruction/DIV

Cosa avete nel registro delle dx? Molto probabilmente dx/ax diviso per 15 non rientra in una parola di 16 bit.

+0

Nulla (o roba casuale), ho pensato che la mia operazione fosse% si /% ax, che è stata memorizzata in% ax – juliensaad

+1

Quindi sarà necessario cancellare (impostare su zero) il registro 'dx'. Perché rappresenta i primi 16 bit del dividendo di input. – Mysticial

+0

Ha funzionato! Grazie mille, risponderò la risposta tra 7 minuti – juliensaad

Problemi correlati