Сортировка пузырьком на VC++ с использованием директивы _asm - Assembler

Узнай цену своей работы

Формулировка задачи:

Всем привет, надеюсь, разделом не ошибся. Дело в том, что у меня только вставка на ассемблере при помощи директивы _asm. Вроде всё написано, но почему-то ругается на обращение к элементам массива. Почему - не могу понять. Вот код:
#include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
 
int main()
{   setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    int  const N=9; //размер массива
    int array[N]; //сам массив
    for (int i=0; i<9; i++)//его случайное заполнение
    {
        array[i]=rand()%9;
 
    }
 _asm //вставка на ассемблере
 {
    mov ecx, N //записали размер
    dec ecx //уменьшили на 1
L1:
    push ecx //сохранил внешний счетчик цикла
    mov esi, array //загружаем адрес первого
L2:
    mov eax,[esi] //загрузим значение элемента
    cmp [esi+1],eax //сравним его со следующим
 
    jge L3
 
    xchg eax,[esi+1] //меняем местами пару значений
    mov [esi],eax
L3:
    add esi,1 //берем следующую пару элементов
    loop L2  //повторяем цикл
 
    pop ecx //восстановим внешний счетчик цикла
    loop L1 //повторяем внешний цикл
L4:
    ret
}
 for (int i=0; i<9; i++)
    {
        cout<<array[i]<<endl;
 
    }
system("pause");
 
}
Все компилируется, ни на что не ругается, но при запуске прогарммы происходит вот это:

Решение задачи: «Сортировка пузырьком на VC++ с использованием директивы _asm»

textual
Листинг программы
  mov esi, array //загружаем адрес первого

Объяснение кода листинга программы

  1. mov esi, array - Загружаем адрес первого элемента массива в регистр ESI.

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы