ХАНДЫФАР

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

Параметры:

  • AX: Указатель на массив.
  • BX: Длина массива (количество элементов). Если BX = 0, функция завершает работу.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____array _dw 4, -1, -4, 3
  6. ____fmtout db "[%d] \0"
  7. data ends
  8. code segment public
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc
  11. ____include Handymac.inc
  12. ____main proc
  13. ________call____SetDataSegment
  14. ________mov_____bx, 4
  15. ________lea_____ax, ds:[array]
  16. ________call____ArrayNegate
  17. ________mov_____cx, 4
  18. ________lea_____si, ds:[array]
  19. ____PrintArrayLoop:
  20. ________push____word ptr[si]
  21. ________lea_____ax, ds:[fmtout]
  22. ________call____PrintFormatString
  23. ________add_____sp, 2
  24. ________incw____si
  25. ________loop____PrintArrayLoop
  26. ________xor_____al, al
  27. ________call____ExitProcess
  28. ____main endp
  29. code ends
  30. end main
Функция ArrayNegate преобразует каждый элемент массива в его отрицательное значение.

Параметры:

  • AX: Указатель на массив.
  • BX: Длина массива (количество элементов). Если BX = 0, функция завершает работу.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____array _dw 4, -1, -4, 3
  6. ____fmtout db "[%d] \0"
  7. data ends
  8. code segment public _______________; Начало сегмента кода
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc___________; Подключаем файл с функциями
  11. ____include Handymac.inc___________; Подключаем файл с макросами
  12. ____main proc _____________________; Начало процедуры main
  13. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  14. ________mov_____bx, 4______________; Копируем значение 4 в регистр bx
  15. ________lea_____ax, ds:[array]_____; Загружаем адрес переменной array в регистр ds:ax
  16. ________call____ArrayNegate________; Вызываем процедуру ArrayNegate(ds:ax, 4)
  17. ________mov_____cx, 4______________; Копируем значение 4 в регистр cx
  18. ________lea_____si, ds:[array]_____; Загружаем адрес переменной array в регистр ds:si
  19. ____PrintArrayLoop:
  20. ________push____word ptr[si]_______; 2-й: Сохраняем значение регистра si в стеке
  21. ________lea_____ax, ds:[fmtout]____; 1-й: Загружаем адрес строки формата fmtout в регистр ds:ax
  22. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtout, si)
  23. ________add_____sp, 2______________; Выравниваем стек
  24. ________incw____si_________________; Вызываем макрос incw. Увеличиваем индекс si на 2
  25. ________loop____PrintArrayLoop_____; Выполняем цикл пока CX≠0
  26. ________xor_____al, al_____________; Обнуляем регистр al
  27. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  28. ____main endp _____________________; Конец процедуры main
  29. code ends _________________________; Конец сегмента кода
  30. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda