ХАНДЫФАР

Функция StringCopyIfNotEx не копирует элементы строки, завершающейся (\0) или 0, в подготовленный буфер на основании условия, заданного функцией, переданной через указатель. Функция StringCopyIfNotEx автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на строку, завершающуюся (\0) или 0.
  2. Указатель на буфер, завершающийся (\0) или 0.
  3. Указатель на функцию, которая определяет, должен ли символ быть скопирован. Допустимые функции:

IsDigit: Проверяет, является ли символ цифрой.
IsLower: Проверяет, является ли символ строчной буквой.
IsUpper: Проверяет, является ли символ заглавной буквой.
IsAlpha: Проверяет, является ли символ буквой.
IsAlnum: Проверяет, является ли символ буквой или цифрой.
IsSpace: Проверяет, является ли символ пробельным символом.
IsPrint: Проверяет, является ли символ печатаемым.
IsGraph: Проверяет, является ли символ графическим символом.
IsPunct: Проверяет, является ли символ знаком пунктуации.

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

  • Функция не возвращает значение.

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string db "При1ве3т Ми5р!\0"
  7. ____buffer db 20 dup(0)
  8. ____fmtout db "Скопированные элементы: "
  9. ___________db "[%s].\0"
  10. data ends
  11. code segment public
  12. ____assume _ds:data, cs:code
  13. ____include Handyfar.inc
  14. ____include Handymac.inc
  15. ____main proc
  16. ________call____SetDataSegment
  17. ________pushs___IsDigit
  18. ________pushs___es:[buffer]
  19. ________pushs___ds:[string]
  20. ________call____StringCopyIfNotEx
  21. ________pushs___ds:[buffer]
  22. ________leaax___ds:[fmtout]
  23. ________call____PrintFormatString
  24. ________add_____sp, 2
  25. ________push____0
  26. ________call____ExitProcessEx
  27. ____main endp
  28. code ends
  29. end main
Функция StringCopyIfNotEx не копирует элементы строки, завершающейся (\0) или 0, в подготовленный буфер на основании условия, заданного функцией, переданной через указатель. Функция StringCopyIfNotEx автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на строку, завершающуюся (\0) или 0.
  2. Указатель на буфер, завершающийся (\0) или 0.
  3. Указатель на функцию, которая определяет, должен ли символ быть скопирован. Допустимые функции:

____IsDigit: Проверяет, является ли символ цифрой.
____IsLower: Проверяет, является ли символ строчной буквой.
____IsUpper: Проверяет, является ли символ заглавной буквой.
____IsAlpha: Проверяет, является ли символ буквой.
____IsAlnum: Проверяет, является ли символ буквой или цифрой.
____IsSpace: Проверяет, является ли символ пробельным символом.
____IsPrint: Проверяет, является ли символ печатаемым.
____IsGraph: Проверяет, является ли символ графическим символом.
____IsPunct: Проверяет, является ли символ знаком пунктуации.

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

  • Функция не возвращает значение.

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string db "При1ве3т Ми5р!\0"
  7. ____buffer db 20 dup(0)
  8. ____fmtout db "Скопированные элементы: [%s].\0"
  9. data ends
  10. code segment public
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc___________; Подключаем файл с функциями
  13. ____include Handymac.inc___________; Подключаем файл с макросами
  14. ____main proc
  15. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  16. ________pushs___IsDigit____________; 3-й: Ложим на вершину стека адрес функции IsDigit
  17. ________pushs___es:[buffer]________; 2-й: Ложим на вершину стека адрес переменной buffer
  18. ________pushs___ds:[string]________; 1-й: Ложим на вершину стека адрес переменной string
  19. ________call____StringCopyIfNotEx__; Вызываем процедуру StringCopyIfNotEx(string, buffer, IsDigit)
  20. ________pushs___ds:[buffer]________; 2-й: Ложим на вершину стека адрес переменной buffer
  21. ________leaax___ds:[fmtout]________; 1-й: Загружаем адрес строки формата fmtout в регистр ds:ax
  22. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtout, buffer)
  23. ________add_____sp, 2______________; Выравниваем стек
  24. ________push____0__________________; Ложим на вершину стека байтовое значение кода возврата
  25. ________call____ExitProcessEx______; Вызываем процедуру ExitProcess(0)
  26. ____main endp
  27. code ends
  28. end main
Made on
Tilda