ХАНДЫФАР

Функция FindChar выполняет поиск символа в строке, завершающейся (\0) или 0. Если символ найден, возвращается указатель на его первое вхождение. Если символ не найден или указатель на строку равен 0, функция возвращает FFFF и устанавливает флаг CF = 1.

Параметры:

  • AX: Указатель на строку, завершающуюся (\0) или 0.
  • BL: Символ для поиска.

Возвращаемое значение:

  • Если символ найден:

____AX: Указатель на первое вхождение символа в строке.
____CF = 0.

  • Если символ не найден или AX = 0:

____AX = 8000h.
____CF = 1.

Состояние флагов:

  • Функция влияет на флаг CF, ZF, SF и другие.

Особенности:

  • Функция выполняет поиск символа в строке, начиная с указателя AX.

  • Поиск завершается при достижении конца строки (\0) или 0.

  • Если символ найден, возвращается указатель на его первое вхождение.

  • Если символ не найден или указатель на строку = 0, функция возвращает 8000h и устанавливает флаг CF = 1.

  • Функция не изменяет значения регистров, кроме AX и флагов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string_db "Привет, Мир Ассемблера!\0"
  6. data ends
  7. code segment public
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc
  10. ____main proc
  11. ________call____SetDataSegment
  12. ________mov_____bl, 'М'
  13. ________lea_____ax, ds:[string]
  14. ________call____FindChar
  15. ________call____WriteString
  16. ________xor_____al, al
  17. ________call____ExitProcess
  18. ____main endp
  19. code ends
  20. end main

С помощью цикла можно вывести все вхождения определённого символа.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string_db "Ирис, словно небесный "
  6. ___________db "посланник, раскрывает свои "
  7. ___________db "бархатные лепестки.\0"
  8. data ends
  9. code segment public
  10. ____assume _ds:data, cs:code
  11. ____include Handyfar.inc
  12. ____main proc
  13. ________call____SetDataSegment
  14. ________mov_____bl, 'и'
  15. ________lea_____ax, ds:[string]
  16. ____MainLoop:
  17. ________call____FindChar
  18. ________jc______Done
  19. ________call____WriteString
  20. ________call____PrintNewLine
  21. ________inc_____ax
  22. ________jmp_____MainLoop
  23. ____Done:
  24. ________xor_____al, al
  25. ________call____ExitProcess
  26. ____main endp
  27. code ends
  28. end main
Функция FindChar выполняет поиск символа в строке, завершающейся (\0) или 0. Если символ найден, возвращается указатель на его первое вхождение. Если символ не найден или указатель на строку равен 0, функция возвращает FFFF и устанавливает флаг CF = 1.

Параметры:

  • AX: Указатель на строку, завершающуюся (\0) или 0.
  • BL: Символ для поиска.

Возвращаемое значение:

  • Если символ найден:

____AX: Указатель на первое вхождение символа в строке.
____CF = 0.

  • Если символ не найден или AX = 0:

____AX = 8000h.
____CF = 1.

Состояние флагов:

  • Функция влияет на флаг CF, ZF, SF и другие.

Особенности:

  • Функция выполняет поиск символа в строке, начиная с указателя AX.

  • Поиск завершается при достижении конца строки (\0) или 0.

  • Если символ найден, возвращается указатель на его первое вхождение.

  • Если символ не найден или указатель на строку = 0, функция возвращает 8000h и устанавливает флаг CF = 1.

  • Функция не изменяет значения регистров, кроме AX и флагов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string_db "Привет, Мир Ассемблера!\0"
  6. data ends
  7. code segment public _____________; Начало сегмента кода
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc_________; Подключаем файл с функциями
  10. ____main proc ___________________; Начало процедуры main
  11. ________call____SetDataSegment___; Вызываем процедуру SetDataSegment
  12. ________mov_____bl, 'М'__________; Копируем значение символа 'М' в регистр bl
  13. ________lea_____ax, ds:[string]__; Загружаем адрес переменной string в регистр ds:ax
  14. ________call____FindChar_________; Вызываем процедуру FindChar(ax:string, bl:'М')
  15. ________call____WriteString______; Вызываем процедуру WriteString(ax)
  16. ________xor_____al, al___________; Обнуляем регистр al
  17. ________call____ExitProcess______; Вызываем процедуру ExitProcess
  18. ____main endp ___________________; Конец процедуры main
  19. code ends _______________________; Конец сегмента кода
  20. end main ________________________; Конец файла. Точкой входа указывается процедура main

С помощью цикла можно вывести все вхождения определённого символа.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string_db "Ирис, словно небесный посланник, раскрывает свои бархатные лепестки.\0"
  6. data ends
  7. code segment public _____________; Начало сегмента кода
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc_________; Подключаем файл с функциями
  10. ____main proc ___________________; Начало процедуры main
  11. ________call____SetDataSegment___; Вызываем процедуру SetDataSegment
  12. ________mov_____bl, 'и'__________; Копируем значение символа 'и' в регистр bl
  13. ________lea_____ax, ds:[string]__; Загружаем адрес переменной string в регистр ds:ax
  14. ____MainLoop:
  15. ________call____FindChar_________; Вызываем процедуру FindChar(ax:string, bl:'и')
  16. ________jc______Done_____________; Если CF=1, то прыгаем на метку Done
  17. ________call____WriteString______; Вызываем процедуру WriteString(ax)
  18. ________call____PrintNewLine_____; Вызываем процедуру PrintNewLine
  19. ________inc_____ax_______________; Увеличиваем указатель на 1
  20. ________jmp_____MainLoop_________; Выполняем безусловный переход на метку MainLoop
  21. ____Done:
  22. ________xor_____al, al___________; Обнуляем регистр al
  23. ________call____ExitProcess______; Вызываем процедуру ExitProcess
  24. ____main endp ___________________; Конец процедуры main
  25. code ends _______________________; Конец сегмента кода
  26. end main ________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda