Функция
FindSubStringEx выполняет поиск подстроки в строке, завершающейся (\0) или 0. Если подстрока найдена, возвращается указатель на её первое вхождение в строке. Если подстрока не найдена или один из указателей равен 0, функция возвращает 8000 и устанавливает флаг CF = 1
Функция
FindSubStringEx выравнивает стек на 4 байта при достижения конца строки или если подстрока не была найдена. Если подстрока найдена, то сохраняет указатель на первую подстроку в строке в регистре AX.
Параметры:- Указатель на строку, завершающуюся (\0) или 0.
- Указатель на подстроку, завершающуюся (\0) или 0.
Возвращаемое значение:____AX: Указатель на первое вхождение подстроки в строке.
____CF = 0.
- Если подстрока не найдена или один из указателей равен 0:
____AX = 8000h.
____CF = 1.
Состояние флагов:- Функция влияет на флаг CF.
Особенности:- Поиск завершается при достижении конца строки (\0) или 0.
- Если подстрока не найдена или один из указателей равен 0, функция возвращает 8000h и устанавливает CF = 1.
- Функция не изменяет значения регистров, кроме AX и флага CF.
ПРИМЕР 1:
- title Автор: Довгополов Евгений Сергеевич
- .286C
- .model small
- .stack 100h
- data segment public
- ____string db "Привет, мой мир!\0"
- ____substr db "мой\0"
- data ends
- code segment public
- ____assume _ds:data, cs:code
- ____include Handyfar.inc
- ____include Handymac.inc
- ____main proc
- ________call____SetDataSegment
- ________pushs___es:[substr]
- ________pushs___ds:[string]
- ________call____FindSubStringEx
- ________push____ax
- ________call____WriteStringEx
- ________push____0
- ________call____ExitProcessEx
- ____main endp
- code ends
- end main
ПРИМЕР 2:
С помощью цикла можно вывести все вхождения определённой подстроки.
- title Автор: Довгополов Евгений Сергеевич
- .286C
- .model small
- .stack 100h
- data segment public
- ____string db "Привет, мой мир, мой "
- ___________db "рай!\0"
- ____substr db "мой\0"
- data ends
- code segment public
- ____assume _ds:data, cs:code
- ____include Handyfar.inc
- ____include Handymac.inc
- ____main proc
- ________call____SetDataSegment
- ________pushs___es:[substr]
- ________pushs___ds:[string]
- ____MainLoop:
- ________call____FindSubStringEx
- ________jc______Done
- ________call____WriteString
- ________call____PrintNewLine
- ________jmp_____MainLoop
- ____Done:
- ________push____0
- ________call____ExitProcessEx
- ____main endp
- code ends
- end main