[MASM32] Поиск подстроки в строке - Assembler (226207)
Формулировка задачи:
Нужно найти подстроку в строке. Уже который день найти не могу косяк.
.386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc ; include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\msvcrt.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\msvcrt.lib .data ;резервируем память под данные и сразу же объявляем их msg3 db "YES" ,0dh,0ah,0dh,0ah,0dh,0ah msg4 db "NOPE" ,0dh,0ah,0dh,0ah,0dh,0ah str1 db "12345" str2 db "6" .data? ;нельзя инициализировать переменные stdout dd ? cWritten dd ? .code start: invoke GetStdHandle,STD_OUTPUT_HANDLE ;Дескриптор стандартного устройства вывода данных. mov stdout,eax ;копирует значение переменной stdin в регистр eax ;----------------------------------------------------------------------------------------------------------------\ ;Строки получили,начинаем сравнивать. | ;----------------------------------------------------------------------------------------------------------------/ CLD mov cx,100 lea esi,str1 ; lea edi,str2 ; repne cmpsb ;найти совпадение элементов строк JNE not_found ;совпадение обнаружено&?! jmp found ;если совпали бежим в found ;-------------------------------------------------------------------- ;Совпадение есть. found: invoke WriteConsoleA,stdout,ADDR msg3,SIZEOF msg3,ADDR cWritten,NULL invoke Sleep,INFINITE ;не закрываем консоль после выполнения invoke ExitProcess,0 ;выход ;------------------------------------------------------------------- not_found: invoke WriteConsoleA,stdout,ADDR msg4,SIZEOF msg4,ADDR cWritten,NULL ;выводим что строки не совпали invoke Sleep,INFINITE ;не закрываем консоль после выполнения invoke ExitProcess,0 ;выходим из прогрмаммы end start
Решение задачи: «[MASM32] Поиск подстроки в строке»
textual
Листинг программы
.386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc ; include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\msvcrt.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\msvcrt.lib .data ;резервируем память под данные и сразу же объявляем их msg3 db "YES" ,0dh,0ah,0dh,0ah,0dh,0ah msg4 db "NOPE" ,0dh,0ah,0dh,0ah,0dh,0ah str1 db "12345" str2 db "6" .data? ;нельзя инициализировать переменные stdout dd ? cWritten dd ? .code start: invoke GetStdHandle,STD_OUTPUT_HANDLE ;Дескриптор стандартного устройства вывода данных. mov stdout,eax ;копирует значение переменной stdin в регистр eax ;----------------------------------------------------------------------------------------------------------------\ ;Строки получили,начинаем сравнивать. | ;----------------------------------------------------------------------------------------------------------------/ CLD mov cx,100 lea esi,str1 ; lea edi,str2 ; repne cmpsb ;найти совпадение элементов строк cmp ecx, 0 JNE not_found ;совпадение обнаружено&?! ;-------------------------------------------------------------------- ;Совпадение есть. invoke WriteConsoleA,stdout,ADDR msg3,SIZEOF msg3,ADDR cWritten,NULL invoke Sleep,INFINITE ;не закрываем консоль после выполнения invoke ExitProcess,0 ;выход ;------------------------------------------------------------------- not_found: invoke WriteConsoleA,stdout,ADDR msg4,SIZEOF msg4,ADDR cWritten,NULL ;выводим что строки не совпали invoke Sleep,INFINITE ;не закрываем консоль после выполнения invoke ExitProcess,0 ;выходим из прогрмаммы end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д