2017-03-20 181 views
0

我想获取用户输入(输入= $ v0),然后将其与10(10 = $ t1)进行比较。 如果输入少于十,我想打印'<'。如果输入大于十,我希望它打印'>'。我尝试了一些不同的东西,但由于某种原因它最终打印了'<'和'>'。以及读取“程序运行完毕(下降)”的错误“谁能告诉我,我做错了什么?MIPS打印问题

#where values are initialized 
    addi $t1, $zero, 10 #number for comparison 
    addi $t1, $zero, 60 #< less than 
    addi $t2, $zero, 62 #> greater than 

    #Where things happen 
    addi $v0, $zero, 5 # syscall 5 is to read integer syscall 
    syscall    #get input from keyboard 
    blt $v0, $t1, less #go to less if less than 10 
    bgt $v0, $t1, great #go to great if greater than 10 

less: #if input is less than 10 
    addi $v0, $zero, 11 #print 
    add $a0, $t1, $zero #copy $v0 to print 
    syscall    #call for print 

great: #if input is greater than 10 
    addi $v0, $zero, 11 #print 
    add $a0, $t2, $zero #copy $v1 to print 
    syscall   #call for print 
+0

标签只是程序中位置的名称,它们不是导致CPU停止执行的障碍。如果你想终止你的程序,你需要明确地这样做,例如通过使用系统调用10。 – Michael

回答

0

你需要以某种方式完成你的程序。例如,如果代码跳转到less:标签,因为您没有任何退货或跳转到完成该程序的例程,则执行直接沿着great:部分继续。

所以你应该在你退出程序的地方制作另一个标签end:。在执行less:great:中的系统调用之后,您应该跳到end:

#where values are initialized 
    addi $t1, $zero, 10 #number for comparison 
    addi $t1, $zero, 60 #< less than 
    addi $t2, $zero, 62 #> greater than 

    #Where things happen 
    addi $v0, $zero, 5 # syscall 5 is to read integer syscall 
    syscall    #get input from keyboard 
    blt $v0, $t1, less #go to less if less than 10 
    bgt $v0, $t1, great #go to great if greater than 10 
    #jump to end: (since there can also be an equal case) 

less: #if input is less than 10 
    addi $v0, $zero, 11 #print 
    add $a0, $t1, $zero #copy $v0 to print 
    syscall    #call for print 
    #jump to end: 

great: #if input is greater than 10 
    addi $v0, $zero, 11 #print 
    add $a0, $t2, $zero #copy $v1 to print 
    syscall   #call for print 
    #jump to end: 

end: 
    #program exiting routine 

我不知道有关退出的常规确切的语法,但我敢肯定,你不会有任何问题搞清楚了这一点:)

希望这有助于!