Обычно я могу найти всю необходимую информацию в 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] , но это тоже не сработало. Где мне искать проблему?