PDA

Visualizza la versione completa : [ASSEMBLY] MUL a 64 bit


alsa81
29-01-2007, 13:50
Ciao a tutti. Sono una studentessa alle prime armi con assembler e mi è stato assegnato un esercizio in cui mi viene chiesto di accettare da tasiera un numero compreso tra 2 e 9 e stamparne, prima in decimale e poi in binario, tutte le potenze fino ad avere un risultato che non superi i 64 bit. Ho letto alcuni manuali e ho visto che la moltiplicazione (MUL)utilizza i registri in base al risultato ottenuto, quindi se viene moltiplicato un numero a 8 bit con un numero presente nel registro AL il risultato sarà salvato nel registro AX a 16 bit, e così via... Ma come faccio quando, nel mio caso, si tratta di manipolare numeri fino a 64 bit?
Come posso utilizzare la MUL?
Ringrazio anticipatamente coloro che mi risponderanno. :ciauz: :ciauz:

andbin
29-01-2007, 14:13
Originariamente inviato da alsa81
Ciao a tutti. Sono una studentessa alle prime armi con assembler e mi è stato assegnato un esercizio in cui mi viene chiesto di accettare da tasiera un numero compreso tra 2 e 9 e stamparne, prima in decimale e poi in binario, tutte le potenze fino ad avere un risultato che non superi i 64 bit. Ho letto alcuni manuali e ho visto che la moltiplicazione (MUL)utilizza i registri in base al risultato ottenuto, quindi se viene moltiplicato un numero a 8 bit con un numero presente nel registro AL il risultato sarà salvato nel registro AX a 16 bit, e così via... Ma come faccio quando, nel mio caso, si tratta di manipolare numeri fino a 64 bit?
Come posso utilizzare la MUL?
Ringrazio anticipatamente coloro che mi risponderanno. :ciauz: :ciauz: Ti è stato detto che devi usare solo registri a 16 bit o anche quelli a 32 bit???
In ogni caso dovresti realizzare una moltiplicazione a "precisione multipla", perché dovresti fare una moltiplicazione 64 bit x 64 bit.

alsa81
29-01-2007, 14:38
No, non mi è stato detto di utilizzare solo registri a 64 bit.

alsa81
29-01-2007, 14:40
Non ho mai sentito parlare di moltiplicazione a precisione multipla, come funziona?

andbin
29-01-2007, 15:28
Originariamente inviato da alsa81
Non ho mai sentito parlare di moltiplicazione a precisione multipla, come funziona? È molto semplice, te lo spiego a parole ... anzi con uno schema.

Immagina di dover moltiplicare 16 bit x 16 bit ma tu, ad esempio, hai solo istruzioni per fare 8 bit x 8 bit (con risultato su 16 bit).


8 bit 8 bit
/ | \

+-----+-----+
| A | B | x
+-----+-----+
+-----+-----+
| C | D | =
+-----+-----+
-------------------------------
+-----+-----+
| B x D | +
+-----+-----+
+-----+-----+
| A x D | +
+-----+-----+
+-----+-----+
| B x C | +
+-----+-----+
+-----+-----+
| A x C | =
+-----+-----+
-------------------------------
+-----+-----+-----+-----+
| Risultato su 32 bit |
+-----+-----+-----+-----+
Poi se tenere il risultato su 32 bit o solo su 16 bit (con eventualmente l'indicazione di overflow), dipende dalle specifiche necessità.

Insomma ... se non puoi fare moltiplicazioni tra operandi a N bit ma puoi farle con operandi di M bit (con M < N), allora puoi risolvere la moltiplicazione con una serie di moltiplicazioni tra le sottoparti degli operandi, con sommatoria finale dei semi-risultati.

alka
29-01-2007, 17:22
Manca il linguaggio nel titolo, come richiesto dal Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

Ho inserito Assembly... se non dovesse essere quello corretto, fammi sapere.

Ciao! :ciauz:

alsa81
23-02-2007, 14:46
In assembly, quando dichiaro una variabile lo posso fare come DB o DW. Come posso fare per dichiarare una variabile a 32 bit?

alka
23-02-2007, 15:07
Originariamente inviato da alsa81
In assembly, quando dichiaro una variabile lo posso fare come DB o DW. Come posso fare per dichiarare una variabile a 32 bit?
Ricordati di aprire una nuova discussione per ogni quesito, a meno che lo stesso problema non sia stato affrontato (e risolto) in passato.

oregon
23-02-2007, 15:37
DD

Loading