2009-08-15 10 views
14

Così sto imparando MIPS utilizzando il simulatore SPIM e mi sono bloccato su questo problema.Aggiunta di due numeri a 64 bit nell'assieme

voglio aggiungere due numeri a 64 bit che vengono memorizzati in quattro registri a 32 bit. Quindi aggiungo i byte LO e quindi i byte carry e HI. Ma non esiste un comando adc/addc, ad esempio con carry.

Quindi avrei dovuto aggiungere il bit di riporto nel registro di stato. Ma, esattamente come leggo questo registro?

Se $ t0 è il registro temporaneo 1, quindi quello che è l'equivalente di registro di stato che detiene il carry flag?

Googled un sacco Io ancora non riesco a trovare alcun esempio che anche utilizzano il registro di stato.

+0

non c'è stato o bandiera registro in MIPS –

risposta

21

Add $ t2 t3 $ + $ t4 $ t5, si traducono in $ t0 $ t1

addu $t1, $t3, $t5 # add least significant word 
sltu $t0, $t1, $t5 # set carry-in bit 
addu $t0, $t0, $t2 # add in first most significant word 
addu $t0, $t0, $t4 # add in second most significant word 

Per la seconda parte della tua domanda, non esiste un registro di stato. Proprio nessuno. Nada.

+0

Grazie. Ha senso perché non sono riuscito a trovare il registro di stato :) La tua risposta funziona perfettamente. C'è qualche posto con suggerimenti su una migliore codifica MIPS? –

+0

Ce ne sono pochi. Per me, la meditazione sulla fonte di altre persone o l'osservazione di un objdump -S funziona. Puoi imparare dalle rare occasioni in cui un compilatore fa qualcosa di giusto, ma puoi imparare ancora di più dai luoghi, dove producono del tutto da schifo, come al solito ;-) http://www.cs.unibo.it/~ solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf fornisce anche alcuni suggerimenti utili. – hirschhornsalz

+0

Ottima soluzione. Mi piace quando le soluzioni a problemi apparentemente di- verso (IMHO) sono così eleganti. – Derek

Problemi correlati