我曾尝试在程序集(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
答案 0 :(得分:0)
您确定数组大小表示元素的数量,并且它不包含数组的总长度吗?
然后也许你可以编码
mov ecx,[ebp+40];ecx saves the srray size
shr ecx,2