RSS Feed

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++:
  1. void bubble_sort(int*,int)
  2. {
  3.     _asm
  4.     {
  5. bucla_mare:
  6.         mov ecx,0
  7.         mov eax,[ebp+8]
  8.         mov ebx,[ebp+12]
  9. bucla_mica:
  10.         mov edx,eax
  11.         add edx,4
  12.         mov esi,[eax]
  13.         cmp esi,[edx]
  14.         ja interschimbare
  15.         jmp continua
  16. interschimbare:
  17.         push dword ptr [edx]
  18.         push dword ptr [eax]
  19.         pop dword ptr [edx]
  20.         pop dword ptr [eax]
  21.         mov ecx,1
  22.         jmp continua
  23. continua:
  24.         add eax,4
  25.         dec ebx
  26.         cmp ebx,1
  27.         jne bucla_mica
  28.         cmp ecx,1
  29.         je bucla_mare
  30.     }
  31. }

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++:
  1. int v[100],n,i;
  2. citeste n
  3. citeste componentele vectorului
  4. bubble_sort(v,n);

1 Comment
Alex said...
...on January 7, 2008 @ 3:05 pm

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 :P

Leave a reply...