Advertisement
Lewi7tan

BubbleSort Assembly

Apr 26th, 2020
352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.38 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void sort(int* arr, int size);
  4.  
  5. int main(void) {
  6.     int arr[10] = { 5, 9, 21, 128, 256, 0, 2, 9, 512, 32 };
  7.     sort(arr, sizeof(arr)/4);
  8.     int i = 0;
  9.     for (i; i < sizeof(arr) / 4; ++i) {
  10.         printf("%d ", arr[i]);
  11.     }
  12.     getchar();
  13.     getchar();
  14.     return 0;
  15. }
  16.  
  17. void sort(int* arr, int size) {
  18.     void* espPointer;
  19.     __asm {
  20.         push esi
  21.         push edi
  22.         mov [ebp - 4], esp //SAVE STACK POINTER
  23.         mov esp, [ebp + 12] //contidionInner
  24.         mov esi, 0 //iterOut
  25.         mov edi, 0 //iterInner
  26.         mov eax, [ebp + 8] //arr begin
  27.         mov ebx, 0 //bits to add
  28.         mov ecx, 0 //temp1
  29.         mov edx, 0 //temp2
  30.         outer_loop:
  31.         cmp esi, [ebp + 12]
  32.         je outerOut
  33.             inner_loop:
  34.                 cmp edi, esp
  35.                 je innerOut
  36.                 mov ecx, [eax + ebx] //write to value1 first value
  37.                 add ebx, 4 //to get next value
  38.                 mov edx, [eax + ebx] //write to value2 seconde value
  39.                 bigger:
  40.                     cmp ecx, edx
  41.                     jna notBigger
  42.                     xchg ecx, edx
  43.                     sub ebx, 4 //to rewrite 1st value
  44.                     mov [eax + ebx], ecx
  45.                     add ebx, 4
  46.                     mov [eax + ebx], edx
  47.                 notBigger:
  48.                 inc edi
  49.                 jmp inner_loop
  50.             innerOut:
  51.             dec esp // j - outer loop iteration
  52.             mov edi, 0 // set 0 to inner loop increment variable
  53.             inc esi //outer loop
  54.             mov ebx, 0 //0 bits to add
  55.             jmp outer_loop
  56.        
  57.         outerOut:
  58.             mov ebx, 0
  59.             mov edi, 0 //condition
  60.  
  61.         mov esp, [ebp - 4] //REWRITE STACK POINTER
  62.         pop edi
  63.         pop esi
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement