У меня проблема в 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