[Assembly] Moltiplicazione MIPS

Messaggioda Fabbioo » 15/05/2018, 11:40

Buongiorno a tutti.
Sono alle prese con un esercizio in Assembly (processore MIPS) che mi chiede di calcolare la velocità di una ipotetica automobile. Posso usare la formula $v= (s)/(t)$ e conosco sia lo spazio percorso ($s=1$) sia il tempo di percorrenza ($t=4*10^(-9)$).
Non ho mai fatto un esercizio in questo linguaggio e proprio non riesco ad implementare queste operazioni che con un C++ o Java sono elementari.
Qualcuno mi saprebbe dare un aiuto?
Fabbioo
Junior Member
Junior Member
 
Messaggio: 146 di 346
Iscritto il: 02/11/2017, 14:07

Re: [Assembly] Moltiplicazione MIPS

Messaggioda apatriarca » 16/05/2018, 23:59

Direi che dovrebbe essere sufficiente copiare i valori in due registri e poi usare div.s o div.d a seconda del tipo di dato che stai usando..
apatriarca
Moderatore
Moderatore
 
Messaggio: 5050 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [Assembly] Moltiplicazione MIPS

Messaggioda Fabbioo » 18/05/2018, 12:21

Il problema è che il mio prof non vuole che usiamo le istruzioni per la virgola mobile.
Saresti così gentile da spiegarmi i passaggi che si devono susseguire per convertire $100(km)/h$ in $27,78m/s$?
Mi spiego meglio: per convertire da $(km)/h$ a $m/s$ occorre dividere il numero per $3,6$, e fino a qui nulla da dire, ma come si fa a "mettere insieme" i due risultati provenienti dai registri HI e LO?
So che bisogna usare le istruzioni mfhi e mflo, ma in questo modo credo che i risultati dei registri HI e LO vengano messi in due registri diversi, non in uno solo come vorrei.

Non avendo dimestichezza con questo linguaggio la mia domanda è banale e me ne rendo conto, ma non riesco a trovare nessuna soluzione.
Fabbioo
Junior Member
Junior Member
 
Messaggio: 147 di 346
Iscritto il: 02/11/2017, 14:07

Re: [Assembly] Moltiplicazione MIPS

Messaggioda apatriarca » 18/05/2018, 12:26

Non ho alcuna esperienza con MIPS per cui non ti so dire quale sia il metodo migliore. Puoi comunque sempre fare come faresti in C e quindi usare degli shift e una maschera. Qualcosa tipo (a << k) | (b & ((1 << k) - 1))). Ovviamente puoi precalcolare la maschera o ignorarla del tutto se sai che il tuo valore è già compreso nell'intervallo desiderato..
apatriarca
Moderatore
Moderatore
 
Messaggio: 5052 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite