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



嗨,我是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

出现此错误的原因是您忘记为循环添加增量(变量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

我希望这能有所帮助!

最新更新