ХАНДЫФАР

Функция StringJoin объединяет массив строк, используя указанный разделитель, и сохраняет результат в подготовленном буфере. Если указатель на массив строк равен 0, функция завершает работу без изменений.

Параметры:

  • DS:AX: Указатель на массив строк, завершающийся (\0) или 0.
  • ES:BX: Указатель на буфер, куда будут сохранены строки.
  • CX: ___Количество строк для объединения.
  • DL: ___Символ разделителя.

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

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

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

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

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

  • Функция не изменяет значения регистров.
  • Буфер должен быть достаточно большим, чтобы вместить объединённые строки и разделители.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Меня\0", "зовут\0"
  6. __________ db "Евгений\0", "Довгополов\0"
  7. ____buffer db 100 dup(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_____dl, ' '
  15. ________mov_____cx, 4
  16. ________lea_____bx, es:[buffer]
  17. ________lea_____ax, ds:[string]
  18. ________call____StringJoin
  19. ________lea_____ax, es:[buffer]
  20. ________call____PrintFormatString
  21. ________xor_____al, al
  22. ________call____ExitProcess
  23. ____main endp
  24. code ends
  25. end main
Функция StringJoin объединяет массив строк, используя указанный разделитель, и сохраняет результат в подготовленном буфере. Если указатель на массив строк равен 0, функция завершает работу без изменений.

Параметры:

  • DS:AX: Указатель на массив строк, завершающийся (\0) или 0.
  • ES:BX: Указатель на буфер, куда будут сохранены строки.
  • CX: ___Количество строк для объединения.
  • DL: ___Символ разделителя.

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

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

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

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

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

  • Функция не изменяет значения регистров.
  • Буфер должен быть достаточно большим, чтобы вместить объединённые строки и разделители.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Меня\0", "зовут\0", "Евгений\0", "Довгополов\0"
  6. ____buffer db 100 dup(0)
  7. data ends
  8. code segment public _______________; Начало сегмента кода
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc___________; Подключаем файл с функциями
  11. ____main proc _____________________; Начало процедуры main
  12. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  13. ________mov_____dl, ' '____________; Копируем значение символа пробела в регистр dl
  14. ________mov_____cx, 4______________; Устанавливаем количество слов равным 4
  15. ________lea_____bx, es:[buffer]____; Загружаем адрес переменной buffer в регистр es:bx
  16. ________lea_____ax, ds:[string]____; Загружаем адрес переменной string в регистр ds:ax
  17. ________call____StringJoin_________; Вызываем процедуру StringJoin(ds:ax, es:bx, cx:4, dl:' ')
  18. ________lea_____ax, es:[buffer]____; Загружаем адрес переменной buffer в регистр ds:ax
  19. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:buffer)
  20. ________xor_____al, al_____________; Обнуляем регистр al
  21. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  22. ____main endp _____________________; Конец процедуры main
  23. code ends _________________________; Конец сегмента кода
  24. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda