Проблема «Не удается расширить сегмент стека с помощью…» с рекурсивной функцией - PullRequest
0 голосов
/ 17 марта 2020

У меня проблема в MIPS с моей рекурсивной функцией. Я сделал функцию qsort:

#a0--> int f (lower number)
#a1 --> int l (higher number)
#v0--> The return from the partition function (int p)
#
qsort:
            addi $sp, $sp, -12 #make room on stack for 3 registers.
            sw $ra, 8($sp) #save $ra on stack
            sw $a1, 4($sp) #save $a1(argument l) on stack
            sw $a0, 0($sp) #save $a0 (argument f) on stack
            move $t1, $a1
            slt $t0, $a0, $t1 #if f>=l then $t0=0
            bne $t0, $zero, L1 #if $t0 != 0 then jump to L1
            lw $ra, 8($sp)
            lw $a1, 4($sp)
            lw $a0, 0($sp)
            addi $sp, $sp, 12
            jr $ra

  L1:
            jal partition
            move $s1, $v0 #int p=partion (f, l)
            lw $a0, 0($sp) #pass the f to f argument qsort(f, p-1)
            addi $a1, $s1, -1 #pass p-1 to l argument of qsort
            jal qsort
            addi $a0, $s1, 1 #pass p+1 to f argument of qsort
            lw $a1, 4($sp) #pass l argument to l argument of qsort(p+1, l)
            jal qsort

И когда я запускаю программу в QtSpim, я получаю эту ошибку: «Не удается расширить сегмент стека на 8 байт». У тебя есть идеи почему? Спасибо.

Моя главная:

main:       la $s0, array
                  li $a0, 0
                  li $a1, 9
                  jal partition
                  li $v0, 10 # Terminate program run
                  syscall # Exit
...