ХАНДЫФАР

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

Параметры:

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

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

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

____ZF = 1.

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

____ZF = 0.

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____array1___dw 23, 54, 83, 91
  7. ____array2___dw 23, 54, 41, 91
  8. ____equal____db "Массивы равны!\0"
  9. ____notEqual db "Массивы не равны!\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
  17. ________push____4
  18. ________pushs___es:[array2]
  19. ________pushs___ds:[array1]
  20. ________call____ArrayCompareEx
  21. ________jne_____@ArraysNotEqual
  22. ________pushs___ds:[equal]
  23. ________jmp_____@Done
  24. ____@ArraysNotEqual:
  25. ________pushs___ds:[notEqual]
  26. ____@Done:
  27. ________call____WriteStringEx
  28. ________push____0
  29. ________call____ExitProcessEx
  30. ____main endp
  31. code ends
  32. end main
Функция ArrayCompareEx сравнивает два массива поэлементно. Если массивы равны, функция устанавливает флаг нуля (ZF = 1), иначе сбрасывает его (ZF = 0). Функция ArrayCompareEx автоматически выравнивает стек на 6 байт.

Параметры:

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

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

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

____ZF = 1.

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

____ZF = 0.

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____array1___dw 23, 54, 83, 91
  7. ____array2___dw 23, 54, 41, 91
  8. ____equal____db "Массивы равны!\0"
  9. ____notEqual db "Массивы не равны!\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____4________________; 3-й: Ложим на вершину стека длину массива
  18. ________pushs___es:[array2]______; 2-й: Ложим на вершину стека адрес массива array2
  19. ________pushs___ds:[array1]______; 1-й: Ложим на вершину стека адрес массива array1
  20. ________call____ArrayCompareEx___; Вызываем процедуру ArrayCompareEx(array1, array2, 4) := ZF
  21. ________jne_____@ArraysNotEqual__; Если ZF=0, то прыгаем на метку @ArraysNotEqual
  22. ________pushs___ds:[equal]_______; Ложим на вершину стека адрес переменной equal
  23. ________jmp_____@Done____________; Выполняем безусловный переход на метку @Done
  24. ____@ArraysNotEqual:
  25. ________pushs___ds:[notEqual]____; Ложим на вершину стека адрес переменной notEqual
  26. ____@Done:
  27. ________call____WriteStringEx____; Вызываем процедуру WriteStringEx(значение из стека)
  28. ________push____0________________; Ложим на вершину стека байтовое значение кода возврата
  29. ________call____ExitProcessEx____; Вызываем процедуру ExitProcess(0)
  30. ____main endp
  31. code ends
  32. end main
Made on
Tilda