Копировать значения из массива в регистр во встроенном NASM - PullRequest
1 голос
/ 24 января 2020

Обычно я могу найти всю необходимую информацию в Google и других вопросах, связанных с stackoverflow, но теперь мне нужна помощь. Я использую встроенную сборку в Visual Studio, моя задача: найти 5 последовательных элементов в массиве, сумма которых равна K (и затем удалить). Сначала я создаю массив и получаю K в C ++, часть

unsigned int *arr;
    int k,n;
    std::cout<<"How many elements? ";
    std::cin>>n;
    arr=new unsigned int[n];
    std::cout<<"Enter array: ";
    for(int i=0;i<n;i++)
        std::cin>>arr[i];
    std::cout<<"Enter k: ";
    std::cin>>k;

Затем я нахожу группу элементов в asm

xor ebx,ebx ;ebx - counter from 0 to n-4
        lea esi,[arr]
        FindGroup:
            mov eax,[esi+ebx*4]
            add eax,[esi+(ebx+1)*4]
            add eax,[esi+(ebx+2)*4]
            add eax,[esi+(ebx+3)*4]
            add eax,[esi+(ebx+4)*4]
            cmp eax,k
            je DeleteGroup
            inc ebx
            jmp FindGroup

, поэтому мой код работает не так, как я ожидал. Windows Отладчик показывает, что eax хранит большое количество, но не первый элемент массива (и не значение esi). Я попытался использовать [arr + ebx * 4] и arr [ebx * 4] вместо [esi + ebx * 4] , но это тоже не сработало. Где мне искать проблему?

...