我用MIPS写了一个循环,但出于某种原因,它一直无限地运行?

我用MIPS写了一个循环,但出于某种原因,它一直无限地运行?,mips,Mips,我正在为类编写这段代码,但出于某种原因,即使在我达到循环的极限后,代码仍在无限期地运行,希望有人能看到它为什么这样做。msg2只是一个输入整数的提示,数字是一个数组,$s0是数组中的元素数(例如,如果是6,则在终止之前要求用户输入6个)。(这只是代码片段,所有内容都在主类中) 您只显示了代码的一部分,因此,例如,我们无法验证$s0中的内容,或者,print\u loop中的内容。好的,我添加了获取$s0的位置的背景信息,因为现在print\u loop是空的,它只会导致程序退出(li$v0,10

我正在为类编写这段代码,但出于某种原因,即使在我达到循环的极限后,代码仍在无限期地运行,希望有人能看到它为什么这样做。msg2只是一个输入整数的提示,数字是一个数组,$s0是数组中的元素数(例如,如果是6,则在终止之前要求用户输入6个)。(这只是代码片段,所有内容都在主类中)


您只显示了代码的一部分,因此,例如,我们无法验证
$s0
中的内容,或者,
print\u loop
中的内容。好的,我添加了获取$s0的位置的背景信息,因为现在print\u loop是空的,它只会导致程序退出(li$v0,10)是我现在拥有的内容,而不考虑其他内容,当每次迭代只将
$t2
增加1时,不能使用
sw$v0,数字($t2)
,因为
sw
要求有效地址与字对齐。
    numbers:     .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

     la    $a0, msg1            
     li    $v0, 4              
     syscall
     li    $v0, 5
     syscall
     move  $s0, $v0        
     slt   $t1, $s0, 12
     beq   $t1, 1, fill_loop

    fill_loop:

    li    $t2, 0
    la    $a0, msg2            # $a0 = address of msg1
    li    $v0, 4               # $v0 = 4  --- this is to call print_string()
    syscall
    li    $v0, 5
    syscall
    sw    $v0, numbers($t2)
    addi   $t2, $t2, 1
    beq   $t2, $s0, print_loop
    j     fill_loop