Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. static void makeSwaps(int* arr, int len) {
  2.     int num1;
  3.     int num2;
  4.     int sizeofInt;
  5.     __asm {
  6.         //num1 = 0
  7.         mov num1, 0
  8.         //num2 = len - 1
  9.         mov eax, len
  10.         mov num2, eax
  11.         dec num2
  12.         //len = len / 2
  13.         mov eax, len
  14.         shr len, 1
  15.         //sizeofInt = sizeof(int)
  16.         mov sizeofInt, type arr
  17.         //set counter to len
  18.         mov ecx, len
  19.     swap:
  20.         //eax = arr[num1]
  21.         //mov eax, num1 //eax = num1
  22.         //mul sizeofInt //eax *= sizeofInt
  23.         //add eax, arr //eax += arr
  24.         //push eax
  25.        
  26.         mov ebx, arr //ebx = arr
  27.         mov eax, num1 //eax = num1
  28.         mul sizeofInt //eax /= sizeofInt
  29.         lea eax, [ebx + eax] //eax = ebx + eax
  30.         push eax
  31.         
  32.         //eax = arr[num2]
  33.         //mov eax, num2 //eax = num2
  34.         //mul sizeofInt //eax *= sizeofInt
  35.         //add eax, arr //eax += arr
  36.         
  37.         mov eax, arr //eax = arr
  38.         mov edi, num2 //edi = num2
  39.         lea eax, [eax + 4 * edi] //eax = eax + 4 * edi
  40.         
  41.         pop edx //edx = arr[num1]
  42.         
  43.         //eax contains addres of i element, edx contains address of j element
  44.         //swap
  45.         push [eax]
  46.         push [edx]
  47.         pop dword ptr [eax]
  48.         pop dword ptr [edx]
  49.         
  50.         inc num1 //num1++
  51.         dec num2 //num2++
  52.         loop swap //do until ecx == 0
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement