Il risultato mi sembra corretto ...Originariamente inviato da Abel
Ma andiamo con ordine e faccio subito un esempio(valori espressi in esadecimale):
AX = FFFF (è un registro a 16 bit)
BL = 03 (è un registro a 8 bit)
IDIV BL
Nella divisione tra un numero a 16 bit con uno a 8 bit, il risultato è messo in AL e il resto in AH (almeno quando si lavora con IDIV, c' è il resto). Eseguendo questa operazione con l' assembler di visual studio, mi da:
AL (risultato) = 00
AH (resto)= FF
Ma perchè?
No ... la calcolatrice lavora in esadecimale senza segno ...Se il calcolo sopra lo faccio con la calcolatrice(quindi dovrebbe fare un DIV e non IDIV), come risultato mi da 5555.
Anche qui non hai considerato il segno ...Se il calcolo lo faccio a mano, tramite numeri binari, cioè 11111111111111111111 : 11 Mi da, in esadecimale 5555.
Corretto ...Se faccio l' operazione di cui sopra ma facendo DIV BL (quindi senza segno), mi arriva il messaggio di OVERFLOW in Visual Studio.
Devi considerare il segno ...Ciò che chiedo è: qualcuno sa come funziona IDIV esattamente? Se dovessi farmi il calcolo a mano, intendo.