Ошибка сегмента при индексации массива, переданного через подпрограмму сборки NASM? - PullRequest
0 голосов
/ 04 декабря 2018

По какой-то причине, индексирование массива в NASM после того, как я поместил его в стек, вызвал подпрограмму и захватил его, находясь в подпрограмме, вызывает ошибку сегментации.

Подпрограмма ниже (называемая sorthem) должна извлечь массив и размер из стека и отсортировать массив

Здесь я вызываю подпрограмму sorthem, которая является рекурсивной,и я собираю массив (после добавления в стек и вызова подпрограммы) с помощью регистра edx (из подпрограммы), а затем индексирую массив, используя dword[edx].почему это даст вину?как я могу это исправить?

это в основном:

    push eax
    push array
    call sorthem
    add esp, 8

    jmp END

и это подпрограмма:

sorthem:
enter 0,0
pusha

mov ebx, dword[ebp + 12]   ;size
mov edx, dword[ebp + 8]    ;array

cmp ebx, 1
je sorthem_end

add edx, 4
dec ebx
push ebx
push edx
sub edx, 4
inc ebx
call sorthem
pop eax
pop eax

mov eax, 4
mul ebx
mov ebx, eax    

mov ecx, 0
Sloop:

    sub ebx, 4
        cmp ecx, ebx
        je loop_end
    add ebx, 4      

    mov eax, dword[edx + ecx]         ;SEG FAULT HERE
    cmp eax, dword[edx + 4 + ecx]     ;SEG FAULT HERE 
    ja loop_end                                      

            mov eax, debug
            call print_string
            call print_nl

    mov eax, dword[edx + ecx]
    push eax
    mov eax, dword[edx + 4 + ecx]
    push eax

    pop dword[edx+ecx]
    pop dword[edx+4+ecx]

    add ecx, 4
    jmp Sloop 



loop_end:
push 5
push array
call showp
add esp, 8  

sorthem_end:
popa
leave
ret
...