Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- using namespace std;
- void init(int * & vec, int & len)
- {
- fputs("Numar elemente: ", stdout);
- scanf("%d", &len);
- vec = (int *)malloc(sizeof(int) * len);
- if (!vec)
- exit(EXIT_FAILURE);
- fputs("Elemente: ", stdout);
- for (int i = 0; i < len; ++i)
- scanf("%d", vec + i);
- }
- void show(int * vec, int len)
- {
- fputs("Elemente: ", stdout);
- for (int i = 0; i < len; ++i)
- printf("%d ", vec[i]);
- putchar('\n');
- }
- void bsort(int * vec, int len)
- {
- int swed, k = 0;
- do {
- swed = 0;
- ++k;
- for (int i = 0; i < len - k; ++i)
- if (vec[i] > vec[i + 1]) {
- swed = 1;
- vec[i] -= vec[i + 1];
- vec[i + 1] += vec[i];
- vec[i] = vec[i + 1] - vec[i];
- }
- } while (swed);
- }
- int main()
- {
- int len = -1, * vec = NULL;
- init(vec, len);
- //bsort(vec, len);
- // assembly bubble sort
- _asm {
- mov eax, len ; lungimea vectorului
- mov ebx, vec ; pointer la primul element din vector
- while0:
- ; executam cat timp avem interschimbari
- xor edx, edx ; marcam ca nu s-a facut vreo interschimbare
- dec eax ; trebuie sa verificam mai putin cu un element
- xor ecx, ecx ; pornim de la primul element
- for0:
- cmp ecx, eax
- jge _for0
- if0:
- push eax ; salvam vechea valoare
- ; valoarea urmatorului element
- inc ecx
- mov eax, dword ptr [ebx+ecx*4]
- dec ecx
- cmp dword ptr [ebx+ecx*4], eax ; comparam elementul curent cu cel urmator
- jle _if0 ; nu avem nimic de facut
- ; interschimbam
- or edx, 1 ; marcam efectuarea interschimbarii
- xor eax, dword ptr [ebx+ecx*4]
- xor dword ptr [ebx+ecx*4], eax
- xor eax, dword ptr [ebx+ecx*4]
- inc ecx
- mov dword ptr [ebx+ecx*4], eax
- dec ecx
- _if0:
- pop eax ; restauram lungimea
- inc ecx
- jmp for0
- _for0:
- cmp edx, 0
- jne while0
- _while0:
- }
- show(vec, len);
- free(vec);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement