ХАНДЫФАР

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

Параметры:

  • DS:AX: Указатель на первую строку, завершающуюся (\0) или 0.
  • ES:BX: Указатель на вторую строку, завершающуюся (\0) или 0.

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

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

____AX = 0.
____ZF = 1.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string1__db "Евгений\0"
  6. ____string2__db "Довгополов\0"
  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. ________lea_____bx, es:[string2]
  16. ________lea_____ax, ds:[string1]
  17. ________call____StringCompare
  18. ________jnz_____StringsNotEqual
  19. ________lea_____ax, ds:[equal]
  20. ________jmp_____Done
  21. ____StringsNotEqual:
  22. ________lea_____ax, ds:[notEqual]
  23. ____Done:
  24. ________call____WriteString
  25. ________xor_____al, al
  26. ________call____ExitProcess
  27. ____main endp
  28. code ends
  29. end main
Функция StringCompare выполняет лексикографическое сравнение двух строк, завершающихся (\0) или 0. Если одна из строк равна 0, функция завершает работу и возвращает результат сравнения.

Параметры:

  • DS:AX: Указатель на первую строку, завершающуюся (\0) или 0.
  • ES:BX: Указатель на вторую строку, завершающуюся (\0) или 0.

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

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

____AX = 0.
____ZF = 1.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string1__db "Евгений\0"
  6. ____string2__db "Довгополов\0"
  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. ________lea_____bx, es:[string2]___; Загружаем адрес переменной string2 в регистр es:bx
  16. ________lea_____ax, ds:[string1]___; Загружаем адрес переменной string1 в регистр ds:ax
  17. ________call____StringCompare______; Вызываем процедуру StringCompare(ds:ax, es:bx) := AX и ZF
  18. ________jnz_____StringsNotEqual____; Если ZF=0, то прыгаем на метку StringsNotEqual
  19. ________lea_____ax, ds:[equal]_____; Загружаем адрес переменной equal в регистр ds:ax
  20. ________jmp_____Done_______________; Выполняем безусловный переход на метку Done
  21. ____StringsNotEqual:
  22. ________lea_____ax, ds:[notEqual]__; Загружаем адрес переменной notEqual в регистр ds:ax
  23. ____Done:
  24. ________call____WriteString________; Вызываем процедуру WriteString(ax)
  25. ________xor_____al, al_____________; Обнуляем регистр al
  26. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  27. ____main endp _____________________; Конец процедуры main
  28. code ends _________________________; Конец сегмента кода
  29. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda