-1
Я попытался написать сортировку вставки в сборке (nasm), и она не работает (всегда отправляется ошибка сегментации). Я пытался найти источник проблемы в течение очень долгого времени, и я не могу найти его, Может кто-нибудь, пожалуйста, помогите мне найти проблему? спасибо.Вставка сортировка в сборе не работает
sort:
pushad
mov ebp,esp;creating stack frame
mov ebx,[ebp+36]; ebx saves pointer to the array
mov ecx,[ebp+40];ecx saves the srray size
mov esi,4 ; i
for_l1:
;edx=temp,esi=i,edi=j
mov edx,[ebx+esi]
mov edi,esi;j=i
sub edi,4;j=i-1
while_l1:
cmp edx,[ebx+edi]; if(temp<array[j])
jge end_while1
;array[j+1]=array[j], j-=1
mov eax,[ebx+edi]
mov [ebx+edi+4],eax
sub edi,4
cmp edi,0
jge while_l1;if(j>=0)
end_while1:
;array[j+1]=temp
mov[ebx+edi+4],edx
add esi,4;i+=1
dec ecx; decreasing the size of the array needed to sort
cmp ecx,1;if(size==1)
jg for_l1
finished1:
popad
ret 8
Как вы вызова этого? Почему вы используете 'ebp + 36'? Выглядит очень большое смещение. Вы проверили в отладчике правильные аргументы? Вы разобрали свой код, чтобы увидеть, где это происходит? * Изменить: о, я вижу, что большое смещение связано с 'pushad'. – Jester
Да, большое смещение действительно связано с pushad, замечаете ли вы что-нибудь, что может вызвать ошибку сегментации? – user3475324
Используйте отладчик. Как голый минус, сообщите, какая инструкция неисправна. И покажите, как вы это вызываете. – Jester