2009-08-15 5 views
14

Tak więc uczę się MIPS przy użyciu symulatora SPIM i utknąłem w tym problemie.Dodawanie dwóch 64-bitowych liczb w zespole

Chcę dodać dwa 64-bitowe numery, które są przechowywane w czterech 32-bitowych rejestrach. Dodaję więc bajty LO, a następnie bajty carry i HI. Ale nie ma polecenia adc/addc, np. Dodaj z przeniesieniem.

Więc musiałbym dodać bit noszenia w rejestrze stanu. Ale jak dokładnie czytam ten rejestr?

Jeśli $ t0 jest rejestrem tymczasowym 1, to jaki jest odpowiednik rejestru statusu, który przechowuje flagę carry?

Wiele googlowałem, ale nadal nie mogę znaleźć przykładów, które wykorzystywałyby nawet rejestr statusu.

+0

Brak statusu lub rejestracja flagi w MIPS –

Odpowiedz

21

dodawania $ t2 t3 + $ $ $ t4 t5, skutkować $ $ 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 

dla drugiej części pytania, nie ma rejestr stanu. Wcale. Nada.

+0

Dzięki. To ma sens, dlaczego nie mogłem znaleźć rejestru statusu :) Twoja odpowiedź działa idealnie. Czy jest jakieś miejsce z poradami na temat lepszego kodowania MIPS? –

+0

Jest ich kilka. Dla mnie medytacja nad źródłami innych ludzi lub szukanie objdump -S działa. Możesz wyciągnąć naukę z rzadkich okazji, gdy kompilator robi coś dobrze, ale możesz dowiedzieć się jeszcze więcej z miejsc, w których produkują jak zwykle bzdury ;-) http://www.cs.unibo.it/~ solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf podaje także kilka przydatnych wskazówek. – hirschhornsalz

+0

Świetne rozwiązanie. Uwielbiam to, gdy rozwiązania problemów pozornie trudnych (IMHO) są tak eleganckie. – Derek