Assembly 在超过4个参数的递归函数中具有负偏移量的堆栈分配

Assembly 在超过4个参数的递归函数中具有负偏移量的堆栈分配,assembly,recursion,stack,mips,offset,Assembly,Recursion,Stack,Mips,Offset,好的,我们有一个函数,它接受从main传递的5个参数 $a0-$a3和$t0 # Prologue: set up stack and frame poiters for search addiu $sp, $sp, -28 # allocate stack space -- 28 needed here sw $fp, 0($sp) # save caller's frame pointer sw

好的,我们有一个函数,它接受从main传递的5个参数

$a0-$a3和$t0

# Prologue: set up stack and frame poiters for search 
    addiu   $sp, $sp, -28           # allocate stack space -- 28 needed here
    sw      $fp, 0($sp)             # save caller's frame pointer 
    sw      $ra, 4($sp)             # save return address
    addi    $fp, $sp, 24            # setup the search frame pointer

# Preserve $a register arguments
    sw      $a0, 0($sp)     # addr of element in array
    sw      $a1, 4($sp)     # searchValue
    sw      $a2, 8($sp)     # indexLeft
    sw      $a3, 12($sp)    # indexRight

    # Get the 5th argument
    lw      $s5, 44($sp)    # level = 28 + 16
我知道这是怎么回事。然而,main不在16($sp)中存储$t0。而是将$t0存储在-4($sp)中

这是什么意思?为了将从$t0存储的值加载到堆栈到$s5寄存器中,我应该将偏移量设置为什么?我倾向于24美元(标准普尔)(28+(-4)),但我不确定

这是针对递归函数的,因此我希望确保每次函数调用自身并从堆栈指针中再分配28个字节时,每个寄存器都加载正确的值

至于实际的递归调用,我不知道如何使用$v0?如果有人能解释它是如何使用的,我将不胜感激