程序集中的插入排序不起作用

时间:2014-12-05 16:44:25

标签: sorting assembly x86 nasm insertion-sort

我曾尝试在程序集(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

1 个答案:

答案 0 :(得分:0)

您确定数组大小表示元素的数量,并且它不包含数组的总长度吗?

然后也许你可以编码

mov ecx,[ebp+40];ecx saves the srray size
shr ecx,2