[Assembly] Moltiplicazione MIPS
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?
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
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..
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.
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.
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..