нужна программа MIPS с циклом while, который контролирует вывод чисел Фибоначчи, раньше она просто распечатывала первые 15 чисел, но теперь мне нужно, чтобы она остановилась, когда она наберет большее число, чем 50 (или любое другое число).
Я пытался сделать, если (f
из книги, которую я читаю:
slt $ s1, $ s2, $ s3 -> if ($ s2 <$ s3) $ s1 = 1;иначе $ s1 = 0, поэтому часть кода WHILE имеет для меня смысл, но по какой-то причине он по-прежнему печатает первые 15 вместо остановки, когда достигает числа, которое меньше 50. </p>
.text
la $s0, HOW_MANY
lw $s0, 0($s0) # s0: 15 : how many Fibonacci to print
addi $t0, $zero, 0 # t0: which Fibonacci to print
addi $t1, $zero, 0 # t1: the current Fibonacci
addi $t2, $zero, 1 # t2: the next Fibonacci
addi $t4, $zero, 50 # fMax = 50
WHILE:
slt $s1, $t1, $t4 # if($t1 < $s0) $s1 = 1 else $s1 = 0 if(f < fMax)
beq $s1, 1, NEXT_FIBO # if $s1 == 1 then goto NEXT_FIBO
bne $s1, 1, DONE # if $s1 != 1 then goto DONE
NEXT_FIBO:
addi $t0, $t0, 1 # t0++
addi $v0, $zero, 1 # syscall code to print integer
add $a0, $zero, $t1 # t1 to be printed
syscall # print t1
beq $t0, $s0, DONE # goto DONE if t0==s0
add $t3, $t1, $t2 # add variable = 1st number + 2nd number
move $t1, $t2 # 1st number = 2nd number
move $t2, $t3 # 2nd number = variable
addi $v0, $zero, 4 # syscall code to print a string
la $a0, COMMA_FOR_SEPARATION
syscall # print a comma (and a space)
j NEXT_FIBO # go to the NEXT_FIBO label
DONE:
addi $v0, $zero, 10 # syscall code to exit
syscall # exit
.data
COMMA_FOR_SEPARATION: .asciiz ", " # comma (and space) string
HOW_MANY: .word 15 # how many Fibonacci numbers to print