/ / Błąd w moim kodzie zespołu MIPS - montaż, mipsy

Błąd w moim kodzie montażowym MIPS - montaż, mips

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 № 1

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