[Assembly] Moltiplicazione MIPS

fabio.mandalari
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?

Risposte
apatriarca
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..

fabio.mandalari
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.

apatriarca
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..

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.