SHARE
TWEET

Untitled

a guest Jan 12th, 2017 62 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include "time.h"
  4.  
  5. using namespace std;
  6.  
  7.  
  8.  
  9. void selection_sort_asembly() {
  10.     int arr[60] = { },
  11.         n = 60,                 // ARRAY LENGTH.
  12.         ni, nj,                 // ARRAY LENGTH FOR "FORI" AND "FORJ".
  13.         i, j, minIndex;
  14.  
  15.     for (int i = 0; i < 60; i++)
  16.     {
  17.         arr[i] = rand()%100;
  18.     }
  19.  
  20.     __asm {  
  21.         lea  esi, arr       //; I = 0 (ESI USED AS I).
  22.     mov  eax, n
  23.         mov  ni, eax            //; N.
  24.         fori:
  25.     mov  ebx, esi               //; MININDEX = I(EBX USED AS MININDEX).
  26.  
  27.         mov  edi, esi           //; J = I(EDI USED AS J).
  28.         add  edi, 4             //; J = I + 1.
  29.         mov  eax, n
  30.         mov  nj, eax            //; N.
  31.         forj:
  32.                
  33.                         // IF(ARR[J] < ARR[MININDEX]).
  34.         mov  eax, [edi] //; EAX = ARR[J].
  35.         mov  edx, [ebx] //]; EDX = ARR[MININDEX].
  36.         cmp  eax, edx
  37.         jae  nextj      //; IF(ARR[J] >= ARR[MININDEX]).
  38.  
  39.         mov  ebx, edi   //; ELSE: MININDEX = J.
  40.  
  41.         nextj :
  42.                         //; FOR(J = I + 1; J < N; J++).
  43.         add  edi, 4     //; J++.
  44.         dec  nj         //; ZMINIEJZENIE LICZNIKA
  45.         jnz  forj       //; IF(J < N) JUMP.
  46.  
  47.                         //; IF(MININDEX != I).
  48.         cmp  ebx, esi
  49.         je   nexti      //; NIE ZMIENIAJ
  50.  
  51.                         //; EXCHANGE ARR[I] AND ARR[MININDEX].
  52.         mov  eax, [esi] //; EAX = ARR[I].
  53.         mov  edx, [ebx] //; EDX = ARR[MININDEX].
  54.         mov[esi], edx   //; ARR[I] = ARR[MININDEX].
  55.         mov[ebx], eax   //; ARR[MININDEX] = ARR[I].
  56.  
  57.         nexti:
  58.                         //; FOR(I = 0; I < N - 1; I++).
  59.         add  esi, 4     //; I++.
  60.         dec  ni         //; ZMINIEJZENIE LICZNIKA
  61.         cmp  ni, 1      //; MUST NOT REACH 0.
  62.         ja   fori       //; IF I < (N - 1) JUMP.
  63.     }
  64.    
  65.     for (int i = 0; i < 60; i++)
  66.         cout << arr[i] << " ";
  67. }
  68.  
  69. void selection_sort() {
  70.    
  71.     int arr[65] = {},
  72.         n = 65,                
  73.         ni, nj, tmp,          
  74.         i, j, minIndex;
  75.    
  76.     for (int i = 0; i < 65; i++)
  77.     {
  78.         arr[i] = rand() % 100;
  79.     }
  80.  
  81.     for (i = 0; i < n - 1; i++)
  82.     {
  83.         minIndex = i;
  84.         for (j = i + 1; j < n; j++)
  85.             if (arr[j] < arr[minIndex])
  86.                 minIndex = j;
  87.  
  88.         if (minIndex != i)
  89.         {
  90.             tmp = arr[i];
  91.             arr[i] = arr[minIndex];
  92.             arr[minIndex] = tmp;
  93.         }
  94.     }
  95.    
  96.     for (int i = 0; i < 65; i++)
  97.         cout << arr[i] << " ";
  98.  
  99. }
  100.  
  101. int main()
  102. {
  103.     clock_t begin, end;  double time_spent;
  104.     begin = clock();
  105.     srand((unsigned int)time(NULL));
  106.     selection_sort_asembly();
  107.     end = clock();
  108.     time_spent = (long double)(end - begin) / CLOCKS_PER_SEC;
  109.     cout << time_spent;
  110.     getchar();
  111.     return 0;
  112. }
RAW Paste Data
Top