Распределение стека с отрицательным смещением в рекурсивной функции из более чем 4 параметров

Итак, у нас есть функция, которая принимает 5 аргументов, переданных из main.

$ 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 не хранит $t0 в 16($sp). Вместо этого хранит $t0 в -4($sp).

Что это значит? Что мне установить смещение, чтобы загрузить значение, хранящееся в $t0, в стек в мой регистр $s5? Я склоняюсь к 24($sp) (28 + (-4)), но я не уверен.

Это для рекурсивной функции, поэтому я хочу убедиться, что каждый регистр загружает правильные значения каждый раз, когда функция вызывает себя и выделяет еще 28 байтов из моего указателя стека.

А что касается рекурсивного вызова, я не понимаю, как использовать $v0? Если кто-то может объяснить, как это используется, я был бы признателен

0 ответов

Другие вопросы по тегам