ХАНДЫФАР

Функция StringEndsWithEx проверяет, заканчивается ли первая строка с заданной второй подстроки. Функция StringEndsWithEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на первую строку, завершающуюся (\0) или 0.
  2. Указатель на вторую строку (подстроку), завершающуюся (\0) или 0.

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

  • ZF = 1: Если первая строка заканчивается с заданной подстроки.
  • ZF = 0: Если первая строка не заканчивается с заданной подстроки.

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string ___db "Евгений Довгополов\0"
  7. ____mName_____db "полв\0"
  8. ____msg_true _db "Строка '%s' "
  9. ______________db "заканчивается на "
  10. ______________db "'%s'\0"
  11. ____msg_false db "Строка '%s' не "
  12. ______________db "заканчивается на "
  13. ______________db "'%s'\0"
  14. data ends
  15. code segment public
  16. ____assume _ds:data, cs:code
  17. ____include Handyfar.inc
  18. ____include Handymac.inc
  19. ____main proc
  20. ________call____SetDataSegment
  21. ________pushs___es:[mName]
  22. ________pushs___ds:[string]
  23. ________call____StringEndsWithEx
  24. ________jne_____@False
  25. ________pushs___ds:[mName]
  26. ________pushs___ds:[string]
  27. ________leaax___ds:[msg_true]
  28. ________jmp_____@Done
  29. ____@False:
  30. ________pushs___ds:[mName]
  31. ________pushs___ds:[string]
  32. ________leaax___ds:[msg_false]
  33. ____@Done:
  34. ________call____PrintFormatString
  35. ________add_____sp, 4
  36. ________push____0
  37. ________call____ExitProcessEx
  38. ____main endp
  39. code ends
  40. end main
Функция StringEndsWithEx проверяет, заканчивается ли первая строка с заданной второй подстроки. Функция StringEndsWithEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на первую строку, завершающуюся (\0) или 0.
  2. Указатель на вторую строку (подстроку), завершающуюся (\0) или 0.

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

  • ZF = 1: Если первая строка заканчивается с заданной подстроки.
  • ZF = 0: Если первая строка не заканчивается с заданной подстроки.

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string ___db "Евгений Довгополов\0"
  7. ____mName_____db "полв\0"
  8. ____msg_true _db "Строка '%s' заканчивается на '%s'\0"
  9. ____msg_false db "Строка '%s' не заканчивается на '%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_____; Вызываем процедуру SetDataSegment
  17. ________pushs___es:[mName]_________; 2-й: Ложим на вершину стека адрес переменной mName
  18. ________pushs___ds:[string]________; 1-й: Ложим на вершину стека адрес переменной string
  19. ________call____StringEndsWithEx___; Вызываем процедуру StringEndsWithEx(string, mName)
  20. ________jne_____@False_____________; Если ZF=0, то прыгаем на метку @False
  21. ________pushs___ds:[mName]_________; 3-й: Ложим на вершину стека адрес переменной mName
  22. ________pushs___ds:[string]________; 2-й: Ложим на вершину стека адрес переменной string
  23. ________leaax___ds:[msg_true]______; 1-й: Загружаем адрес строки формата msg_true в регистр ds:ax
  24. ________jmp_____@Done______________; Выполняем безусловный переход на метку @Done
  25. ____@False:
  26. ________pushs___ds:[mName]_________; 3-й: Ложим на вершину стека адрес переменной mName
  27. ________pushs___ds:[string]________; 2-й: Ложим на вершину стека адрес переменной string
  28. ________leaax___ds:[msg_false]_____; 1-й: Загружаем адрес строки формата msg_false в регистр ds:ax
  29. ____@Done:
  30. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString
  31. ________add_____sp, 4______________; Выравниваем стек
  32. ________push____0__________________; Ложим на вершину стека байтовое значение кода возврата
  33. ________call____ExitProcessEx______; Вызываем процедуру ExitProcess(0)
  34. ____main endp
  35. code ends
  36. end main
Made on
Tilda