V tvém kódu se vrtat nebudu, dělá se to nějak takhle. Za domácí úkol máš zjistit, proč na QuickSort stačí jenom jedna rekurze a ne dvě jak máš ty.
int quicksort(int* pole, unsigned short delka_pole)
{
_asm
{
movzx eax,delka_pole
test eax,eax
jz Exit
mov esi,pole
lea edi,dword ptr [esi+eax*4-4]
mov ebx,edi
Start:
lea eax,dword ptr [esi+edi]
shr eax,1
and eax,~0x03
mov ecx,dword ptr [eax]
Left:
cmp ecx,dword ptr [esi]
jng Right
lea esi,dword ptr [esi+4]
jmp Left
Right:
cmp ecx,dword ptr [edi]
jnl Swap
lea edi,dword ptr [edi-4]
jmp Right
Swap:
cmp esi,edi
ja NestingLeft
mov eax,dword ptr [esi]
mov edx,dword ptr [edi]
mov dword ptr [esi],edx
mov dword ptr [edi],eax
lea esi,dword ptr [esi+4]
lea edi,dword ptr [edi-4]
cmp esi,edi
jb Left
NestingLeft:
sub edi,pole
jbe NestingRight
shr edi,2
lea edi,dword ptr [edi+1]
push edi
mov eax,pole
push eax
call quicksort
add esp,8
NestingRight:
mov eax,ebx
sub eax,esi
jbe Exit
shr eax,2
lea eax,dword ptr [eax+1]
mov pole,esi
mov delka_pole,ax
mov edi,ebx
jmp Start
Exit:
}
}