需要帮助摆脱 mips 代码中的无限循环

Need help in getting out of infinite loop in a mips code

我试图在 MIPS 中编写弗洛伊德三角形代码,出于某种原因,我似乎无法找出问题所在,但由于我的 QTspim 在我 运行 代码时崩溃,因此我猜它被卡住了在无限循环中。我需要帮助才能摆脱无限循环。这是带有循环和所有内容的代码部分:

main:

li $v0, 4
la $a0, prompt  #Enter number of rows
syscall

li $v0, 5
syscall
move $t1, $v0  #rows

li $t2 , 1 #i
li $t3, 1 #j
li $t4 , 1 #number 

loop1:
    beq $t2, $t1 , exit
    li $t3 , 1
    
loop2:
    beq $t3, $t2 , newline
    li $v0 , 1
    move $a0, $t4
    syscall
    addi $t4 , $t4 , 1 #number++
    j loop2

newline:
    li $v0 , 4
    la $a0 , nline
    syscall
    addi $t2 , $t2 , 1
    j loop1

您似乎没有在任何地方递增内部循环,即循环 2,因此它有问题并陷入无限循环。除此之外,它看起来还不错。这是我的代码: 主要:

      li $v0, 4
      la $a0, prompt             
      syscall

      li $v0, 5                  #read number from console
      syscall
      move $t1, $v0

li $t2 , -1 #i 李 $t3, -1 #j li $t4 , 1 #number

循环1: beq $t2, $t1 , 退出 李 $t3 , -1

循环2: beq $t3, $t2 , 换行符 李 $v0 , 1 移动 $a0, $t4 系统调用 addi $t4 , $t4 , 1 #number++ 阿迪 $t3 , $t3 , 1 #j++ j 循环 2

换行: 李 $v0 , 4 la $a0 , n 行 系统调用 阿迪 $t2 , $t2 , 1 j 循环 1

我认为问题出在 loop2,您正在比较两个相等的寄存器 $t2 和 $t3,并且当此循环开始循环时,它永远不会停止。您需要更改这些寄存器的值才能使循环停止。