我在MIPS中有一个函数,它收集用户输入并将其放入一个整数数组中。如何在空白输入上崩溃?是否有某种我不知道的捕获物?
显然,必须在循环中执行一些测试,但是如果它不是整数,我怎么知道输入了什么。 $ v0寄存器中的值5确保只收集整数。
这是功能:
####################################################################################
# Gather Numbers
# The collection loop in order for the user to input numbers, all integers are
# accepted, and blank inputs.
# a0 = the base address of the array.
####################################################################################
gather_numbers:
addi $sp, $sp, -16
sw $a0, 0($sp)
sw $s0, 4($sp)
sw $s1, 8($sp)
sw $t1, 12($sp)
move $s0, $a0 #the address of the array
lw $s1, size # load the size
li $t1, 0 # so it enters the loop
start_gather_numbers: beq $t1, 9999, exit_gather_numbers
li $v0, 5 # read the integer
syscall
sw $v0, 0($s0)
move $t1, $v0 # put the value into t1 to be tested
addi $s0, $s0, 4 #increment the address
addi $s1, $s1, 1 # increment the size
j start_gather_numbers
exit_gather_numbers: addi $s1, $s1, -1 # fix the size
sw $s1, size # store the size
lw $a0, 0($sp) # pop the stack
lw $s0, 4($sp)
lw $s1, 8($sp)
lw $t1, 12($sp)
addi $sp, $sp, 12
jr $ra
答案 0 :(得分:0)
我想出了如何使用异常处理程序。抛出异常时,程序会立即跳转到其他地址。您可以将自定义指令放在特定地址,以供编译器遵循。它可以帮助程序优雅地消失,或者通过纠正输入来继续。
请查看此链接http://courses.missouristate.edu/kenvollmar/mars/help/MarsExceptions.html