Mam ten kod, ale czy nie działa dokładnie tak, jak tego chcę. Robi matematykę poprawnie, ale wypisuje błędne wartości w określonych punktach.
Na przykład, jeśli wprowadzę 15, należy wydrukować następujące informacje:
15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
Spodziewam się tego wyjścia, ponieważ zostało to zakodowane na podstawie tego
start : if (n == 1) stop ;
else if (n is even ) n = n/2;
else n = 3*n+1;
go to start ;
Ale tak jest
15 46 46 70 106 160 80 40 20 10 16 16 8 4 2
Nie drukuje również wartości 1, czy ktoś mógłby mi pomóc? Ssam też w MIPS, więc proszę trzymać go na poziomie podstawowym
Odpowiedzi:
1 dla odpowiedzi № 1Jak stwierdzono w ostatnim pytaniu, problemem jest błąd w oryginalnym programie C - mianowicie, że n został podzielony przez 2 po jego wyprowadzeniu.
Aby naprawić ten ruch
# n = n / 2
srl $t0 $t0 1
Powyżej:
# print n
move $a0 $t0
addi $v0 $zero 1
syscall
Mogę sprawdzić, czy daje to wyniki, których szukasz.