MIPS(质数)的嵌套循环问题

时间:2021-03-30 15:50:29

标签: assembly mips qtspim

嗨,我是 MIPS 的新手,我知道我的代码有点乱,这是我编写的质数代码,它一直困扰着我,但我似乎无法弄清楚我的代码有什么问题。我认为问题在于嵌套循环,因为我不太习惯使用 MIPS 来使用循环。我一直在使用 MARS 对 MIPS 进行编码,每次运行它时,它都会死机。

这是我的代码的一部分,其中我为下面的素数编码了循环部分:

    #Outer loop 
L2: move $t3, $zero
    # Inner loop
L1: remu $t4, $t1, $t2
bne $t4, $zero, I
move $t3, $t5
I:  
blt $t2, $t1 L1
bne $t3, $zero, P
li  $v0, 1          
move    $a0, $t1       
syscall
li  $v0, 4      
la  $a0, space
syscall   
     
P:  
move $t2, $t6
bgt  $t1, $t0, E    
j L2
E:  li  $v0,    10  
    syscall     # call operating sys
end:    jr  $ra

1 个答案:

答案 0 :(得分:0)

您收到此错误的原因是您忘记为循环添加增量(变量i和k),导致错误,循环不会终止(就像while循环一样)您的代码需求是一条线

add $t1, $t1, $t5 

在您创建的“P”分支/循环中 还有

add $t2, $t2, $t5  

在您创建的“I”分支/循环中 所以你的代码看起来像

    #Outer loop 
L2: move $t3, $zero
    # Inner loop
L1: remu $t4, $t1, $t2
bne $t4, $zero, I
move $t3, $t5
I: add $t2, $t2, $t5   # increment k
blt $t2, $t1 L1
bne $t3, $zero, P
li  $v0, 1         
move    $a0, $t1     
syscall
li  $v0, 4   
la  $a0, space
syscall         
P:  add $t1, $t1, $t5   # increment i
move $t2, $t6
bgt  $t1, $t0, E    
j L2
E:  li  $v0,    10 
    syscall     
end:    jr  $ra

希望能帮到你!