Сборка x86 - необходима помощь по сравнению значений массива (пузырьковая сортировка)

Я хотел бы попросить о помощи!

Код C


void bubble_sort(int a[], int n) {
   int i = 0, j = 0, tmp;
   for (i = 0; i < n; i++) {  
       for (j = 0; j < n - i - 1; j++)             
            if (a[j] > a[j + 1]) {  
               tmp = a[j];
               a[j] = a[j + 1];
               a[j + 1] = tmp;
           }
       }
   }
}

Мой код сборки до сих пор от основной части:


main:

    push ebp    //func prologue
    mov ebp, esp

    mov esi, [ebp + 8]  // array address
    mov edi, [ebp + 12]  //array length

    mov eax, 0 //i
    mov ecx, 0 //j    


outerloop:               
        inc eax // i++ 
        cmp eax, edi // comparing i with length
        jge end            



insideloop:                  
           mov edx, edi         
           sub edx, eax          
           dec edx          
           inc ecx      
           cmp ecx, edx    
           je  outerloop
comparison:



Я потерялся в этой части сравнения, вчера я исследовал, как бы я это сделал, но я просто не понимаю, как бы я сделал эту часть:

 if (a[j] > a[j + 1]) {  
 tmp = a[j];

Я действительно смущен тем, как я перемещаю свое значение j в массив, затем проверяю, каждый раз ли [j] выше, чем a [j +1], а затем перемещаю [j] в tmp, любая помощь или советы оценил, спасибо!


person Wassssap    schedule 04.05.2019    source источник
comment
Что именно вызывает у вас проблемы? Индексация массива? Перепишите код, используя арифметику указателей, это должно прояснить ситуацию. Но помните, что C масштабируется по размеру элемента автоматически, при сборке вам нужно будет делать это вручную. Также прочитайте об эффективных формах адресов, которые могут быть полезны для доступа к вашему массиву.   -  person Jester    schedule 04.05.2019
comment
Да, я не очень понимаю, как мне проиндексировать мой массив в сборке и сравнить их, чтобы я мог сделать массив в порядке возрастания.   -  person Wassssap    schedule 04.05.2019
comment
Поднимите tmp = a[j]; из тела if, чтобы у вас было значение в регистре, которое вы можете сравнить с ячейкой памяти.   -  person Peter Cordes    schedule 05.05.2019