По какой-то причине, индексирование массива в 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