Bubble Sort - ASM
December 20th, 2007
Astazi am reusit , cu ajutor ce-i drept ( din partea prof. meu de arhitectura ), sa implementez ultra-performantul, ultra-schimbistul si nemaipomenitul Bubble Sort . Il pun aici, in speranta ca mai exista cineva care este interesat de ASM ...
C++:
-
void bubble_sort(int*,int)
-
{
-
_asm
-
{
-
bucla_mare:
-
mov ecx,0
-
mov eax,[ebp+8]
-
mov ebx,[ebp+12]
-
bucla_mica:
-
mov edx,eax
-
add edx,4
-
mov esi,[eax]
-
cmp esi,[edx]
-
ja interschimbare
-
jmp continua
-
interschimbare:
-
push dword ptr [edx]
-
push dword ptr [eax]
-
pop dword ptr [edx]
-
pop dword ptr [eax]
-
mov ecx,1
-
jmp continua
-
continua:
-
add eax,4
-
dec ebx
-
cmp ebx,1
-
jne bucla_mica
-
cmp ecx,1
-
je bucla_mare
-
}
-
}
Primul parametru al functiei este un pointer catre primul element al vectorului, al doilea parametru reprezentand numarul de elemente din vector .
Functia se poate apela in felul urmator:
C++:
-
int v[100],n,i;
-
citeste n
-
citeste componentele vectorului
-
bubble_sort(v,n);
Din ce-mi aduc aminte de la asm, e mai rapid sa initializezi cu 0 cu XOR AX,AX decat cu mov AX,0.
Bafta in continuare! Cool site-ul