ХАНДЫФАР

Функция ArrayMakeUniqueEx копирует уникальные элементы из первого массива во второй массив. Функция ArrayMakeUniqueEx автоматически выравнивает стек на 6 байт.

Параметры:

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

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

  • CX: Количество уникальных элементов, скопированных из первого массива во второй массив.

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

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

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

Если элемент уже присутствует во втором массиве, он не копируется повторно.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____origin dw__7, 5, 8, 3, 7, 5, 6, 3, 8
  7. ___________dw__1, 9, 5
  8. ____arrlen equ_($-origin) / 2
  9. ____unique dw__255 dup(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:[unique]
  20. ________pushs___ds:[origin]
  21. ________call____ArrayMakeUniqueEx
  22. ________leabx___ds:[unique]
  23. ________xor_____si, si
  24. ____PrintArrayLoop:
  25. ________push____word ptr[bx+si]
  26. ________leaax___ds:[fmtout]
  27. ________call____PrintFormatString
  28. ________add_____sp, 2
  29. ________incw____si
  30. ________loop____PrintArrayLoop
  31. ________push____0
  32. ________call____ExitProcessEx
  33. ____main endp
  34. code ends
  35. end main
Функция ArrayMakeUniqueEx копирует уникальные элементы из первого массива во второй массив. Функция ArrayMakeUniqueEx автоматически выравнивает стек на 6 байт.

Параметры:

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

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

  • CX: Количество уникальных элементов, скопированных из первого массива во второй массив.

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

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

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

Если элемент уже присутствует во втором массиве, он не копируется повторно.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____origin dw__7, 5, 8, 3, 7, 5, 6, 3, 8, 1, 9, 5
  7. ____arrlen equ_($-origin) / 2
  8. ____unique dw__255 dup(0)
  9. ____fmtout 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_____; Вызываем процедуру SetDataSegment
  17. ________push____arrlen_____________; 3-й: Ложим на вершину стека длину массива
  18. ________pushs___es:[unique]________; 2-й: Ложим на вершину стека длину массива unique
  19. ________pushs___ds:[origin]________; 1-й: Ложим на вершину стека адрес массива origin
  20. ________call____ArrayMakeUniqueEx__; Вызываем процедуру ArrayMakeUniqueEx(origin, unique, 12) := CX
  21. ________leabx___ds:[unique]________; Загружаем адрес массива unique в регистр ds:bx
  22. ________xor_____si, si_____________; Обнуляем регистр-индекс
  23. ____PrintArrayLoop:
  24. ________push____word ptr[bx+si]____; 2-й: Ложим на вершину стека значение в bx под индексом si
  25. ________leaax___ds:[fmtout]________; 1-й: Загружаем адрес строки формата fmtout в регистр ds:ax
  26. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtout, bx)
  27. ________add_____sp, 2______________; Выравниваем стек
  28. ________incw____si_________________; Увеличиваем индекс si на 2
  29. ________loop____PrintArrayLoop_____; Выполняем цикл пока регистр cx не равен 0
  30. ________push____0__________________; Ложим на вершину стека байтовое значение кода возврата
  31. ________call____ExitProcessEx______; Вызываем процедуру ExitProcess(0)
  32. ____main endp
  33. code ends
  34. end main
Made on
Tilda