需要帮助摆脱 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,并且当此循环开始循环时,它永远不会停止。您需要更改这些寄存器的值才能使循环停止。
我试图在 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,并且当此循环开始循环时,它永远不会停止。您需要更改这些寄存器的值才能使循环停止。