如何在mips程序集函数中使用多个参数?

时间:2016-11-11 06:12:46

标签: function debugging assembly mips

我正在读两个整数,第一个必须介于1和7之间。第二个必须介于1和7之间,并且不小于第一个。要检查这些数字,我正在使用一个函数,然后返回1或0,这将在循环中重复输入,直到给出有效输入。

这是我的问题:第一个数字似乎进展顺利,并且循环直到给出有效输入。但是对于我的第二个函数,它几乎相同,但我使用两个参数(第一个数字为$a0,第二个为$a1)。每当我在QTSpim上运行程序时,它会在输入第二个整数后立即冻结。任何人都可以帮助我吗?

这是我的代码:

main:
    li      $v0,5
    syscall

    move    $a0,$v0
    jal     checkdiv

    move    $s0,$a0
    slt     $t0,$zero,$v1
    beq     $t0,$zero,NE
    j       main

    NE: 
    li $v0,5
    syscall

    move    $a0,$v0
    move    $a1,$s0
    jal     checknum


#These are the two check functions 

checkdiv: 
    addiu $sp,$sp,-8
    sw      $ra,4($sp)
    sw      $a0,0($sp)

    li      $t0,1
    slt     $v1,$a0,$t0
    beq     $v1,$t0,D1

    li      $t0,7
    slt     $v1,$t0,$a0
    D1:
    lw      $ra,4($sp)
    lw      $a0,0($sp)
    addiu   $sp,$sp,8
    jr      $ra

#Second check function

checknum: 
    addiu $sp,$sp,-16
    sw      $ra,8($sp)
    sw      $a0,4($sp)
    sw      $a1,0($sp)

    slt     $v1,$a0,$a1
    li      $t0,1
    beq     $v1,$t0,N1
    li      $t0,7
    slt     $v1,$t0,$a0
    N1:     lw $ra,8($sp)
    lw      $a0,4($sp)
    lw      $a1,0($sp)
    addiu   $sp,$sp,16
    jr      $ra

0 个答案:

没有答案