Поиск числа по двумерному массиву. - Assembler
Формулировка задачи:
В программе поиска числа по двумерному массиву, что то не так с регистрами esi и ebx. Сама программа работает неправильно. Посмотрел в олли, а там адрес элемента неправильно в eax загружается. Попробовал к esi и ebx прибавлять по 4 (все таки тип данных двойное слово), программа немного другие числа в eax загружала, но все равно не те. Прошу помочь, в чем ошибка?
P.S. На счет счетчика повторов foundtime, возможно вы скажите что он здесь ни к чему, потому что я не вывожу количество повторов. Просто не хотел переписывать. Извиняйте.
Решение задачи: «Поиск числа по двумерному массиву.»
textual
Листинг программы
.386 .model flat, stdcall option casemap : none include\masm32\include\windows.inc include\masm32\include\kernel32.inc include\masm32\include\user32.inc includelib\masm32\lib\kernel32.lib includelib\masm32\lib\user32.lib .data array dd 1,2,3,4,5,6,7,8,9,0; массив elem dd 3; это искомое число failed db "Нет такого элемента в массиве!",0 success db "Такой элемент в массиве присутствует ",0 .data? foundtime dd ? .code start: xor ebx,ebx push sizeof array/(2*4) pop ecx external:; здесь начинается основной цикл push ecx push 2 pop ecx lea esi,[array+ebx] internal:; здесь начинается вложенный цикл lodsd cmp eax, elem je here loop internal; конец вложенного here: jecxz move_next inc foundtime; инкремент счетчика кол-ва повторов искомого элемента loop internal; если первый элемент совпал, это не значит, что второй уже не совпадет, если это был второй, то он же и последний move_next: pop ecx add ebx,8 loop external; конец основного xor eax,eax push eax ;аргумент ЭкситПроцесс push MB_OK push eax cmp foundtime,eax je not_found push offset success сообщение, если найдено jmp exit not_found:; сообщение если не найдено совпадений push offset failed exit: push eax call MessageBoxA call ExitProcess end start