В настоящее время я изучаю MIPS и, выполняя некоторые упражнения, я наткнулся на одно - сначала написать последовательность Фибоначчи на Java, а затем преобразовать ее в сборку MIPS.Я могу использовать только beq
, bne
и slt
Мой код Java выглядит следующим образом:
int n = 50; F_MAX v
int t1 = 0;
int t2 = 1;
int sum = 0;
while(t1 <= n)
{
System.out.print(t1 + " ")
sum = t1 + t2
t1 = t2
t2 = sum;
}
Это означает, что если n = 50, то следует печатать все числа до 50 (0; 1;1; 2; 3; 5; 8; 13; 21; 34)
Мой код сборки MIPS:
la $s0, F_MAX
lw $s0, 0($s0) #$s0 = int n = F_MAX (50);
addi $t1, $zero, 0 # $t1 = int t1 = 0;
addi $t2, $zero, 1 # $t2 = int t2 = 1;
addi $t3, $zero, 0 # $t3 = int sum = 0
while:
beq $t1, $s0, Exit #if t1 == 50 exit the program
addi $v0, $zero, 1 # syscall code to print integer
add $a0, $zero, $t1 # t1 to be printed
syscall # print t1
add $t3, $t1, $t2
addi $t1, $t2, 0
addi $t2, $t3, 0
addi $v0, $zero, 4 # syscall code to print a string
la $a0, COMMA
syscall # print a comma (and a space)
j while
Exit:
li $v0, 10
syscall
Но по какой-то причине он вызывает переполнение и печатает всевозможные положительные числа, и я не могу понять, почему.