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).

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top