ХАНДЫФАР

Функция StringCompareEx выполняет лексикографическое сравнение двух строк, завершающихся (\0) или 0. Если одна из строк равна 0, функция завершает работу и возвращает результат сравнения. Функция StringCompareEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на первую строку, завершающуюся (\0) или 0.
  2. Указатель на вторую строку, завершающуюся (\0) или 0.

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

  • Если строки равны лексикографически:

____AX = 0.
____ZF = 1.

  • Если строки не равны:

AX = 1: Первый отличающийся символ в первой строке больше соответствующего символа во второй строке.
AX = -1: Первый отличающийся символ в первой строке меньше соответствующего символа во второй строке.
ZF = 0.

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

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

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

  • Если строки равны до конца, функция возвращает AX = 0 и устанавливает ZF = 1.
  • Функция не изменяет значения регистров, кроме AX и флагов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string1 _db "Довгополов Евгений\0"
  7. ____string2 _db "Довгополов Сергей\0"
  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. ________pushs___es:[string2]
  18. ________pushs___ds:[string1]
  19. ________call____StringCompareEx
  20. ________jne_____@StringsNotEqual
  21. ________pushs___ds:[equal]
  22. ________jmp_____@Done
  23. ____@StringsNotEqual:
  24. ________pushs___ds:[notEqual]
  25. ____@Done:
  26. ________call____WriteStringEx
  27. ________push____0
  28. ________call____ExitProcessEx
  29. ____main endp
  30. code ends
  31. end main
Функция StringCompareEx выполняет лексикографическое сравнение двух строк, завершающихся (\0) или 0. Если одна из строк равна 0, функция завершает работу и возвращает результат сравнения. Функция StringCompareEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на первую строку, завершающуюся (\0) или 0.
  2. Указатель на вторую строку, завершающуюся (\0) или 0.

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

  • Если строки равны лексикографически:

____AX = 0.
____ZF = 1.

  • Если строки не равны:

AX = 1: Первый отличающийся символ в первой строке больше соответствующего символа во второй строке.
AX = -1: Первый отличающийся символ в первой строке меньше соответствующего символа во второй строке.
ZF = 0.

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

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

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

  • Если строки равны до конца, функция возвращает AX = 0 и устанавливает ZF = 1.
  • Функция не изменяет значения регистров, кроме AX и флагов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string1 _db "Довгополов Евгений\0"
  7. ____string2 _db "Довгополов Сергей\0"
  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. ________pushs___es:[string2]______; 2-й: Ложим на вершину стека адрес переменной string2
  18. ________pushs___ds:[string1]______; 1-й: Ложим на вершину стека адрес переменной string1
  19. ________call____StringCompareEx___; Вызываем процедуру StringCompareEx(string1, string2) := AX и ZF
  20. ________jne_____@StringsNotEqual__; Если ZF=0, то прыгаем на метку @StringsNotEqual
  21. ________pushs___ds:[equal]________; Ложим на вершину стека адрес переменной equal
  22. ________jmp_____@Done_____________; Выполняем безусловный переход на метку @Done
  23. ____@StringsNotEqual:
  24. ________pushs___ds:[notEqual]_____; Ложим на вершину стека адрес переменной notEqual
  25. ____@Done:
  26. ________call____WriteStringEx_____; Вызываем процедуру WriteStringEx(значение из стека)
  27. ________push____0_________________; Ложим на вершину стека байтовое значение кода возврата
  28. ________call____ExitProcessEx_____; Вызываем процедуру ExitProcess(0)
  29. ____main endp
  30. code ends
  31. end main
Made on
Tilda