ХАНДЫФАР

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

Параметры:

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

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

  • AX: Длина строки (количество символов до первого (\0) или 0).

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string db "Я могу говорить по-"
  7. ___________db "китайски\0"
  8. ____fmtout_db "Длина строки: '%s' = "
  9. ___________db "%d символов.\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___ds:[string]
  18. ________call____StringLengthEx
  19. ________push____ax
  20. ________pushs___ds:[string]
  21. ________call____ToUpperStringEx
  22. ________leaax___ds:[fmtout]
  23. ________call____PrintFormatString
  24. ________add_____sp, 4
  25. ________push____0
  26. ________call____ExitProcessEx
  27. ____main endp
  28. code ends
  29. end main
Функция StringLengthEx вычисляет длину строки, завершающейся (\0) или 0. Если указатель на строку равен 0, функция возвращает длину 0. Функция StringLengthEx автоматически выравнивает стек на 2 байта.

Параметры:

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

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

  • AX: Длина строки (количество символов до первого (\0) или 0).

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

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

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

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

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