ХАНДЫФАР

Функция ArrayCompare сравнивает два массива поэлементно. Если массивы равны, функция устанавливает флаг нуля (ZF = 1), иначе сбрасывает его (ZF = 0).

Параметры:

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

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

  • Если массивы равны:

____ZF = 1.

  • Если массивы не равны или один из указателей равен 0:

____ZF = 0.

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

  • Функция влияет на все флаги, включая флаг ZF, SF и другие.

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____array1___dw 1234h, 2345h, 3456h, 4567h
  6. ____array2___dw 1234h, 2345h, 3454h, 4567h
  7. ____equal____db "Массивы равны!\0"
  8. ____notEqual_db "Массивы не равны!\0"
  9. data ends
  10. code segment public
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc
  13. ____main proc
  14. ________call____SetDataSegment
  15. ________mov_____cx, 4
  16. ________lea_____bx, es:[array2]
  17. ________lea_____ax, ds:[array1]
  18. ________call____ArrayCompare
  19. ________jne_____ArraysNotEqual
  20. ________lea_____ax, ds:[equal]
  21. ________jmp_____Done
  22. ____ArraysNotEqual:
  23. ________lea_____ax, ds:[notEqual]
  24. ____Done:
  25. ________call____WriteString
  26. ________xor_____al, al
  27. ________call____ExitProcess
  28. ____main endp
  29. code ends
  30. end main
Функция ArrayCompare сравнивает два массива поэлементно. Если массивы равны, функция устанавливает флаг нуля (ZF = 1), иначе сбрасывает его (ZF = 0).

Параметры:

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

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

  • Если массивы равны:

____ZF = 1.

  • Если массивы не равны или один из указателей равен 0:

____ZF = 0.

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

  • Функция влияет на все флаги, включая флаг ZF, SF и другие.

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____array1___dw 1234h, 2345h, 3456h, 4567h
  6. ____array2___dw 1234h, 2345h, 3454h, 4567h
  7. ____equal____db "Массивы равны!\0"
  8. ____notEqual_db "Массивы не равны!\0"
  9. data ends
  10. code segment public _______________; Начало сегмента кода
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc___________; Подключаем файл с функциями
  13. ____main proc _____________________; Начало процедуры main
  14. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  15. ________mov_____cx, 4______________; Копируем число 4 в регистр cx
  16. ________lea_____bx, es:[array2]____; Загружаем адрес переменной array2 в регистр es:bx
  17. ________lea_____ax, ds:[array1]____; Загружаем адрес переменной array1 в регистр ds:ax
  18. ________call____ArrayCompare_______; Вызываем процедуру ArrayCompare(ds:ax, es:bx, cx) := ZF
  19. ________jne_____ArraysNotEqual_____; Если ZF=0, то прыгаем на метку ArraysNotEqual
  20. ________lea_____ax, ds:[equal]_____; Загружаем адрес переменной equal в регистр ds:ax
  21. ________jmp_____Done_______________; Выполняем безусловный переход на метку Done
  22. ____ArraysNotEqual:
  23. ________lea_____ax, ds:[notEqual]__; Загружаем адрес переменной notEqual в регистр ds:ax
  24. ____Done:
  25. ________call____WriteString________; Вызываем процедуру WriteString(ax)
  26. ________xor_____al, al_____________; Обнуляем регистр al
  27. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  28. ____main endp _____________________; Конец процедуры main
  29. code ends _________________________; Конец сегмента кода
  30. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda