ХАНДЫФАР

Функция StringStartsWithEx проверяет, начинается ли первая строка с заданной второй подстроки. Функция StringStartsWithEx автоматически выравнивает стек на 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 "с '%s'\0"
  10. ____msg_false db "Строка '%s' не "
  11. ______________db "начинается с '%s'\0"
  12. data ends
  13. code segment public
  14. ____assume _ds:data, cs:code
  15. ____include Handyfar.inc
  16. ____include Handymac.inc
  17. ____main proc
  18. ________call____SetDataSegment
  19. ________pushs___es:[mName]
  20. ________pushs___ds:[string]
  21. ________call____StringStartsWithEx
  22. ________jne_____@False
  23. ________pushs___ds:[mName]
  24. ________pushs___ds:[string]
  25. ________leaax___ds:[msg_true]
  26. ________jmp_____@Done
  27. ____@False:
  28. ________pushs___ds:[mName]
  29. ________pushs___ds:[string]
  30. ________leaax___ds:[msg_false]
  31. ____@Done:
  32. ________call____PrintFormatString
  33. ________add_____sp, 4
  34. ________push____0
  35. ________call____ExitProcessEx
  36. ____main endp
  37. code ends
  38. end main
Функция StringStartsWithEx проверяет, начинается ли первая строка с заданной второй подстроки. Функция StringStartsWithEx автоматически выравнивает стек на 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____StringStartsWithEx__; Вызываем процедуру StringStartsWithEx(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