Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include "time.h"
- using namespace std;
- void selection_sort_asembly() {
- int arr[60] = { },
- n = 60, // ARRAY LENGTH.
- ni, nj, // ARRAY LENGTH FOR "FORI" AND "FORJ".
- i, j, minIndex;
- for (int i = 0; i < 60; i++)
- {
- arr[i] = rand()%100;
- }
- __asm {
- lea esi, arr //; I = 0 (ESI USED AS I).
- mov eax, n
- mov ni, eax //; N.
- fori:
- mov ebx, esi //; MININDEX = I(EBX USED AS MININDEX).
- mov edi, esi //; J = I(EDI USED AS J).
- add edi, 4 //; J = I + 1.
- mov eax, n
- mov nj, eax //; N.
- forj:
- // IF(ARR[J] < ARR[MININDEX]).
- mov eax, [edi] //; EAX = ARR[J].
- mov edx, [ebx] //]; EDX = ARR[MININDEX].
- cmp eax, edx
- jae nextj //; IF(ARR[J] >= ARR[MININDEX]).
- mov ebx, edi //; ELSE: MININDEX = J.
- nextj :
- //; FOR(J = I + 1; J < N; J++).
- add edi, 4 //; J++.
- dec nj //; ZMINIEJZENIE LICZNIKA
- jnz forj //; IF(J < N) JUMP.
- //; IF(MININDEX != I).
- cmp ebx, esi
- je nexti //; NIE ZMIENIAJ
- //; EXCHANGE ARR[I] AND ARR[MININDEX].
- mov eax, [esi] //; EAX = ARR[I].
- mov edx, [ebx] //; EDX = ARR[MININDEX].
- mov[esi], edx //; ARR[I] = ARR[MININDEX].
- mov[ebx], eax //; ARR[MININDEX] = ARR[I].
- nexti:
- //; FOR(I = 0; I < N - 1; I++).
- add esi, 4 //; I++.
- dec ni //; ZMINIEJZENIE LICZNIKA
- cmp ni, 1 //; MUST NOT REACH 0.
- ja fori //; IF I < (N - 1) JUMP.
- }
- for (int i = 0; i < 60; i++)
- cout << arr[i] << " ";
- }
- void selection_sort() {
- int arr[65] = {},
- n = 65,
- ni, nj, tmp,
- i, j, minIndex;
- for (int i = 0; i < 65; i++)
- {
- arr[i] = rand() % 100;
- }
- for (i = 0; i < n - 1; i++)
- {
- minIndex = i;
- for (j = i + 1; j < n; j++)
- if (arr[j] < arr[minIndex])
- minIndex = j;
- if (minIndex != i)
- {
- tmp = arr[i];
- arr[i] = arr[minIndex];
- arr[minIndex] = tmp;
- }
- }
- for (int i = 0; i < 65; i++)
- cout << arr[i] << " ";
- }
- int main()
- {
- clock_t begin, end; double time_spent;
- begin = clock();
- srand((unsigned int)time(NULL));
- selection_sort_asembly();
- end = clock();
- time_spent = (long double)(end - begin) / CLOCKS_PER_SEC;
- cout << time_spent;
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement