Распределение стека с отрицательным смещением в рекурсивной функции из более чем 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? Если кто-то может объяснить, как это используется, я был бы признателен