MIPS模拟器。怎么了 ?程序保持循环并冻结模拟器

时间:2014-03-28 21:06:21

标签: 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 $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

1 个答案:

答案 0 :(得分:1)

(仿真)CPU不知道你是否意味着程序在print integer系统调用之后终止。你需要告诉它这是你想要明确的,否则它将继续执行下一条指令(因此它将以无限循环结束,执行AddMeth然后print integer系统调用并且结束了。

SPIM / MARS中的exit系统调用是数字10,即:

li $v0, 10
syscall

您似乎也在几个地方混淆了$a2$s2