如果出现异常,如何在 mips 中调试循环

How to debug the loop in mips if its giving exception

我是 Mips 的新手,我得到了一项任务,我需要打印以下模式,但它给了我一个异常。我试过调试,我知道问题出在循环中,但没有解决。请帮忙!

5 54 543 5432 54321

这就是我到目前为止所做的:

主要内容:

    li $t0 , 5  #rows
    move $t1,$t0 #i
    move $t2,$t0 #j
    addi $t3,$t3 , 1

外循环:

    beq $t3 , $t1 , end
    sub $t1 , $t1 , $t3
    

内循环:

    bgt $t1 , $t2 , newline1    
    li $v0, 1
    move $a0, $t2               
    syscall
    sub $t2 , $t2 , $t3 
    j innerLoop

换行1:

     li $v0, 4
     la $a0, newline            
     syscall
     j outerLoop    
        

结束:

 li $v0, 10
     syscall   

我想我已经弄清楚你在问什么,你的代码中的问题是(如果我错了请告诉我)但我发现每次进入内循环时它都会递减 J,但基本上当你回到外循环时,你需要 J 等于行,你的代码中的另一个问题是 'i' 会在你的内循环终止后递减。

试试这段代码,我添加了评论以便更好地理解。

外循环:

beq $t3 , $t1 , end #1<i
move $t2, $t0  # j = rows, everytime you go to innerloop from outerloop

内循环:

bgt $t1 , $t2 , newline1    #if j<i then exit the inner loop and print newline
li $v0, 1
move $a0, $t2               #Print vaue of j
syscall
sub $t2 , $t2 , $t3     #j--
j innerLoop     #loop until j<i

换行1:

 li $v0, 4
 la $a0, newline            #print newLine
 syscall
 sub $t1 , $t1 , $t3        #Increment i and jump back to first Loop
 j outerLoop