Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    7

    [ASSEMBLY] Divisione con segno (sembra una banalità) :(

    È inutile. Proprio non riesco a capire come calcolarla a mano (cioè senza calcolatore).
    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è?

    Eppure:

    Se il calcolo sopra lo faccio con la calcolatrice(quindi dovrebbe fare un DIV e non IDIV), come risultato mi da 5555.
    Se il calcolo lo faccio a mano, tramite numeri binari, cioè 11111111111111111111 : 11 Mi da, in esadecimale 5555.
    Se faccio l' operazione di cui sopra ma facendo DIV BL (quindi senza segno), mi arriva il messaggio di OVERFLOW in Visual Studio.

    Ciò che chiedo è: qualcuno sa come funziona IDIV esattamente? Se dovessi farmi il calcolo a mano, intendo.

    Ci risentiamo presto(spero), grazie per l' attenzione.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [ASSEMBLY] Divisione con segno (sembra una banalità) :(

    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è?
    Il risultato mi sembra corretto ...

    Se il calcolo sopra lo faccio con la calcolatrice(quindi dovrebbe fare un DIV e non IDIV), come risultato mi da 5555.
    No ... la calcolatrice lavora in esadecimale senza segno ...

    Se il calcolo lo faccio a mano, tramite numeri binari, cioè 11111111111111111111 : 11 Mi da, in esadecimale 5555.
    Anche qui non hai considerato il segno ...

    Se faccio l' operazione di cui sopra ma facendo DIV BL (quindi senza segno), mi arriva il messaggio di OVERFLOW in Visual Studio.
    Corretto ...

    Ciò che chiedo è: qualcuno sa come funziona IDIV esattamente? Se dovessi farmi il calcolo a mano, intendo.
    Devi considerare il segno ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    7
    Grazie della risposta oregon. Scusa, ma sono un po' testone.
    Intendi che, nella divisione con segno tra FFFF e 3, devo convertire uno dei due in negativo, in complemento a 2, ad esempio "-3"? Quindi fare FFFF : FD(cioè -3 calcolato in complemento a 2)? In questo caso, non mi tornerebbe comunque. Sicuramente non ho ben capito.

  4. #4
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    L'istruzione IDIV considera anche AX come intero, quindi se gli assegni il valore FFFF, l'istruzione IDIV lo interpreta come -1. In questo caso la tua operazione sarà -1/3 e quindi è giusto che in AL ci sia 0 (quoziente) e in AH ci sia FF (il resto) ovvero -1.
    Crestron Control Systems and AMX Control Systems Programmer

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Abel
    Intendi che, nella divisione con segno tra FFFF e 3, devo convertire uno dei due in negativo, in complemento a 2, ad esempio "-3"?
    Non devi convertire nulla ... devi considerare i valori con il segno ...

    FFFF in complemento a 2 vale -1
    3 in complemento a 2 vale 3

    risultato

    FF in complemento a 2 vale -1

    resto

    0

    E in effetti

    -1 diviso 3 -> risultato 0 (in AL) resto -1 (in AH)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    7
    Grazie sotoli e oregon, siete stati molto chiari.
    In effetti non mi tornavano per nulla i conti, così invece è tutto sistemato. ^__^
    Grazie mille ancora, ciao!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.