Цикл while в MIPS с использованием stl beq bne - PullRequest
0 голосов
/ 10 декабря 2018

нужна программа 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
...