Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-05-2016, 19:45   #1
Titti92
Member
 
Iscritto dal: Aug 2013
Messaggi: 68
Prodotto tra interi a 64bit

Sto utilizzando Assembly MIPS, ma la mia è una domanda più che altro di carattere generale. Devo fare il prodotto tra due interi a 64 bit, quindi salvati ciascuno in due registri a 32bit (facciamo per esempio che uno sia in $a0,$a1 e l'altro in $a2,$a3, dove il numero del registro più basso indica che vi è la parte meno significativa del numero). So che per trovare il prodotto devo fare:
Codice:
$v0=LO(a0*a3)
$v1=HI(a0*a2)+LO(a1*a2)+LO(a0*a3)
dove HI e LO sono due registri di appoggio utilizzati dall'istruzione MULT (prodotto tra deu reg. a 32 bit) del Mips, quindi in HI ci va la parte alta del prodotto e in LO la parte bassa. E' giusto quello che ho detto? E se sì, mi potete spiegare perché? Dovrei fare anche il prodotto tra interi a 64 e riportarlo a 128 bito quindi vorrei capire come funziona questo primo prodotto.
Titti92 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2016, 14:02   #2
Titti92
Member
 
Iscritto dal: Aug 2013
Messaggi: 68
nessuno?
Titti92 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2016, 18:35   #3
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non conosco adeguatamente l'architettura MIPS, ma probabilmente con questo risolvi: https://bytes.com/topic/c/answers/21...multiplication
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2016, 14:46   #4
Titti92
Member
 
Iscritto dal: Aug 2013
Messaggi: 68
Grazie! Comunque la mia è una domanda un po' generica, non proprio soltanto dell'archtettura MIPS.
Titti92 è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2016, 18:26   #5
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
OK, allora potresti spiegare prima cosa intendi con questo:

LO(a0*a3)

?

Se LO è un registro che contiene la parte bassa del risultato di una moltiplicazione, non capisco che ruolo abbia nell'espressione che hai usato, visto che a0*a3 dovrebbe rappresentare il prodotto di quei due registri.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2016, 09:02   #6
Titti92
Member
 
Iscritto dal: Aug 2013
Messaggi: 68
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
OK, allora potresti spiegare prima cosa intendi con questo:

LO(a0*a3)

?

Se LO è un registro che contiene la parte bassa del risultato di una moltiplicazione, non capisco che ruolo abbia nell'espressione che hai usato, visto che a0*a3 dovrebbe rappresentare il prodotto di quei due registri.
L'operazione di moltiplicazione restituisce un numero a 64 bit, diviso su due registri a 32 bit: LO e HI, il primo contiene la parte bassa del risultato e l'altro la parte alta. Con LO(a0*a3) intendevo dire che prendo la parte bassa di quel prodotto.
Titti92 è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2016, 20:04   #7
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
OK. Allora partiamo dallo pseudocodice di quello che devi eseguire. Ho trovato un post semplice qui che descrive la classica operazione di moltiplicazione a precisione più elevata, sfruttando 4 istruzioni di moltiplicazione a metà precisione:
Codice:
      A2A1
x     B2B1
----------
      B1A1
+   B1A2
+   B2A1
+ B2A2
----------
  C4C3C2C1
Alla fine ho aggiunto degli pseudoregistri anche per i 4 valori a 32-bit che conterranno il valore a 128-bit prodotto dall'operazione, in modo da rendere visivamente dove andranno a finire i risultati parziali.

Supponendo che siano tutti registri a 32-bit, B1A1 lo devi tradurre nell'istruzione MIPS di moltiplicazione 32x32 (senza segno), che produrrà i risultati in LO e HI.

Al primo passo semplicemente li conserverai LO in C1 (che rimarrà tale) e HI in C2, mentre mettera che devono contenere il risultato finale, a 128-bit, dell'operazione di moltiplicazione.

Per il secondo passo ti consiglierei di calcolare B2A2, copiando poi LO in C3 e HI in C4.

A questo punto devi eseguire i due prodotti intermedi, e sommare i risultati a C2 con somma semplice, a C3 con somma con riporto (che può provenire dalla precedente somma), e sommare zero + riporto (che può provenire dalla precedente somma) a C4.

Penso sia tutto. Ovviamente la stessa cosa vale per la moltiplicazione 128x128 -> 256 bit.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2016, 08:04   #8
Titti92
Member
 
Iscritto dal: Aug 2013
Messaggi: 68
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
OK. Allora partiamo dallo pseudocodice di quello che devi eseguire. Ho trovato un post semplice qui che descrive la classica operazione di moltiplicazione a precisione più elevata, sfruttando 4 istruzioni di moltiplicazione a metà precisione:
Codice:
      A2A1
x     B2B1
----------
      B1A1
+   B1A2
+   B2A1
+ B2A2
----------
  C4C3C2C1
Alla fine ho aggiunto degli pseudoregistri anche per i 4 valori a 32-bit che conterranno il valore a 128-bit prodotto dall'operazione, in modo da rendere visivamente dove andranno a finire i risultati parziali.

Supponendo che siano tutti registri a 32-bit, B1A1 lo devi tradurre nell'istruzione MIPS di moltiplicazione 32x32 (senza segno), che produrrà i risultati in LO e HI.

Al primo passo semplicemente li conserverai LO in C1 (che rimarrà tale) e HI in C2, mentre mettera che devono contenere il risultato finale, a 128-bit, dell'operazione di moltiplicazione.

Per il secondo passo ti consiglierei di calcolare B2A2, copiando poi LO in C3 e HI in C4.

A questo punto devi eseguire i due prodotti intermedi, e sommare i risultati a C2 con somma semplice, a C3 con somma con riporto (che può provenire dalla precedente somma), e sommare zero + riporto (che può provenire dalla precedente somma) a C4.

Penso sia tutto. Ovviamente la stessa cosa vale per la moltiplicazione 128x128 -> 256 bit.
Grazie mille!
Titti92 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Oppo Find X10, X10 Pro Max e X10 E: conf...
Dal microscopio all'IA: un cervello di i...
Cyberpunk 2077 arriverà su Battle...
Altro che divieto: interi pallet di GeFo...
QNAPTS-h966TX, il NAS per chi fa editing...
Il trucco semplicissimo per installare W...
Apple rinvia due novità di iOS 27...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v