Loops MIPS模拟器。怎么了?程序不断循环并冻结模拟器
MIPS程序循环10次,并使用过程调用打印循环计数器Loops MIPS模拟器。怎么了?程序不断循环并冻结模拟器,loops,mips,procedure,Loops,Mips,Procedure,MIPS程序循环10次,并使用过程调用打印循环计数器 main: # initialize values to 2 registers addi $a1,$zero,10 # $s1= $zero+10 addi $a2,$zero,0 # $s2= $zero+0 jal AddMeth # call procedure # Print out the loop counter li $v0,1 # print integer add
main:
# initialize values to 2 registers
addi $a1,$zero,10 # $s1= $zero+10
addi $a2,$zero,0 # $s2= $zero+0
jal AddMeth # call procedure
# Print out the loop counter
li $v0,1 # print integer
add $a0,$v1,$zero # $a0 = $s2+$zero , load return value into argument
syscall
AddMeth:
Loop: beq $a1,$a2,Exit # goto Exit if $s1=$s2
addi $a2,$a2,1 # $s2 = $s2+1
j Loop # goto Loop
Exit:
add $v1,$zero,$s2
jr $ra
(模拟的)CPU不知道您的意思是让程序在print integer
syscall之后终止。您需要明确地告诉它这就是您想要的,否则它将继续执行下一条指令(因此它将在无限循环中结束,在该循环中反复执行AddMeth
,然后执行print integer
syscall)
SPIM/MARS中的退出系统调用是第10个,即:
li $v0, 10
syscall
你似乎在几个地方混淆了
$a2
和$s2
。ya!新的使用MIPS模拟器。现在就知道了!谢谢你,伙计!