问题描述
我试图在 MIPS 中对 Floyd 三角形进行编码,出于某种原因,我似乎无法找出问题所在,但是由于我的 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,1
j loop1
解决方法
似乎您没有在任何地方增加内循环,即循环 2,因此它有问题并且陷入无限循环。除此之外,它看起来不错。这是我的代码: 主要:
man man
li $t2,-1 #i li $t3,-1 #j li $t4,1 #number
循环1: beq $t2,$t1,退出 li $t3,-1
循环2: beq $t3,$t2,换行符 li $v0,1 移动 $a0,$t4 系统调用 addi $t4,$t4,1 #number++ 添加 $t3,$t3,1 #j++ j循环2
换行符: li $v0,4 la $a0,nline 系统调用 添加 $t2,1 j循环1
,我认为问题出在 loop2 上,您正在比较两个相等的寄存器 $t2 和 $t3,当这个循环开始循环时,它永远不会停止。您需要更改这些寄存器的值以使您的循环停止。