ХАНДЫФАР

Функция ArrayCopy копирует элементы из первого массива во второй массив. Если CX = 0, функция завершает работу без изменений.

Параметры:

  • DS:AX: Указатель на первый массив (источник).
  • ES:BX: Указатель на второй массив (назначение).
  • CX: ___Количество элементов для копирования. Если CX = 0, функция завершает работу.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____array1_dw _1234h, 2345h, 3456h, 4567h
  6. ____arrlen equ ($-array1) / 2
  7. ____array2_dw _arrlen dup(?)
  8. ____output db__"Скопированный массив: \0"
  9. ____fmtout db__"[%h] \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. ________mov_____cx, arrlen
  18. ________lea_____bx, es:[array2]
  19. ________lea_____ax, ds:[array1]
  20. ________call____ArrayCopy
  21. ________lea_____ax, ds:[output]
  22. ________call____WriteString
  23. ____PrintArrayLoop:
  24. ________push____word ptr[bx]
  25. ________lea_____ax, ds:[fmtout]
  26. ________call____PrintFormatString
  27. ________add_____sp, 2
  28. ________incw____bx
  29. ________loop____PrintArrayLoop
  30. ________xor_____al, al
  31. ________call____ExitProcess
  32. ____main endp
  33. code ends
  34. end main
Функция ArrayCopy копирует элементы из первого массива во второй массив. Если CX = 0, функция завершает работу без изменений.

Параметры:

  • DS:AX: Указатель на первый массив (источник).
  • ES:BX: Указатель на второй массив (назначение).
  • CX: ___Количество элементов для копирования. Если CX = 0, функция завершает работу.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____array1_dw _1234h, 2345h, 3456h, 4567h
  6. ____arrlen equ ($-array1) / 2
  7. ____array2_dw _arrlen dup(?)
  8. ____output db__"Скопированный массив: \0"
  9. ____fmtout db__"[%h] \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 _____________________; Начало процедуры main
  16. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  17. ________mov_____cx, arrlen_________; Копируем длину массива в регистр cx
  18. ________lea_____bx, es:[array2]____; Загружаем адрес переменной array2 в регистр es:bx
  19. ________lea_____ax, ds:[array1]____; Загружаем адрес переменной array1 в регистр ds:ax
  20. ________call____ArrayCopy__________; Вызываем процедуру ArrayCopy(ds:ax, es:bx, cx)
  21. ________lea_____ax, ds:[output]____; Загружаем адрес переменной output в регистр ds:ax
  22. ________call____WriteString________; Вызываем процедуру WriteString(ax)
  23. ____PrintArrayLoop:
  24. ________push____word ptr[bx]_______; 2-й: Сохраняем значение регистра bx в стеке
  25. ________lea_____ax, ds:[fmtout]____; 1-й: Загружаем адрес строки формата fmtout в регистр ds:ax
  26. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtout, bx)
  27. ________add_____sp, 2______________; Выравниваем стек
  28. ________incw____bx_________________; Вызываем макрос incw. Увеличиваем индекс bx на 2
  29. ________loop____PrintArrayLoop_____; Выполняем цикл пока CX≠0
  30. ________xor_____al, al_____________; Обнуляем регистр al
  31. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  32. ____main endp _____________________; Конец процедуры main
  33. code ends _________________________; Конец сегмента кода
  34. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda