ХАНДЫФАР

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

Параметры:

  1. Указатель на первый массив (источник).
  2. Указатель на второй массив (назначение).
  3. Количество элементов для копирования.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____array1_dw _23, 54, 83, 91
  7. ____arrlen equ ($-array1) / 2
  8. ____array2_dw _arrlen dup(?)
  9. ____output db__"Скопированный массив: \0"
  10. ____fmtout db__"[%d] \0"
  11. data ends
  12. code segment public
  13. ____assume _ds:data, cs:code
  14. ____include Handyfar.inc
  15. ____include Handymac.inc
  16. ____main proc
  17. ________call____SetDataSegment
  18. ________push____arrlen
  19. ________pushs___es:[array2]
  20. ________pushs___ds:[array1]
  21. ________call____ArrayCopyEx
  22. ________pushs___ds:[output]
  23. ________call____WriteStringEx
  24. ________loopcnt_4
  25. ________leabx___ds:[array2]
  26. ________xor_____si, si
  27. ____PrintArrayLoop:
  28. ________push____word ptr[bx+si]
  29. ________leaax___ds:[fmtout]
  30. ________call____PrintFormatString
  31. ________incw____si
  32. ________loop____PrintArrayLoop
  33. ________add_____sp, 8
  34. ________push____0
  35. ________call____ExitProcessEx
  36. ____main endp
  37. code ends
  38. end main
Функция ArrayCopyEx копирует элементы из первого массива во второй массив. Если количество элементов = 0, функция завершает работу без изменений. Функция ArrayCopyEx автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на первый массив (источник).
  2. Указатель на второй массив (назначение).
  3. Количество элементов для копирования.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____array1_dw _23, 54, 83, 91
  7. ____arrlen equ ($-array1) / 2
  8. ____array2_dw _arrlen dup(?)
  9. ____output db__"Скопированный массив: \0"
  10. ____fmtout db__"[%d] \0"
  11. data ends
  12. code segment public
  13. ____assume _ds:data, cs:code
  14. ____include Handyfar.inc___________; Подключаем файл с функциями
  15. ____include Handymac.inc___________; Подключаем файл с макросами
  16. ____main proc
  17. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  18. ________push____arrlen_____________; 3-й: Ложим на вершину стека длину массива
  19. ________pushs___es:[array2]________; 2-й: Ложим на вершину стека адрес массива array2
  20. ________pushs___ds:[array1]________; 1-й: Ложим на вершину стека адрес массива array1
  21. ________call____ArrayCopyEx________; Вызываем процедуру ArrayCopyEx(array1, array2, arrlen)
  22. ________pushs___ds:[output]________; Ложим на вершину стека адрес переменной output
  23. ________call____WriteStringEx______; Вызываем процедуру WriteStringEx(output)
  24. ________loopcnt_4__________________; Устанавливаем счётчик равным 4. CX := 4
  25. ________leabx___ds:[array2]________; Загружаем адрес массива array2 в регистр ds:bx
  26. ________xor_____si, si_____________; Обнуляем регистр-индекс
  27. ____PrintArrayLoop:
  28. ________push____word ptr[bx+si]____; 2-й: Ложим на вершину стека значение в bx под индексом si
  29. ________leaax___ds:[fmtout]________; 1-й: Загружаем адрес строки формата fmtout в регистр ds:ax
  30. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtout, bx)
  31. ________incw____si_________________; Увеличиваем индекс si на 2
  32. ________loop____PrintArrayLoop_____; Выполняем цикл пока регистр cx не равен 0
  33. ________add_____sp, 8______________; Выравниваем стек
  34. ________push____0__________________; Ложим на вершину стека байтовое значение кода возврата
  35. ________call____ExitProcessEx______; Вызываем процедуру ExitProcess(0)
  36. ____main endp
  37. code ends
  38. end main
Made on
Tilda