ХАНДЫФАР

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

Параметры:

  1. Указатель на массив.
  2. Длина массива (количество элементов).

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____array__dw_4, -1, -4, 3
  7. ____fmtout db_"[%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
  15. ________push____4
  16. ________pushs___ds:[array]
  17. ________call____ArrayNegateEx
  18. ________loopcnt_4
  19. ________leabx___ds:[array]
  20. ________xor_____si, si
  21. ____PrintArrayLoop:
  22. ________push____word ptr[bx+si]
  23. ________leaax___ds:[fmtout]
  24. ________call____PrintFormatString
  25. ________add_____sp, 2
  26. ________incw____si
  27. ________loop____PrintArrayLoop
  28. ________push____0
  29. ________call____ExitProcessEx
  30. ____main endp
  31. code ends
  32. end main
Функция ArrayNegateEx преобразует каждый элемент массива в его отрицательное значение. Функция ArrayNegateEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на массив.
  2. Длина массива (количество элементов).

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____array__dw_4, -1, -4, 3
  7. ____fmtout db_"[%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. ________push____4__________________; 2-й: Ложим на вершину стека длину массива array
  16. ________pushs___ds:[array]_________; 1-й: Ложим на вершину стека адрес массива array
  17. ________call____ArrayNegateEx______; Вызываем процедуру ArrayNegateEx(array, 4)
  18. ________loopcnt_4__________________; Устанавливаем счётчик равным 4. CX := 4
  19. ________leabx___ds:[array]_________; Загружаем адрес массива array в регистр ds:bx
  20. ________xor_____si, si_____________; Обнуляем регистр-индекс
  21. ____PrintArrayLoop:
  22. ________push____word ptr[bx+si]____; 2-й: Ложим на вершину стека значение в bx под индексом si
  23. ________leaax___ds:[fmtout]________; 1-й: Загружаем адрес строки формата fmtout в регистр ds:ax
  24. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtout, bx)
  25. ________add_____sp, 2______________; Выравниваем стек
  26. ________incw____si_________________; Увеличиваем индекс si на 2
  27. ________loop____PrintArrayLoop_____; Выполняем цикл пока регистр cx не равен 0
  28. ________push____0__________________; Ложим на вершину стека байтовое значение кода возврата
  29. ________call____ExitProcessEx______; Вызываем процедуру ExitProcess(0)
  30. ____main endp
  31. code ends
  32. end main
Made on
Tilda